/**********************************************************************/
/**                       Microsoft LAN Manager                      **/
/**                Copyright(c) Microsoft Corp., 1990, 1991          **/
/**********************************************************************/

/*
    uisys.hxx
    system related routines, like drive checking, etc.

    FILE HISTORY:
        ChuckC      18-Jan-1991 Created
        JonN        31-Jan-1991 Added File APIs
        JonN        22-Mar-1991 Coderev changes (2/20/91, JonN, RustanlL, ?)
        KeithMo     09-Oct-1991 Win32 Conversion.
        terryk      28-Feb-1992 Added more file io functions
        beng        29-Mar-1992 Remove odious PSZ type
	terryk	    17-APr-1992	Added FileRead functions.
        JonN        19-May-1992 Added EnumAllDrives(), LPTs, Comms
*/


/*
 * check for valid devices
 */
DLL_BASED
APIERR CheckLocalDrive( const TCHAR *DeviceName ) ;
DLL_BASED
APIERR CheckLocalLpt( const TCHAR * pszDeviceName ) ;
DLL_BASED
APIERR CheckLocalComm( const TCHAR * pszDeviceName ) ;

/*
 * enumerate local devices
 */
DLL_BASED
ULONG EnumLocalDrives() ;
DLL_BASED
ULONG EnumLocalLPTs() ;
DLL_BASED
ULONG EnumLocalComms() ;

/*
 * enumerate redirected devices
 */
DLL_BASED
ULONG EnumNetDrives() ;
DLL_BASED
ULONG EnumNetLPTs() ;
DLL_BASED
ULONG EnumNetComms() ;

/*
 * check unavail devices
 */
DLL_BASED
APIERR CheckUnavailDevice(const TCHAR * pszDevice, TCHAR * pszRemote, INT *psType) ;

/*
 * enumerate unavail devices
 */
DLL_BASED
ULONG EnumUnavailDrives() ;
DLL_BASED
ULONG EnumUnavailLPTs() ;
DLL_BASED
ULONG EnumUnavailComms() ;

/*
 * enumerate all devices (all valid designations for a device of this type)
 */
DLL_BASED
ULONG EnumAllDrives() ;
DLL_BASED
ULONG EnumAllLPTs() ;
DLL_BASED
ULONG EnumAllComms() ;


/****************************************************************************\
*
*NAME       File APIs
*
*SYNOPSIS:  These APIs are primitive File IO operations using ULONG as
*           a file handle.  They provide line-oriented access to text
*           files.  Equivalent functionality is available under both
*           Windows and DOS/OS2, although error reporting is more limited
*           under Windows.
*
*INTERFACE:
*
*       APIERR FileOpenRead( PULONG pulFileHandle, const TCHAR * cpszFileName ) ;
*               Opens a file for reading only.  Returns FAPI error code.
*               Windows returns only NO_ERROR or ERROR_FILE_NOT_FOUND.
*
*       APIERR FileOpenWrite( PULONG pulFileHandle, const TCHAR * cpszFileName ) ;
*               Creates a new file, deleting any existing file.  Returns
*               FAPI error code.  Windows returns only NO_ERROR or
*               ERROR_WRITE_FAULT.
*
*       APIERR FileClose( ULONG ulFileHandle ) ;
*               Closes a file opened by FileOpenRead or FileOpenWrite.
*               Returns FAPI error code.  Windows returns only NO_ERROR
*               or ERROR_READ_FAULT (regardless of whether file was
*               opened for reading or writing).  Do not close if file
*               was not successfully opened.
*
*       APIERR FileReadLine( ULONG ulFileHandle, PSZ pszBuffer, UINT cbBuffer ) ;
*               Reads a single line from the file, where a line is
*               terminated by '\n'.  Termination is left on the string.
*               Returns ERROR_INSUFFICIENT_BUFFER to indicate EOF as well
*               as a line longer than cbBuffer.
*
*       APIERR FileWriteLine( ULONG ulFileHandle, const TCHAR * cpszBuffer ) ;
*               Writes a null-terminated string to the file.  Be sure
*               that the string is "\r\n" terminated.
*
*
*
*CAVEATS:       Windows cannot return as wide a variety of error codes as
*               OS2, so Windows programs should take return codes
*               other than NO_ERROR with a grain of salt.
*
*               Treat the ULONG file handles as you would DosOpen file
*               handles, e.g.
*               - do not use before opening file
*               - do not read file opened with FileOpenWrite, or vice versa
*               - always close successfully opened files
*
*
*NOTES:
*
*HISTORY:   JonN     31-Jan-1991  Created
*           JonN     21-Mar-1991  Code review changes from 2/20/91 (attended
*                                 by JonN, RustanL, ?)
*           terryk   28-Feb-1992  Added
*                                       FileReadBuffer
*                                       FileWriteBuffer
*                                       FileSeekAbsolute
*                                       FileSeekRelative
*                                       FileSeekFromEnd
*                                       FileTell
*
\****************************************************************************/
DLL_BASED
APIERR FileOpenRead( ULONG * pulFileHandle, const TCHAR * cpszFileName ) ;
DLL_BASED
APIERR FileOpenWrite( ULONG * pulFileHandle, const TCHAR * cpszFileName ) ;
DLL_BASED
APIERR FileOpenReadWrite( ULONG *pulFileHandle, const TCHAR * cpszFileName ) ;
DLL_BASED
APIERR FileClose( ULONG ulFileHandle ) ;
DLL_BASED
APIERR FileReadLine( ULONG ulFileHandle, TCHAR * pszBuffer, UINT cbBuffer ) ;
DLL_BASED
APIERR FileWriteLine( ULONG ulFileHandle, const TCHAR * cpszBuffer ) ;
DLL_BASED
APIERR FileWriteLineAnsi( ULONG ulFileHandle, const CHAR * pszBuffer,
                          UINT cbBuffer ) ;
DLL_BASED
APIERR FileReadBuffer( ULONG ulFileHandle, BYTE * pszBuffer, UINT cbBuffer, UINT *pcbReceived );
DLL_BASED
APIERR FileWriteBuffer( ULONG ulFileHandle, const BYTE * cpszBuffer, UINT cbBuffer, UINT *pcbSent );
DLL_BASED
APIERR FileSeekAbsolute( ULONG ulFileHandle, LONG lOffset );
DLL_BASED
APIERR FileSeekRelative( ULONG ulFileHandle, LONG lOffset );
DLL_BASED
APIERR FileSeekFromEnd( ULONG ulFileHanlde, LONG lOffset );
DLL_BASED
APIERR FileTell( ULONG ulFileHandle, LONG * pcbPosition );