Listing 1: Declaring recls API functions.

/* /////////////////////////////////////////////////////////////
 * Extract from std/recls.d
 * www:    http://www.digitalmars.com/d
 * Copyright (C) 2002, Synesis Software Pty Ltd.
 * (Licensed under the Synesis Software Standard Source License:
 *  http://www.synesis.com.au/licenses/ssssl.html)
 * ////////////////////////////////////////////////////////// */

// Module
module std.recls;
// Imports
import std.string;
// Typedefs
private alias int             recls_sint32_t;
public alias uint             recls_uint32_t;
public typedef int            recls_bool_t;
public alias recls_bool_t     boolean;

version(Windows)
{
  public struct               recls_time_t
  {
    uint  dwLowDateTime;
    uint  dwHighDateTime; 
  };
  alias ulong                 recls_filesize_t;
}
else version(Linux)
{
  typedef time_t              recls_time_t;

  typedef off_t               recls_filesize_t;
}
public typedef void           *hrecls_t;
public typedef void           *recls_info_t;
public typedef void           *recls_process_fn_param_t;
public typedef recls_sint32_t recls_rc_t;
public recls_bool_t RECLS_FAILED(recls_rc_t rc)
{
  return (recls_bool_t)(rc < 0);
}
public recls_bool_t RECLS_SUCCEEDED(recls_rc_t rc)
{
  return (recls_bool_t)!RECLS_FAILED(rc);
}
// Values
public const recls_rc_t RECLS_RC_OK           = (recls_rc_t)(0);
public const recls_rc_t RECLS_RC_NO_MORE_DATA = (recls_rc_t)(-1004);
public enum RECLS_FLAG
{
    RECLS_F_FILES           = 0x00000001
  , RECLS_F_DIRECTORIES     = 0x00000002
  , RECLS_F_LINKS           = 0x00000004
  , RECLS_F_DEVICES         = 0x00000008
  , RECLS_F_RECURSIVE       = 0x00010000
  , RECLS_F_NO_FOLLOW_LINKS = 0x00020000
  , RECLS_F_DIRECTORY_PARTS = 0x00040000
  , RECLS_F_DETAILS_LATER   = 0x00080000
};
// Private recls API declarations
extern (Windows)
{
  private recls_rc_t Recls_Search(char            *searchRoot
                                , char            *pattern
                                , recls_uint32_t  flags
                                , hrecls_t        *phSrch);
  private void Recls_SearchClose(in hrecls_t hSrch);

  private recls_rc_t Recls_GetNext(in hrecls_t hSrch);
  private recls_rc_t Recls_GetDetails(in hrecls_t hSrch, 
                                                 out recls_info_t pinfo);
  private recls_rc_t Recls_GetNextDetails(in hrecls_t hSrch, 
                                                 out recls_info_t pinfo);
  private void Recls_CloseDetails(in recls_info_t fileInfo);
  private recls_rc_t Recls_CopyDetails(in recls_info_t fileInfo, 
                                                 in recls_info_t *pinfo);
  private recls_rc_t Recls_OutstandingDetails(in hrecls_t hSrch, 
                                                 out recls_uint32_t count);
  private recls_rc_t Recls_GetLastError(in hrecls_t hSrch);
  private int Recls_GetErrorString(in recls_rc_t rc, in char *buffer, 
                                                 in uint cchBuffer);
  private int Recls_GetLastErrorString(in hrecls_t hSrch, in char *buffer, 
                                                 in uint cchBuffer);
  private uint Recls_GetPathProperty(in recls_info_t fileInfo,in char *buffer,
                                                 in uint cchBuffer);
version(Windows)
{
  private void Recls_GetDriveProperty(in recls_info_t fileInfo, 
                                                 out char chDrive);
}
  private uint Recls_GetDirectoryProperty(in recls_info_t fileInfo, 
                                        in char *buffer, in uint cchBuffer);
  . . . // And all the other functions
}