Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

454 lines
19 KiB

/*
* SULIB.H - Windows/DOS Setup common code
*
* Modification History:
*
*
* 3/23/89 Toddla combined common.h and prototypes into this file
* 1/28/91 MichaelE Added AUDIO_CARDS_SECT for different audio card choices.
* 4/17/91 Removed some DOS.ASM routines not used anywhere.
* 5/29/91 JKLin added prototype for IsCDROMDrive function
*
*/
#ifndef PH_SULIB
#define PH_SULIB
#define FAR_HEAP
/* has windows.h been included */
#ifndef WM_USER
#ifdef NULL
#undef NULL
#endif
#define NULL 0
#define FALSE 0
#define TRUE 1
#define FAR far
#define NEAR near
#define PASCAL pascal
#define LONG long
#define VOID void
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) (((WORD)(w) >> 8) & 0xFF)
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef int BOOL;
typedef char *PSTR;
typedef char NEAR *NPSTR;
typedef char FAR *LPSTR;
typedef int FAR *LPINT;
typedef WORD FAR *LPWORD;
#endif
#define FALLOC(n) (VOID FAR *)GlobalLock(GlobalAlloc(GHND, (DWORD)(n)))
#define FFREE(n) GlobalFree((HANDLE)HIWORD((DWORD)(n)))
#define FOPEN(sz) _lopen(sz,0 /*READ*/)
#define FCREATE(sz) _lcreat(sz,0)
#define FCLOSE(fh) _lclose(fh)
#define FREAD(fh,buf,len) _lread(fh,buf,len)
#define FWRITE(fh,buf,len) _lwrite(fh,buf,len)
#define FSEEK(fh,off,i) _llseek(fh,(DWORD)off,i)
#define FERROR() 0
#define ALLOC(n) (VOID NEAR *)LocalAlloc(LPTR,n)
#define FREE(p) LocalFree(p)
#define SIZE(p) LocalSize(p)
#define REALLOC(p,n) LocalReAlloc(p,n,LMEM_MOVEABLE)
/* flags for _lseek */
#define SEEK_CUR 1
#define SEEK_END 2
#define SEEK_SET 0
#define NORMAL_5BH 0x00 // create normal file for int 21h/5bh call.
#define ACCESS_DENIED -2
#define MAXPATHLEN 65 /* path length max + Null Byte */
#define MAXFILESPECLEN 67 /* drive: + path length max + Null Byte */
#define MAXCMDLINELEN 128 /* Maximum length of DOS command line */
#define FILEMAX 14 /* 8.3 + NULL byte */
#define MAX_INF_LINE_LEN 150 /* Maximum length of any .inf line */
#define MAX_SYS_INF_LEN 16 /* ##: + 8.3 + NULL */
#define MAX_PROF_LINE_LEN 15 /* Mamimum length of any profile string */
#define MAX_ASPECT_STR_LEN 11 /* Max length of aspect ratio string */
#define MAX_VDD_LEN 75 /* multiple vdd names, vdd,vdd,vdd ect. */
#define MAX_SECT_NAME_LEN 20 /* Max length of a section Name. */
#define MAX_FILE_SPEC 15 // 8.3 + X: + NULL.
#define WIN386VER "win386"
#define MACHINE_SECT "machine"
#define SYSTEM_SECT "system"
#define DISPLAY_SECT "display"
#define KEYBOARD_DRV_SECT "keyboard.drivers"
#define KEYTYPE_SECT "keyboard.types"
#define KEYBOARD_TABLES_SECT "keyboard.tables"
#define MOUSE_SECT "pointing.device"
#define DOS_MOUSE_SECT "dos.mouse.drivers"
#define SYSFONT_SECT "sysfonts"
#define OEMFONT_SECT "oemfonts"
#define FIXEDFON_SECT "fixedfonts"
#define DISK_SECT "disks"
#define OEMDISK_SECT "oemdisks"
#define USER_FONTS_SECT "fonts"
#define LANGUAGE_SECT "language"
#define NETWORK_SECT "network"
#define EXCLUSIONS_SECT "exclusions"
#define EBIOS_SECT "ebios"
#define AUDIO_CARDS_SECT "Audio.Hardware"
#define INTL_SECT "intl"
#define S_LANG "sLanguage"
#define COMPATIBILITY "compatibility"
#define CSCALE "continuousscaling"
#define LIM_SECT "lim"
#define CACHE_SECT "diskcache"
#define VDISK_SECT "ramdrive"
#define USADLL "usadll" /* dll profile string for usa */
#define DEFKEYDLL "defkeydll" /* data sectio profile string */
#define CHDISK(n) (char)((n) < 10 ? '0' + (char)(n) : 'A' + (char)((n) - 10))
#define FILES "files"
#define BUFFERS "buffers"
#define NUM_FILES "= 30"
#define EMM_SWITCH " /e"
#define REM "rem "
#define HIMEM "himem.sys"
#define SMARTDRV "smartdrv.sys"
#define RAMDRIVE "ramdrive.sys"
#define MOUSE_SYS "mouse.sys"
#define EGASYS "ega.sys"
#define LIMDRIVER "emm386.sys"
#define AUTOEXEC_BAT "autoexec.bat"
#define AUTOEXEC_BAK "autoexec.old"
#define AUTOEXEC_WIN "autoexec.win"
#define CONFIG_SYS "config.sys" /* Name of config.sys file */
#define CONFIG_BAK "config.old" /* Name of config.bak file */
#define CONFIG_WIN "config.win"
#define OEMINFFILE "oemsetup.inf"
#define SETUPEXE "setup.exe"
#define SETUPEXE30 "setupexe.30"
#define SETUPINF "setup.inf"
#define SETUPINF30 "setupinf.30"
#define BOOT_SECT_INI "boot"
#define KEYB_SECT_INI "keyboard"
#define SYSTEM_SECT_INI "386enh"
#define BOOT_DESC_INI "boot.description"
#define SYSTEMSRC "system.src"
#define PROCESSOR "data.product" /* used to retrieve processor = */
#define WIN386VER "win386" /* means were setting up win386 */
#define CODEPAGES "codepages"
#define RAMDRIVEMIN 128
#define SMARTDRVMIN 256
/* These are the module names that can be found in the LIBRARY entry of
all mouse and display drivrs. */
#define MOUSE_LIB "mouse"
#define DISPLAY_LIB "display"
/* These are the possible return values from fnProcessConfig or
fnAutoexecProcess*/
#define CONFIG_ERR 0x8000
#define OPEN_CONFIG_ERR (CONFIG_ERR + 2)
#define OPEN_AUTOEXEC_ERR (CONFIG_ERR + 3)
#define RENAME_FAIL (CONFIG_ERR + 4)
#define CREATE_FAIL (CONFIG_ERR + 5)
#define WRITE_FAIL (CONFIG_ERR + 6)
#define WRITE_SUCCESS 0x0001
#define CHECK_COMPAT_SUCCESS 0x0004
#define RET_PRAMS_SUCCESS 0x0008
#define SET_PRAMS_SUCCESS 0x0010
#define CONFIG_DIRTY 0x0020 // file needs to be writen
#define AUTOEXEC_DIRTY 0x0040 // file needs to be writen
#define DO_PATH 0x0001 // bit def's to specify work
#define DO_TEMP 0x0002 // needed to autoexec.bat file.
#define DO_MOUSE 0x0004 // mouse driver install
#define RETURN_PRAMS 0x0001
#define SET_PRAMS 0x0002
#define CHECK_COMPAT 0x0004
#define WRITE_SYS 0x0008
#define WRITE_BAK 0x0010 // Option flags for fnProcessFile
#define WRITE_NONE 0x0020
#define MUNGE_AUTO 0x0080
#define ASSURE_OPEN 0x0100
#define ASSURE_MOUSE_POSITION 0x0200
#define MUNGE_MDK 0x0400 // option flag for mdk path/env
#define NO_ACTION -1 // Option flag defines for fnUpdateDevice
#define REMOVE_DEVICE -2
#define RETURN_PRESENCE -3
#define REMOUT_DEVICE -4
#define ADD_DEVICE -5
#define ADD_DEVICE_FIRST -6
/* These defines are used as arguments to the fnCheckDevice call. */
#define CACHE 0
#define LIM 1
#define VDISK 2
/* These are used as the only argument to the fnCreateFileBuffer function
call. They denote which buffer and file is to be created. */
#define CONFIG 0x1
#define AUTOEXEC 0x2
#define REMOTE 0x3 /* Return value from DosIsRemote */
/* Used in the fnCopyBuf call to specify the copying of the remainder on
the from buffer. */
#define CNT_Z 0x1A
/* Used as an argument in function call fnCheckDevice(); */
#define NO_REMOVE FALSE
#define YES_REMOVE TRUE
#define REMAINDER 0xffff // Used to copy remainder of buffer.
#define ISEOF(c) ((c) == '\0' || (c) == CNT_Z)
#define ISSEP(c) ((c) == '=' || (c) == ',')
#define ISWHITE(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\r')
#define ISFILL(c) ((c) == ' ' || (c) == '\t')
#define ISEOL(c) ((c) == '\n' || (c) == '\r' || (c) == '\0' || (c) == CNT_Z)
#define ISCRLF(c) ((c) == '\n' || (c) == '\r')
#define ISNOISE(c) ((c) == '"')
#define ISDIGIT(c) ((c) >= '0' && (c) <= '9')
#define ISHEX(c) (ISDIGIT(c) || ISCHAR(c))
#define ISCHAR(c) (((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z'))
#define SLASH(c) ((c) == '/' || (c) == '\\')
#define DEVICESEP(c) ((c) == '/' || (c) == '\\' || (c) == '=' || (c) == ' ' || (c) == '\t')
//#define UP_CASE(c) ((c) | 0x20) // this is lower case !
#define UPCASE(c) (((c) >= 'a' && (c) <= 'z') ? ((c) & 0xdf) : (c))
#define HEXVAL(c) (ISDIGIT(c) ? (c) - '0' : UP_CASE(c) - 'a' + 10)
#define CHSEPSTR "\\"
#define EQUAL '='
#define SPACE ' '
#define LF 0x0A
#define CR 0x0D
/*
* directory where MDK Tools executables, Include and Lib files are installed
*/
//extern char szMDKPath[MAXPATHLEN];
//extern char szMDKIncludePath[MAXPATHLEN];
//extern char szMDKLibPath[MAXPATHLEN];
typedef LPSTR PINF;
extern PINF FAR PASCAL infOpen(LPSTR szInf);
extern void FAR PASCAL infClose(PINF pinf);
extern PINF FAR PASCAL infSetDefault(PINF pinf);
extern PINF FAR PASCAL infFindSection(PINF pinf, LPSTR szSection);
extern BOOL FAR PASCAL infGetProfileString(PINF pinf, LPSTR szSection, LPSTR szItem,LPSTR szBuf);
extern BOOL FAR PASCAL infParseField(PINF szData, int n, LPSTR szBuf);
extern PINF FAR PASCAL infNextLine(PINF pinf);
extern int FAR PASCAL infLineCount(PINF pinf);
extern BOOL FAR PASCAL infLookup(LPSTR szInf, LPSTR szBuf);
/* TYPEDEFS - copy.c */
typedef BOOL (FAR PASCAL *FPFNCOPY) (int,int,LPSTR);
#define COPY_ERROR 0x0001
#define COPY_STATUS 0x0002
#define COPY_INSERTDISK 0x0003
#define COPY_QUERYCOPY 0x0004
#define COPY_START 0x0005
#define COPY_END 0x0006
#define COPY_EXISTS 0x0007
extern WORD FAR PASCAL FileCopy (LPSTR szSource, LPSTR szDir, FPFNCOPY fpfnCopy, WORD fCopy);
#define FC_FILE 0x0000
#define FC_LIST 0x0001
#define FC_SECTION 0x0002
#define FC_QUALIFIED 0x0008
#define FC_DEST_QUALIFIED 0x0010
#define FC_LISTTYPE 0x0020
#define FC_CALLBACK_WITH_VER 0x0040
#define FC_ABORT 0
#define FC_IGNORE 1
#define FC_RETRY 2
#define FC_ERROR_LOADED_DRIVER 0x80
/* External functions from copy.c */
extern void FAR PASCAL fartonear(LPSTR dst, LPSTR src);
extern BOOL FAR PASCAL ExpandFileName(LPSTR szFile, LPSTR szPath);
extern int FAR PASCAL DosCopy(LPSTR szFile, LPSTR szPath);
extern void FAR PASCAL catpath(LPSTR path, LPSTR sz);
extern BOOL FAR PASCAL fnFindFile(char *);
extern LPSTR FAR PASCAL FileName(LPSTR szPath);
extern LPSTR FAR PASCAL StripPathName(LPSTR szPath);
/* TYPEDEFS - dos.asm */
extern int FAR PASCAL fnCarefullyOpenNewFile(LPSTR sz,BYTE Attr);
#define ATTR_READONLY 0x0001
#define ATTR_HIDDEN 0x0002
#define ATTR_SYSTEM 0x0004
#define ATTR_VOLUME 0x0008
#define ATTR_DIR 0x0010
#define ATTR_ARCHIVE 0x0020
#define ATTR_FILES (ATTR_READONLY+ATTR_SYSTEM)
#define ATTR_ALL_FILES (ATTR_READONLY+ATTR_SYSTEM+ATTR_HIDDEN)
#define ATTR_ALL (ATTR_READONLY+ATTR_DIR+ATTR_HIDDEN+ATTR_SYSTEM)
typedef struct {
char Reserved[21];
BYTE Attr;
WORD Time;
WORD Date;
DWORD Length;
char szName[13];
} FCB;
typedef FCB * PFCB;
typedef FCB FAR * LPFCB;
/* functions from dos.asm */
extern BOOL FAR PASCAL IsCDROMDrive (int iDrive);
extern int FAR PASCAL fnCarefullyOpenNewFile(LPSTR sz,BYTE Attr);
extern int FAR PASCAL DosFindFirst (LPFCB lpfcb, LPSTR szFileSpec, WORD attr);
extern int FAR PASCAL DosFindNext (LPFCB lpfcb);
extern int FAR PASCAL GetCurrentDrive (void);
extern int FAR PASCAL SetCurrentDrive (int iDrive);
extern LONG FAR PASCAL DosDiskFreeSpace(int iDrive);
extern int FAR PASCAL DosCwd (LPSTR szDir);
extern int FAR PASCAL DosChDir (LPSTR szDir);
extern int FAR PASCAL DosMkDir (LPSTR szDir);
extern int FAR PASCAL DosValidDir (LPSTR szDir);
extern int FAR PASCAL GetFixedDisks(int * rgiDrive);
extern int FAR PASCAL DosRemoveable(int iDisk);
extern int FAR PASCAL DosIsRemote(int);
extern int FAR PASCAL MyReadWriteSector(void far *, int, int, int, int, int);
extern int FAR PASCAL DosRename(LPSTR, LPSTR);
extern int FAR PASCAL DosDelete(LPSTR);
extern WORD FAR PASCAL DosVersion(void);
extern void FAR PASCAL DosExit(WORD);
extern LPSTR FAR PASCAL DosGetEnv(void);
extern DWORD FAR PASCAL XmsVersion(void);
extern BOOL FAR PASCAL XmsInstalled(void);
extern void FAR PASCAL Reboot(void);
extern int FAR PASCAL GetCodePage(void);
extern WORD FAR PASCAL get_ext(void);
extern void FAR PASCAL fnGetFilePath(char*, char*);
#if 0
extern LONG FAR PASCAL MyGetFileAttributes(LPSTR szBuf);
#endif
extern unsigned FAR PASCAL fnGetSmartDrvVersion(void);
extern BOOL FAR PASCAL fnGetRamDriveVersion(LPSTR szVerString);
/* External functions from exe.c */
extern BOOL FAR PASCAL GetExeInfo(LPSTR szFile, VOID *pBuf, int nBuf, WORD fInfo);
//#define GEI_MODNAME 0x01
#define GEI_DESCRIPTION 0x02
//#define GEI_FLAGS 0x03
//#define GEI_EXEHDR 0x04
//#define GEI_FAPI 0x05
#ifdef DOSONLY
extern int FAR PASCAL lstrlen(LPSTR lpsz);
extern LPSTR FAR PASCAL lstrcat(LPSTR lpszFirst, LPSTR lpszSecond);
extern int FAR PASCAL lstrcmpi(LPSTR lpStr1, LPSTR lpStr2);
extern LPSTR FAR PASCAL lstrcpy(LPSTR lpszDest, LPSTR lpszSource);
extern int FAR PASCAL lstrcmp(LPSTR lpszFirst, LPSTR lpszSecond);
#endif
/* DOS ERROR CODES */
#define ERROR_OK 0x00
#define ERROR_FILENOTFOUND 0x02 /* File not found */
#define ERROR_PATHNOTFOUND 0x03 /* Path not found */
#define ERROR_NOFILEHANDLES 0x04 /* Too many open files */
#define ERROR_ACCESSDENIED 0x05 /* Access denied */
#define ERROR_INVALIDHANDLE 0x06 /* Handle invalid */
#define ERROR_FCBNUKED 0x07 /* Memory control blocks destroyed */
#define ERROR_NOMEMORY 0x08 /* Insufficient memory */
#define ERROR_FCBINVALID 0x09 /* Memory block address invalid */
#define ERROR_ENVINVALID 0x0A /* Environment invalid */
#define ERROR_FORMATBAD 0x0B /* Format invalid */
#define ERROR_ACCESSCODEBAD 0x0C /* Access code invalid */
#define ERROR_DATAINVALID 0x0D /* Data invalid */
#define ERROR_UNKNOWNUNIT 0x0E /* Unknown unit */
#define ERROR_DISKINVALID 0x0F /* Disk drive invalid */
#define ERROR_RMCHDIR 0x10 /* Attempted to remove current directory */
#define ERROR_NOSAMEDEV 0x11 /* Not same device */
#define ERROR_NOFILES 0x12 /* No more files */
#define ERROR_13 0x13 /* Write-protected disk */
#define ERROR_14 0x14 /* Unknown unit */
#define ERROR_15 0x15 /* Drive not ready */
#define ERROR_16 0x16 /* Unknown command */
#define ERROR_17 0x17 /* Data error (CRC) */
#define ERROR_18 0x18 /* Bad request-structure length */
#define ERROR_19 0x19 /* Seek error */
#define ERROR_1A 0x1A /* Unknown media type */
#define ERROR_1B 0x1B /* Sector not found */
#define ERROR_WRITE 0x1D /* Write fault */
#define ERROR_1C 0x1C /* Printer out of paper */
#define ERROR_READ 0x1E /* Read fault */
#define ERROR_1F 0x1F /* General failure */
#define ERROR_SHARE 0x20 /* Sharing violation */
#define ERROR_21 0x21 /* File-lock violation */
#define ERROR_22 0x22 /* Disk change invalid */
#define ERROR_23 0x23 /* FCB unavailable */
#define ERROR_24 0x24 /* Sharing buffer exceeded */
#define ERROR_32 0x32 /* Unsupported network request */
#define ERROR_33 0x33 /* Remote machine not listening */
#define ERROR_34 0x34 /* Duplicate name on network */
#define ERROR_35 0x35 /* Network name not found */
#define ERROR_36 0x36 /* Network busy */
#define ERROR_37 0x37 /* Device no longer exists on network */
#define ERROR_38 0x38 /* NetBIOS command limit exceeded */
#define ERROR_39 0x39 /* Error in network adapter hardware */
#define ERROR_3A 0x3A /* Incorrect response from network */
#define ERROR_3B 0x3B /* Unexpected network error */
#define ERROR_3C 0x3C /* Remote adapter incompatible */
#define ERROR_3D 0x3D /* Print queue full */
#define ERROR_3E 0x3E /* Not enough room for print file */
#define ERROR_3F 0x3F /* Print file was deleted */
#define ERROR_40 0x40 /* Network name deleted */
#define ERROR_41 0x41 /* Network access denied */
#define ERROR_42 0x42 /* Incorrect network device type */
#define ERROR_43 0x43 /* Network name not found */
#define ERROR_44 0x44 /* Network name limit exceeded */
#define ERROR_45 0x45 /* NetBIOS session limit exceeded */
#define ERROR_46 0x46 /* Temporary pause */
#define ERROR_47 0x47 /* Network request not accepted */
#define ERROR_48 0x48 /* Print or disk redirection paused */
#define ERROR_50 0x50 /* File already exists */
#define ERROR_51 0x51 /* Reserved */
#define ERROR_52 0x52 /* Cannot make directory */
#define ERROR_53 0x53 /* Fail on Int 24H (critical error) */
#define ERROR_54 0x54 /* Too many redirections */
#define ERROR_55 0x55 /* Duplicate redirection */
#define ERROR_56 0x56 /* Invalid password */
#define ERROR_57 0x57 /* Invalid parameter */
#define ERROR_58 0x58 /* Net write fault */
#define ERROR_DISKFULL 0x100 /* Disk Full */
// External Variables in EXTERNS.H
#endif // PH_SULIB