mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-29 07:01:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			5392 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			5392 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {
 | ||
|     This file is part of the Free Pascal run time library.
 | ||
|     Copyright (c) 1999-2002 by the Free Pascal development team.
 | ||
| 
 | ||
|     Basic OS/2 constants, types and functions
 | ||
|     implemented (mostly) in DOSCALL1.DLL.
 | ||
| 
 | ||
|     See the file COPYING.FPC, included in this distribution,
 | ||
|     for details about the copyright.
 | ||
| 
 | ||
|     This program is distributed in the hope that it will be useful,
 | ||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | ||
| 
 | ||
|  **********************************************************************}
 | ||
| 
 | ||
| unit DosCalls;
 | ||
| 
 | ||
| {***************************************************************************}
 | ||
| interface
 | ||
| {***************************************************************************}
 | ||
| 
 | ||
| uses    Strings;
 | ||
| 
 | ||
| type    PString = PShortString;
 | ||
| 
 | ||
| {$PACKRECORDS 1}
 | ||
| 
 | ||
| type    TByteArray=array[0..$fff0] of byte;
 | ||
|         PByteArray=^TByteArray;
 | ||
|         TCharArray=array[0..$fff0] of char;
 | ||
|         PCharArray=^TCharArray;
 | ||
|         TWordArray=array[0..$7ff8] of word;
 | ||
|         PWordArray=^TWordArray;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
|                             Thread related routines.
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| type    TThreadEntry = function (Param: pointer): cardinal; cdecl;
 | ||
|         ThreadEntry = TThreadEntry;
 | ||
| 
 | ||
| 
 | ||
| const   dtSuspended         =1; {Thread is started suspended instead of
 | ||
|                                  started at once.}
 | ||
|         dtStack_Commited    =2; {Allocate all stack space at once. The
 | ||
|                                  operating system normally allocates more
 | ||
|                                  memory to the stack if the stack grows with
 | ||
|                                  the given stacksize as limit. This has the
 | ||
|                                  restriction that you cannot create a stack
 | ||
|                                  frame > 4 kb. at once. If you want to do
 | ||
|                                  this, or for other reasons you can allocate
 | ||
|                                  the complete stack at once with this flag.}
 | ||
| (* The following for compatibility only *)
 | ||
|         CREATE_READY          =0;                   { defect 65437  }
 | ||
|         CREATE_SUSPENDED      =dtSuspended;
 | ||
|         STACK_SPARSE          =0;
 | ||
|         STACK_COMMITTED       =dtStack_Commited;
 | ||
| 
 | ||
|    { Wait option values }
 | ||
|         dtWait              =0; {Wait until termination.}
 | ||
|         dtNoWait            =1; {Do not wait. Return with error if not yet
 | ||
|                                  terminated.}
 | ||
| (* The following for compatibility only *)
 | ||
|         DCWW_WAIT           =dtWait;
 | ||
|         DCWW_NOWAIT         =dtNoWait;
 | ||
| 
 | ||
| 
 | ||
| {Create a new thread.
 | ||
|  TID        = Thread ID of new thread is returned here.
 | ||
|  Address    = Thread entry point. The new thread starts executing here.
 | ||
|  AParam     = This one is passed to the thread entry procedure.
 | ||
|  Flags      = Flags. Either dtsuspended or dt_stackcommited.
 | ||
|  StackSize  = Size of the stack of the new thread.}
 | ||
| function DosCreateThread(var TID:longint;Address:TThreadEntry;
 | ||
|                         AParam:pointer;Flags,StackSize:longint):cardinal;cdecl;
 | ||
| function DosCreateThread (var TID: cardinal; Address: TThreadEntry;
 | ||
|                  AParam: pointer; Flags, StackSize: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| (* Overloaded version for compatibility. *)
 | ||
| function DosCreateThread(var TID:longint;Address:pointer;
 | ||
|                         AParam:Pointer;Flags,StackSize:longint):cardinal;cdecl;
 | ||
| function DosCreateThread (var TID: cardinal; Address: pointer;
 | ||
|                  AParam: Pointer; Flags, StackSize: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| 
 | ||
| {Suspend a running thread.}
 | ||
| function DosSuspendThread(TID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Resume a suspended thread.}
 | ||
| function DosResumeThread(TID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Terminate a specific thread.}
 | ||
| function DosKillThread(TID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Wait until a specific thread has ended.
 | ||
|  TID            = Thread to terminate. Can also be zero. In that case we
 | ||
|                   wait until the next thread terminates. Its thread ID is
 | ||
|                   returned back.
 | ||
|  Option         = Flags. Either dtWait or dtNoWait.}
 | ||
| function DosWaitThread(var TID:longint;Option:longint):cardinal; cdecl;
 | ||
| function DosWaitThread(var TID:cardinal;Option:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {All other threads in the same process are suspended until a
 | ||
| DosExitCritSec.}
 | ||
| function DosEnterCritSec: cardinal; cdecl;
 | ||
| 
 | ||
| {Resume the other threads again.}
 | ||
| function DosExitCritSec: cardinal; cdecl;
 | ||
| 
 | ||
| { DosExit codes }
 | ||
| const   deThread=0;         {Terminate thread only.}
 | ||
|         deProcess=1;        {Terminate the whole process.}
 | ||
| (* The following for compatibility only *)
 | ||
|         Exit_Thread = deThread;
 | ||
|         Exit_Process = deProcess;
 | ||
| 
 | ||
| {Terminate the thread or the program. Never returns, so it's defined as
 | ||
|  procedure.}
 | ||
| procedure DosExit(Action,Result:cardinal); cdecl;
 | ||
| 
 | ||
| type    PThreadInfoBlock=^TThreadInfoBlock;
 | ||
|         PPThreadInfoBlock=^PThreadInfoBlock;
 | ||
|         PSysThreadIB=^TSysThreadIB;
 | ||
|         PProcessInfoBlock=^TProcessInfoBlock;
 | ||
|         PPProcessInfoBlock=^PProcessInfoBlock;
 | ||
| 
 | ||
|         TThreadInfoBlock=record
 | ||
|             Exh_Chain,              {Head of exeption handler chain.}
 | ||
|             Stack,                  {Pointer to the thread's stack.}
 | ||
|             StackLimit:pointer;     {Pointer to the thread's stack-end.}
 | ||
|             TIB2:PSysThreadIB;      {Pointer to system specific thread info.}
 | ||
|             Version,                {Version of this datastructure.}
 | ||
|             Ordinal:cardinal;       {Thread ordinal number.}
 | ||
|         end;
 | ||
|         ThreadInfoBlock=TThreadInfoBlock;
 | ||
| 
 | ||
|         TSysThreadIB=record
 | ||
|             TID,                    {Thread ID.}
 | ||
|             Priority,               {Low byte of low word: thread priority.
 | ||
|                                      High byte of low word: thread class
 | ||
|                                         1 = Idle
 | ||
|                                         2 = Regular
 | ||
|                                         3 = Time critical
 | ||
|                                         4 = Server}
 | ||
|             Version:cardinal;       {Version of this datastructure.}
 | ||
|             MCCount,                {Must complete count. ??? Info wanted!}
 | ||
|             MCForceFlag:word;       {Must complete force flag. Info wanted!}
 | ||
|         end;
 | ||
|         SysThreadIB=TSysThreadIB;
 | ||
| 
 | ||
|         TProcessInfoBlock=record
 | ||
|             PID,                    {Process ID.}
 | ||
|             ParentPID,              {Parent's process ID.}
 | ||
|             HMTE:cardinal;          {Module handle of executable program.
 | ||
|                                      ??? Info wanted!}
 | ||
|             Cmd,                    {Command line options.}
 | ||
|             Env:PByteArray;         {Environment strings.}
 | ||
|             flStatus,               {1 means that the process is in exit list
 | ||
|                                      processing.}
 | ||
|             tType:cardinal;         {Type of process:
 | ||
|                                         0:  Full screen protected mode.
 | ||
|                                         1:  DOS emulation.
 | ||
|                                         2:  Windowable full screen protected
 | ||
|                                             mode program.
 | ||
|                                         3:  Presentation manager program.
 | ||
|                                         4:  Detached mode process.}
 | ||
|         end;
 | ||
|         ProcessInfoBlock=TProcessInfoBlock;
 | ||
| 
 | ||
| {OS/2 keeps information about the current process and the current thread
 | ||
|  is the datastructures TProcessInfoBlock and TThreadInfoBlock. All data
 | ||
|  can both be read and be changed. Use DosGetInfoBlocks to get their
 | ||
|  address. The service cannot fail, so it is defined as procedure. The
 | ||
|  second version of the call might be useful if you only want address of one
 | ||
|  of those datastructures, since you can supply nil for the other parameter
 | ||
|  then - beware, omitting one of these parameters (passing nil) is only
 | ||
|  supported on newer OS/2 versions, and causes SIGSEGV on e.g. OS/2 v2.1!!!}
 | ||
| 
 | ||
| procedure DosGetInfoBlocks(var ATIB:PThreadInfoBlock;
 | ||
|                            var APIB:PProcessInfoBlock); cdecl;
 | ||
| procedure DosGetInfoBlocks(PATIB:PPThreadInfoBlock;
 | ||
|                            PAPIB:PPProcessInfoBlock); cdecl;
 | ||
| 
 | ||
| {Wait a number of milliseconds. Cannot fail, so it is defined as procedure.}
 | ||
| procedure DosSleep (MSec:cardinal); cdecl;
 | ||
| 
 | ||
| {Beep the speaker. You do not need to check for an error if you can
 | ||
|  guarantee that the frequency is correct.}
 | ||
| function DosBeep(Freq,MS:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         Process handling routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| { User's Debug Buffer structure }
 | ||
| 
 | ||
| type    PDbgBuf = ^TDbgBuf;
 | ||
|         TDbgBuf = record
 | ||
|             Pid: cardinal;             { Debuggee Process id          }
 | ||
|             Tid: cardinal;             { Debuggee Thread id           }
 | ||
|             Cmd: longint;             { Command or Notification      }
 | ||
|             Value: longint;           { Generic Data Value           }
 | ||
|             Addr: pointer;            { Debuggee Address             }
 | ||
|             Buffer: pointer;          { Debugger Buffer Address      }
 | ||
|             Len: cardinal;            { Length of Range              }
 | ||
|             index: cardinal;          { Generic Identifier Index     }
 | ||
|             MTE: cardinal;            { Module Table Entry Handle    }
 | ||
|             EAX: cardinal;            { Register Set                 }
 | ||
|             ECX: cardinal;
 | ||
|             EDX: cardinal;
 | ||
|             EBX: cardinal;
 | ||
|             ESP: cardinal;
 | ||
|             EBP: cardinal;
 | ||
|             ESI: cardinal;
 | ||
|             EDI: cardinal;
 | ||
|             EFlags: cardinal;
 | ||
|             EIP: cardinal;
 | ||
|             CSLim: cardinal;
 | ||
|             CSBase: cardinal;
 | ||
|             CSAcc: byte;
 | ||
|             CSAtr: byte;
 | ||
|             CS: word;
 | ||
|             DSLim: cardinal;
 | ||
|             DSBase: cardinal;
 | ||
|             DSAcc: byte;
 | ||
|             DSAtr: byte;
 | ||
|             DS: word;
 | ||
|             ESLim: cardinal;
 | ||
|             ESBase: cardinal;
 | ||
|             ESAcc: byte;
 | ||
|             ESAtr: byte;
 | ||
|             ES: word;
 | ||
|             FSLim: cardinal;
 | ||
|             FSBase: cardinal;
 | ||
|             FSAcc: byte;
 | ||
|             FSAtr: byte;
 | ||
|             FS: word;
 | ||
|             GSLim: cardinal;
 | ||
|             GSBase: cardinal;
 | ||
|             GSAcc: byte;
 | ||
|             GSAtr: byte;
 | ||
|             GS: word;
 | ||
|             SSLim: cardinal;
 | ||
|             SSBase: cardinal;
 | ||
|             SSAcc: byte;
 | ||
|             SSAtr: byte;
 | ||
|             SS: word;
 | ||
|         end;
 | ||
| 
 | ||
| 
 | ||
| { DosDebug Command Numbers
 | ||
|  *
 | ||
|  *      These numbers are placed in the Cmd field of the uDB on
 | ||
|  *      entry to DosDebug.
 | ||
|  *
 | ||
|  *      These numbers identify which command DosDebug is requested
 | ||
|  *      to perform.
 | ||
|  *
 | ||
|  }
 | ||
| 
 | ||
| const   DBG_C_Null              = 0;       { Null                         }
 | ||
|         DBG_C_ReadMem           = 1;       { Read Word                    }
 | ||
|         DBG_C_ReadMem_I         = 1;       { Read Word                    }
 | ||
|         DBG_C_ReadMem_D         = 2;       { Read Word (same as 1)        }
 | ||
|         DBG_C_ReadReg           = 3;       { Read Register Set            }
 | ||
|         DBG_C_WriteMem          = 4;       { Write Word                   }
 | ||
|         DBG_C_WriteMem_I        = 4;       { Write Word                   }
 | ||
|         DBG_C_WriteMem_D        = 5;       { Write Word (same as 4)       }
 | ||
|         DBG_C_WriteReg          = 6;       { Write Register Set           }
 | ||
|         DBG_C_Go                = 7;       { Go                           }
 | ||
|         DBG_C_Term              = 8;       { Terminate                    }
 | ||
|         DBG_C_SStep             = 9;       { Single Step                  }
 | ||
|         DBG_C_Stop              = 10;      { Stop                         }
 | ||
|         DBG_C_Freeze            = 11;      { Freeze Thread                }
 | ||
|         DBG_C_Resume            = 12;      { Resume Thread                }
 | ||
|         DBG_C_NumToAddr         = 13;      { Object Number to Address     }
 | ||
|         DBG_C_ReadCoRegs        = 14;      { Read Coprocessor Registers   }
 | ||
|         DBG_C_WriteCoRegs       = 15;      { Write Coprocessor Registers  }
 | ||
|                                            { 16 is reserved               }
 | ||
|         DBG_C_ThrdStat          = 17;      { Get Thread Status            }
 | ||
|         DBG_C_MapROAlias        = 18;      { Map read-only alias          }
 | ||
|         DBG_C_MapRWAlias        = 19;      { Map read-write alias         }
 | ||
|         DBG_C_UnMapAlias        = 20;      { Unmap Alias                  }
 | ||
|         DBG_C_Connect           = 21;      { Connect to Debuggee          }
 | ||
|         DBG_C_ReadMemBuf        = 22;      { Read Memory Buffer           }
 | ||
|         DBG_C_WriteMemBuf       = 23;      { Write Memory Buffer          }
 | ||
|         DBG_C_SetWatch          = 24;      { Set Watchpoint               }
 | ||
|         DBG_C_ClearWatch        = 25;      { Clear Watchpoint             }
 | ||
|         DBG_C_RangeStep         = 26;      { Range Step                   }
 | ||
|         DBG_C_Continue          = 27;      { Continue after an Exception  }
 | ||
|         DBG_C_AddrToObject      = 28;      { Address to Object            }
 | ||
|         DBG_C_XchgOpcode        = 29;      { Exchange opcode and go       }
 | ||
|         DBG_C_LinToSel          = 30;      { 32 to 16 conversion      A001}
 | ||
|         DBG_C_SelToLin          = 31;      { 16 to 32 conversion      A001}
 | ||
| 
 | ||
|         {------ Constants -------------------}
 | ||
|         DBG_L_386               = 1;
 | ||
|         DBG_O_OBJMTE            = $10000000;
 | ||
| 
 | ||
|         {------ Notifications ---------------}
 | ||
|         DBG_N_SUCCESS             =  0;
 | ||
|         DBG_N_ERROR               = -1;
 | ||
|         DBG_N_ProcTerm            = -6;
 | ||
|         DBG_N_Exception           = -7;
 | ||
|         DBG_N_ModuleLoad          = -8;
 | ||
|         DBG_N_CoError             = -9;
 | ||
|         DBG_N_ThreadTerm          = -10;
 | ||
|         DBG_N_AsyncStop           = -11;
 | ||
|         DBG_N_NewProc             = -12;
 | ||
|         DBG_N_AliasFree           = -13;
 | ||
|         DBG_N_Watchpoint          = -14;
 | ||
|         DBG_N_ThreadCreate        = -15;
 | ||
|         DBG_N_ModuleFree          = -16;
 | ||
|         DBG_N_RangeStep           = -17;
 | ||
| 
 | ||
|         DBG_X_PRE_FIRST_CHANCE    = 0;
 | ||
|         DBG_X_FIRST_CHANCE        = 1;
 | ||
|         DBG_X_LAST_CHANCE         = 2;
 | ||
|         DBG_X_STACK_INVALID       = 3;
 | ||
| 
 | ||
|         DBG_W_Local               = $0000001;
 | ||
|         DBG_W_Global              = $0000002;
 | ||
|         DBG_W_Execute             = $00010000;
 | ||
|         DBG_W_Write               = $00020000;
 | ||
|         DBG_W_ReadWrite           = $00030000;
 | ||
| 
 | ||
| {You need a heavy manual if you want to know how this procedure works. Used
 | ||
| for writing debuggers.}
 | ||
| function DosDebug (DebugBuf: PDbgBuf):cardinal; cdecl;
 | ||
| 
 | ||
| function DosDebug (var APDbgBuf: TDbgBuf): cardinal; cdecl;
 | ||
| 
 | ||
| { codeTerminate values (also passed to ExitList routines) }
 | ||
| const   TC_exit         = 0;
 | ||
|         TC_harderror    = 1;
 | ||
|         TC_trap         = 2;
 | ||
|         TC_killprocess  = 3;
 | ||
|         TC_exception    = 4;
 | ||
| 
 | ||
| { DosExitList options }
 | ||
| const   ExLst_Add       = 1;
 | ||
|         ExLst_Remove    = 2;
 | ||
|         ExLst_Exit      = 3;
 | ||
| 
 | ||
| type    TExitProc=procedure(Reason:cardinal); cdecl;
 | ||
| 
 | ||
| {Add/remove an exitprocedure to the exit list. Also used to terminate an
 | ||
|  exit procedure. An exit procedure will be called on exiting of the program.
 | ||
| 
 | ||
|     OrderCode       = One of the EXLST_XXXX constants.
 | ||
|     Proc            = Address of the exit procedure.
 | ||
| 
 | ||
| An exit procedure is called with one of the TC_XXXX constants. When it is
 | ||
| done it must call DosExitList with ExLst_Exit.
 | ||
| 
 | ||
| Exit procedures are called in random order.}
 | ||
| function DosExitList(OrderCode:cardinal;Proc:TExitProc):cardinal; cdecl;
 | ||
| 
 | ||
| { DosExecPgm options }
 | ||
| const   deSync          = 0;    {Wait until program terminates.}
 | ||
|         deAsync         = 1;    {Do not wait.}
 | ||
|         deAsyncResult   = 2;    {Do not wait. DosWaitChild will follow to
 | ||
|                                  check if process has been terminated. If
 | ||
|                                  you use this, you must use DosWaitChild,
 | ||
|                                  because OS/2 will not free memory that is
 | ||
|                                  allocated for the result codes if you don't.}
 | ||
|         deTrace         = 3;    {For debugging.}
 | ||
|         deBackground    = 4;    {Do not run as child. Run in a separate
 | ||
|                                  session.}
 | ||
|         deSuspended     = 5;    {Child will be loaded, but not executed.}
 | ||
|         deAsyncResultDb = 6;    {Similar to deAsyncResult, but for debugging.}
 | ||
| 
 | ||
| (* The following for compatibility only *)
 | ||
|         EXEC_SYNC          =deSync;
 | ||
|         EXEC_ASYNC         =deAsync;
 | ||
|         EXEC_ASYNCRESULT   =deAsyncResult;
 | ||
|         EXEC_TRACE         =deTrace;
 | ||
|         EXEC_BACKGROUND    =deBackground;
 | ||
|         EXEC_LOAD          =deSuspended;
 | ||
|         EXEC_ASYNCRESULTDB =deAsyncResultDb;
 | ||
| 
 | ||
| type    TResultCodes=record
 | ||
|             TerminateReason,        {0 = Normal termionation.
 | ||
|                                      1 = Critical error.
 | ||
|                                      2 = Trapped. (GPE, etc.)
 | ||
|                                      3 = Killed by DosKillProcess.}
 | ||
|             ExitCode:cardinal;      {Exit code of child.}
 | ||
|         end;
 | ||
| 
 | ||
| {Execute a program.
 | ||
| 
 | ||
|  ObjName        = If a DLL cannot be found, its name will be returned here.
 | ||
|  ObjLen         = Size of your ObjName buffer.
 | ||
|  ExecFlag       = One of the deXXXX constants.
 | ||
|  Res            = See TResultcodes.
 | ||
|  Args           = Arguments. ASCIIZ strings. End of Args given by an empty
 | ||
|                   string (#0). First arg must be filename without path and
 | ||
|                   extension. nil is also allowed.
 | ||
|  Env            = Environment. ASCIIZ strings. A variable has the format
 | ||
|                   NAME=CONTENTS. End of Env given by an empty string (#0).
 | ||
|                   nil is also allowed meaning inherit parent's environment.
 | ||
|  FileName       = Filename with full path and extension. Is not sensitive
 | ||
|                   for the PATH environment variable.}
 | ||
| function DosExecPgm(ObjName:PChar;ObjLen:longint;ExecFlag:cardinal;
 | ||
|                     Args,Env:PByteArray;var Res:TResultCodes;
 | ||
|                     FileName:PChar):cardinal; cdecl;
 | ||
| function DosExecPgm(var ObjName:string;ExecFlag:cardinal;
 | ||
|                     Args,Env:PByteArray;var Res:TResultCodes;
 | ||
|                     const FileName:string):cardinal;
 | ||
| 
 | ||
| {Wait until a child process terminated. Sometimes called DosCWait.
 | ||
| 
 | ||
| Action              = 0 = Wait until child terminates.
 | ||
|                       1 = Wait until child and all its childs terminate.
 | ||
| Option              = Flags. Either dtWait or dtNoWait.
 | ||
| Res                 = See TResultCodes.
 | ||
| TermPID             = Process ID that has been terminated. Usefull when
 | ||
|                       terminating a random process.
 | ||
| PID                 = Process ID of process to terminate. Use a zero to
 | ||
|                       terminate a random process.}
 | ||
| function DosWaitChild(Action,Option:longint;var Res:TResultCodes;
 | ||
|                       var TermPID:longint;PID:longint):cardinal; cdecl;
 | ||
| function DosWaitChild(Action,Option:cardinal;var Res:TResultCodes;
 | ||
|                       var TermPID:cardinal;PID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| const   dpProcess       = 0;
 | ||
|         dpProcessChilds = 1;
 | ||
|         dpThread        = 2;
 | ||
| 
 | ||
|         dpSameClass     = 0;
 | ||
|         dpIdleClass     = 1;
 | ||
|         dpRegular       = 2;
 | ||
|         dpTimeCritical  = 3;
 | ||
| 
 | ||
| {Set priority of a thread or all threads in another process.
 | ||
| 
 | ||
|  Scope              = 0 = Set for all threads of a process.
 | ||
|                       1 = Set for all threads of a process and its childs.
 | ||
|                       2 = Set for a thread of the current process.
 | ||
|  TrClass            = 0 = Do not change class.
 | ||
|                       1 = Change to idle time class.
 | ||
|                       2 = Change to regular class.
 | ||
|                       3 = Change to time-critical class.
 | ||
|  Delta              = Value to add to priority. Resulting priority must be in
 | ||
|                       the range 0..31 (Delta itself must be within -31..31).
 | ||
|  PortID             = Process ID when Scope=0 or 1, thread ID when Scope=2.}
 | ||
| function DosSetPriority(Scope,TrClass: cardinal;Delta:longint;PortID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Terminate a process. If the process isn't a child process, it can refuse
 | ||
|  to terminate.
 | ||
| 
 | ||
|  Action             = 0 = Terminate process and all its childs.
 | ||
|                       1 = Terminate process only.
 | ||
|  PID                = Process ID of process to terminate.}
 | ||
| function DosKillProcess(Action,PID:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| const   AppTyp_NotSpec          = $0000; {Apptype is unknown.}
 | ||
|         AppTyp_NotWindowCompat  = $0001; {App cannot run in a window.}
 | ||
|         AppTyp_WindowCompat     = $0002; {App can run in a window.}
 | ||
|         AppTyp_WindowAPI        = $0003; {App uses PM}
 | ||
|         AppTyp_Bound            = $0008; {App uses Family API.}
 | ||
|         AppTyp_DLL              = $0010; {File is a DLL.}
 | ||
|         AppTyp_DOS              = $0020; {App is a PC-DOS program.}
 | ||
|         AppTyp_PhysDrv          = $0040; {App is a physical device driver.}
 | ||
|         AppTyp_VirtDrv          = $0080; {App is virtual device driver.}
 | ||
|         AppTyp_ProtDLL          = $0100; {File is a protected mode DLL.}
 | ||
|         AppTyp_WindowsReal      = $0200; {M$ Winslows app, real mode.}
 | ||
|         AppTyp_WindowsProt      = $0400; {M$ Winslows app, protected mode.}
 | ||
|         AppTyp_32bit            = $4000; {App is 32 bit.}
 | ||
| 
 | ||
| {Get the application type of an executable file on disk.
 | ||
|  FileName           = Name of file to get type from.
 | ||
|  Flags              = Receives a bitfield using the AppTyp constants.}
 | ||
| function DosQueryAppType(FileName:PChar;var Flags:longint):cardinal; cdecl;
 | ||
| function DosQueryAppType (FileName: PChar; var Flags: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| const   diPrinter   = 0;    {Get number of printer (parallel) ports.}
 | ||
|         diRS232     = 1;    {Get number of serial ports.}
 | ||
|         diFloppy    = 2;    {Get number of floppy drives.}
 | ||
|         diCopro     = 3;    {Get number of FPU's installed (either 0 or 1).}
 | ||
|         diSubModel  = 4;    {??? System submodel type?}
 | ||
|         diModel     = 5;    {??? System model type?}
 | ||
|         diAdapter   = 6;    {0=Monochrome display, 1=other. ??? Does OS/2
 | ||
|                              support monochrome displays?}
 | ||
| 
 | ||
| {Get information about attached devices.
 | ||
|  DevInfo            = Receives requested information.
 | ||
|  Item               = One of the dixxxx constants.}
 | ||
| function DosDevConfig(var DevInfo:byte;Item:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         File handling related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const   MaxPathLength=260;
 | ||
|         MaxPathComponent=256;
 | ||
| 
 | ||
| type    TFileLock=record
 | ||
|          case boolean of
 | ||
|           false: (Offset, Range: longint);
 | ||
|           true:  (lOffset, lRange: longint);
 | ||
|         end;
 | ||
|         PFileLock=^TFileLock;
 | ||
|         FileLock=TFileLock;
 | ||
| 
 | ||
| {Lock or unlock an area of a file. Other processes may not access that part
 | ||
|  of the file.
 | ||
| 
 | ||
|  Unlock         = Area to unlock. (0,0) = Do not unlock.
 | ||
|  Lock           = Area to lock.   (0,0) = Do not lock.
 | ||
|  Timeout        = Number of miliseconds to wait if another process has locked
 | ||
|                   the file.
 | ||
|  Flags          = Bitfield:
 | ||
|                   Bit 0:    0 = Other processes are denied access.
 | ||
|                             1 = Other processes may still read from the area.
 | ||
|                   Bit 1:    0 = Normal locking mode.
 | ||
|                             1 = Atomic mode. Refer IBM's documentation.}
 | ||
| function DosSetFileLocks(Handle:THandle;var Unlock,Lock:TFileLock;
 | ||
|                          Timeout,Flags: cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectSetFileLocks (Handle: THandle; var Unlock, Lock: TFileLock;
 | ||
|                                  Timeout, Flags: cardinal;
 | ||
|                                    FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Cancel a filelock area.
 | ||
| 
 | ||
| Handle  = File handle.
 | ||
| Lock    = Area that is locked now.}
 | ||
| function DosCancelLockRequest(Handle:THandle;var Lock:TFileLock):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Data structures for extended attributes. Reading IBM's documentation is
 | ||
|  highly recommended before experimenting with EAs.}
 | ||
| 
 | ||
| const   fEA_needEA=$80;
 | ||
| 
 | ||
|         eaBinary        = $fffe;
 | ||
|         eaASCII         = $fffd;
 | ||
|         eaBitmap        = $fffb;
 | ||
|         eaMetaFile      = $fffa;
 | ||
|         eaIcon          = $fff9;
 | ||
|         eaEA            = $ffee;
 | ||
|         eaMVMT          = $ffdf;
 | ||
|         eaMVST          = $ffde;
 | ||
|         eaASN1          = $ffdd;
 | ||
| 
 | ||
| type    TgEA = record
 | ||
|             case byte of
 | ||
|                 1: (NameLen: byte;
 | ||
|                     Name: array [0..0] of char);
 | ||
|                 2: (cbName: byte;         { name length not including NULL }
 | ||
|                     szName: char);        { attribute name }
 | ||
|         end;
 | ||
|         PgEA = ^TgEA;
 | ||
|         GEA = TgEA;
 | ||
| 
 | ||
|         TgEAList = record
 | ||
|             ListLen: cardinal; { total bytes of structure including full list }
 | ||
|             List: array [0..0] of TgEA;      { variable length GEA structures }
 | ||
|         end;
 | ||
|         PgEAList = ^TgEAList;
 | ||
|         GEAList = TgEAList;
 | ||
| 
 | ||
|         TfEA = record
 | ||
|             case byte of
 | ||
|                 1: (EA,
 | ||
|                     NameLen: byte;
 | ||
|                     Value: word);
 | ||
|                 2: (fEA: byte;          { flags                          }
 | ||
|                     cbName: byte;       { name length not including NULL }
 | ||
|                     cbValue: word);     { value length }
 | ||
|         end;
 | ||
|         PfEA = ^TfEA;
 | ||
|         FEA=TfEA;
 | ||
| 
 | ||
|         TfEAList = record
 | ||
|             Size: cardinal; { total bytes of structure including full list }
 | ||
|             List: array [0..0] of TfEA;   { variable length FEA structures }
 | ||
|         end;
 | ||
|         PfEAList = ^TfEAlist;
 | ||
|         FEAList = TfEAList;
 | ||
| 
 | ||
|         TEAOp = record
 | ||
|             case byte of
 | ||
|                 1: (gEAList: PgEAList;
 | ||
|                     fEAList: PfEAList;
 | ||
|                     Error: cardinal);
 | ||
|                 2: (fpGEAList: PGEAList;    { general EA list }
 | ||
|                     fpFEAList: PFEAList;    { full EA list }
 | ||
|                     oError: cardinal);
 | ||
|         end;
 | ||
|         PEAOp = ^TEAOp;
 | ||
|         EAOp = TEAOp;
 | ||
| 
 | ||
|         TfEA2 = record
 | ||
|             NextEntry: cardinal;
 | ||
|             Flags,
 | ||
|             NameLen: byte;
 | ||
|             Value: word;
 | ||
|             szName: array [0..0] of char;
 | ||
|         end;
 | ||
|         PfEA2 = ^TfEA2;
 | ||
|         FEA2 = TfEA2;
 | ||
| 
 | ||
|         TfEA2List = record
 | ||
|             ListLen: cardinal;
 | ||
|             List: array [0..0] of TfEA2;
 | ||
|         end;
 | ||
|         PfEA2List = ^TfEA2List;
 | ||
|         FEA2List = TfEA2List;
 | ||
| 
 | ||
|         TgEA2 = record
 | ||
|             case byte of
 | ||
|                 1: (NextEntry: cardinal;
 | ||
|                     NameLen: byte;
 | ||
|                     Name: array [0..0] of char);
 | ||
|                 2: (oNextEntryOffset: cardinal;     { new field }
 | ||
|                     cbName: byte;
 | ||
|                     szName: array [0..0] of byte);  { new field }
 | ||
|         end;
 | ||
|         PgEA2 = ^TgEA2;
 | ||
|         GEA2 = TgEA2;
 | ||
| 
 | ||
|         TgEA2list = record
 | ||
|           ListLen: cardinal;
 | ||
|           List: array [0..0] of TgEA2;
 | ||
|         end;
 | ||
|         PgEA2List = ^TgEA2List;
 | ||
|         GEA2List = TgEAList;
 | ||
| 
 | ||
|         TEAOp2 = record
 | ||
|             case byte of
 | ||
|                 1: (gEA2List: PgEA2List;
 | ||
|                     fEA2List: PfEA2List;
 | ||
|                     Error: cardinal);
 | ||
|                 2: (fpGEA2List: PGEA2List;      { GEA set }
 | ||
|                     fpFEA2List: PFEA2List;      { FEA set }
 | ||
|                     oError: cardinal);          { offset of FEA error }
 | ||
|         end;
 | ||
|         PEAOp2 = ^TEAOp2;
 | ||
|         EAOp2 = TEAOp2;
 | ||
| 
 | ||
|         TEASizeBuf = record     { struct for FSCTL fn 2 - max ea size }
 | ||
|             case byte of
 | ||
|                 1: (MaxEASize: word;
 | ||
|                     MaxEAListSize: cardinal);
 | ||
|                 2: (cbMaxEASize: word;         { max size of one EA }
 | ||
|                     cbMaxEAListSize: cardinal);{ max size of the full EA list }
 | ||
|         end;
 | ||
|         PEASizeBuf = ^TEASizeBuf;
 | ||
|         EASizeBuf = TEASizeBuf;
 | ||
| 
 | ||
| 
 | ||
| {*******************End of extented attribute datastructures.***************}
 | ||
| 
 | ||
| {Usefull constanst for Action parameter.}
 | ||
|    { DosOpen() actions }
 | ||
| const       doOpened        =  1;
 | ||
|             doCreated       =  2;
 | ||
|             doOverwritten   =  3;
 | ||
| 
 | ||
|             FILE_EXISTED    =  doOpened;
 | ||
|             FILE_CREATED    =  doCreated;
 | ||
|             FILE_TRUNCATED  =  doOverwritten;
 | ||
| 
 | ||
| {Usefull constants for OpenFlags parameter.}
 | ||
|    { DosOpen() open flags }
 | ||
| const       doFail          =  0;
 | ||
|             doOpen          =  1;
 | ||
|             doOverwrite     =  2;
 | ||
|             (*
 | ||
|                 fixed by KO M.H. on 1999.07.04
 | ||
|                 contents : Creation flags is 10 hex not 10 dec.
 | ||
|             *)
 | ||
|             doCreate        = 16;
 | ||
| 
 | ||
|             FILE_OPEN       = doOpen;
 | ||
|             FILE_TRUNCATE   = doOverwrite;
 | ||
|             FILE_CREATE     = doCreate;
 | ||
| 
 | ||
| {    this nibble applies if file already exists                      xxxx }
 | ||
|       OPEN_ACTION_FAIL_IF_EXISTS     =doFail;       { ---- ---- ---- 0000 }
 | ||
|       OPEN_ACTION_OPEN_IF_EXISTS     =doOpen;       { ---- ---- ---- 0001 }
 | ||
|       OPEN_ACTION_REPLACE_IF_EXISTS  =doOverwrite;  { ---- ---- ---- 0010 }
 | ||
| 
 | ||
| {    this nibble applies if file does not exist              xxxx      }
 | ||
|       OPEN_ACTION_FAIL_IF_NEW        =doFail;    { ---- ---- 0000 ---- }
 | ||
|       OPEN_ACTION_CREATE_IF_NEW      =DoCreate;  { ---- ---- 0001 ---- }
 | ||
| 
 | ||
| {Usefull constants for openmode parameter.}
 | ||
| 
 | ||
| const       doRead          =     0;
 | ||
|             doWrite         =     1;
 | ||
|             doReadWrite     =     2;
 | ||
|             doDenyRW        =    16;
 | ||
|             doDenyWrite     =    32;
 | ||
|             doDenyRead      =    48;
 | ||
|             doDenyNone      =    64;
 | ||
|             doNoInherit     =   128;
 | ||
|             doSequential    =   256;
 | ||
|             doRandom        =   512;
 | ||
|             doNoCache       =  4096;
 | ||
|             doFailOnErr     =  8192;
 | ||
|             doWriteThru     = 16384;
 | ||
|             doDASD          = 32768;
 | ||
| 
 | ||
| 
 | ||
|    { DosOpen/DosSetFHandState flags }
 | ||
|       OPEN_ACCESS_READONLY           =doRead;       { ---- ---- ---- -000 }
 | ||
|       OPEN_ACCESS_WRITEONLY          =doWrite;      { ---- ---- ---- -001 }
 | ||
|       OPEN_ACCESS_READWRITE          =doReadWrite;  { ---- ---- ---- -010 }
 | ||
|       OPEN_SHARE_DENYREADWRITE       =doDenyRW;     { ---- ---- -001 ---- }
 | ||
|       OPEN_SHARE_DENYWRITE           =doDenyWrite;  { ---- ---- -010 ---- }
 | ||
|       OPEN_SHARE_DENYREAD            =doDenyRead;   { ---- ---- -011 ---- }
 | ||
|       OPEN_SHARE_DENYNONE            =doDenyNone;   { ---- ---- -100 ---- }
 | ||
|       OPEN_FLAGS_NOINHERIT           =doNoInherit;  { ---- ---- 1--- ---- }
 | ||
|       OPEN_FLAGS_NO_LOCALITY         =$0000;        { ---- -000 ---- ---- }
 | ||
|       OPEN_FLAGS_SEQUENTIAL          =doSequential; { ---- -001 ---- ---- }
 | ||
|       OPEN_FLAGS_RANDOM              =doRandom;     { ---- -010 ---- ---- }
 | ||
|       OPEN_FLAGS_RANDOMSEQUENTIAL    =doSequential
 | ||
|                                    or doRandom;     { ---- -011 ---- ---- }
 | ||
|       OPEN_FLAGS_NO_CACHE            =doNoCache;    { ---1 ---- ---- ---- }
 | ||
|       OPEN_FLAGS_FAIL_ON_ERROR       =doFailOnErr;  { --1- ---- ---- ---- }
 | ||
|       OPEN_FLAGS_WRITE_THROUGH       =doWriteThru;  { -1-- ---- ---- ---- }
 | ||
|       OPEN_FLAGS_DASD                =doDASD;       { 1--- ---- ---- ---- }
 | ||
| 
 | ||
|       OPEN_FLAGS_NONSPOOLED          =$00040000;
 | ||
|       OPEN_FLAGS_PROTECTED_HANDLE    =$40000000;
 | ||
| 
 | ||
| 
 | ||
| { Open a file.
 | ||
| 
 | ||
|  FileName       = Name of file.
 | ||
|  Handle         = Receives filehandle.
 | ||
|  Action         = Receives result of opening.
 | ||
|                     1 = Existing file opened.
 | ||
|                     2 = File did not exist. Created.
 | ||
|                     3 = File existed. Overwritten.
 | ||
|  InitSize       = Initial size of file when creating or overwriting.
 | ||
|                   Ignored when you do not. Must be zero when the file is
 | ||
|                   created or overwritten in read-only mode.
 | ||
|  Attrib         = Attributes when creating or overwriting files.
 | ||
|  OpenFlags      = Bitfield describing what to do when file exists or doesn't
 | ||
|                   exist.
 | ||
|  OpenMode       = Bitfield describing describing how to open a file.
 | ||
|  EA             = Extended attributes to give file when created. Use a nil
 | ||
|                   pointer if you don't want to give it extended attributes.
 | ||
|                   Use it only when creating or overwriting file. Use nil
 | ||
|                   when not. Only the FEA list will be used.
 | ||
| 
 | ||
| The bits in the openflags parameter have the following meanings:
 | ||
| 
 | ||
|  Bit 0-3:   Action to take when file exists.    0000 = Return with error.
 | ||
|                                                 0001 = Open it.
 | ||
|                                                 0010 = Overwrite it.
 | ||
|  Bit 4-7:   Action to take when file does not   0000 = Return with error.
 | ||
|             exist.                              0001 = Create it.
 | ||
| 
 | ||
| The bits in the filemode parameter have the following meanings:
 | ||
| 
 | ||
|  Bit 0-2:   Access mode:        000 = Read-only
 | ||
|                                 001 = Write-only
 | ||
|                                 010 = Read/Write
 | ||
|  Bit 3:     Reserved.
 | ||
|  Bit 4-6:   Sharing mode.       001 = Deny all
 | ||
|                                 010 = Deny write
 | ||
|                                 011 = Deny read
 | ||
|                                 100 = Deny none
 | ||
|  Bit 7:     Inheritance.        0 = Handle will be inherited by childs.
 | ||
|                                 1 = Handle will not be inherited.
 | ||
|  Bit 8-11:  Reserved.
 | ||
|  Bit 12:    Cache flag.         0 = Use caching.
 | ||
|                                 1 = Disable both read and write caching.
 | ||
|  Bit 13:    Error handling.     0 = Use critical error handler.
 | ||
|                                 1 = Return just an error code.
 | ||
|  Bit 14:    Write cache flag.   0 = Write operations may be cached.
 | ||
|                                 1 = Write operations must be executed
 | ||
|                                     before write operation functions return.
 | ||
|  Bit 15:    DASD flag.          0 = Open a file or device.
 | ||
|                                 1 = Open a drive as file.
 | ||
| 
 | ||
| When the DASD flag is set, the whole drive is read as a single file. The
 | ||
| file starts with 512 bytes of bootsector, then 512 bytes of the second sector etc.
 | ||
| The filename must consist of the driveletter followed by a semicolon.}
 | ||
| function DosOpen(FileName:PChar;var Handle: longint; var Action:longint;
 | ||
|                  InitSize:longint;Attrib,OpenFlags,FileMode:longint;
 | ||
|                  EA:PEAOp2):cardinal; cdecl;
 | ||
| function DosOpen(FileName:PChar;var Handle: THandle;var Action:cardinal;
 | ||
|                  InitSize,Attrib,OpenFlags,FileMode:cardinal;
 | ||
|                  EA:PEAOp2):cardinal; cdecl;
 | ||
| {This variant of DosOpen always creates or overwrites a file.}
 | ||
| function DosCreate(FileName:PChar;var Handle: THandle;
 | ||
|                    Attrib,OpenMode:cardinal):cardinal;
 | ||
| {This variant of DosOpen always opens an existing file.}
 | ||
| function DosOpen(FileName:PChar;var Handle: THandle;
 | ||
|                  Attrib,OpenMode:cardinal):cardinal;
 | ||
| {There are also string variants.}
 | ||
| function DosOpen(const FileName:string;var Handle: longint; var Action:longint;
 | ||
|                  InitSize,Attrib,OpenFlags,OpenMode:longint;
 | ||
|                  ea:PEAOp2):cardinal;
 | ||
| function DosOpen(const FileName:string;var Handle: THandle;var Action:cardinal;
 | ||
|                  InitSize,Attrib,OpenFlags,OpenMode:cardinal;
 | ||
|                  ea:PEAOp2):cardinal;
 | ||
| function DosCreate(const FileName:string;var Handle: THandle;
 | ||
|                    Attrib,OpenMode:cardinal):cardinal;
 | ||
| function DosOpen(const FileName:string;var Handle: THandle;
 | ||
|                  Attrib,OpenMode:cardinal):cardinal;
 | ||
| 
 | ||
| function DosProtectOpen (FileName: PChar; var Handle: longint;
 | ||
|                          var Action: longint; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: longint; ea: PEAOp2;
 | ||
|                                var FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectOpen (FileName: PChar; var Handle: THandle;
 | ||
|                          var Action: cardinal; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | ||
|                                var FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectOpen (const FileName: string; var Handle: longint;
 | ||
|                          var Action: longint; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: longint; ea: PEAOp2;
 | ||
|                                       var FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| function DosProtectOpen (const FileName: string; var Handle: THandle;
 | ||
|                          var Action: cardinal; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | ||
|                                       var FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| {Close a file.
 | ||
| Cannot fail if handle does exist.}
 | ||
| function DosClose (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectClose (Handle: THandle;
 | ||
|                                    FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Read from a file or other type of handle.
 | ||
| 
 | ||
|     Handle      = File handle.
 | ||
|     Buffer      = The read data is stored here.
 | ||
|     Count       = Number of bytes to read.
 | ||
|     ActCount    = Number of bytes actually read.}
 | ||
| function DosRead (Handle: longint; var Buffer; Count: longint;
 | ||
|                  var ActCount:longint):cardinal; cdecl;
 | ||
| 
 | ||
| function DosRead (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                  var ActCount:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectRead (Handle: longint; var Buffer; Count: longint;
 | ||
|             var ActCount: longint; FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectRead (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|            var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Write to a file or other type of handle.
 | ||
| 
 | ||
|     Handle      = File handle.
 | ||
|     Buffer      = The data to be written.
 | ||
|     Count       = Number of bytes to write.
 | ||
|     ActCount    = Number of bytes actually written.}
 | ||
| function DosWrite (Handle: longint; var Buffer; Count: longint;
 | ||
|                   var ActCount:longint):cardinal; cdecl;
 | ||
| 
 | ||
| function DosWrite (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                   var ActCount:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectWrite (Handle: longint; var Buffer; Count: longint;
 | ||
|                           var ActCount: longint;
 | ||
|                           FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectWrite (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                           var ActCount: cardinal;
 | ||
|                           FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| const   dsZeroBased=0;      {Set filepointer from begin of file.}
 | ||
|         dsRelative=1;       {Set filepointer relative to the current one.}
 | ||
|         dsEndBased=2;       {Set filepointer from end of file.}
 | ||
| (* The following for compatibility only *)
 | ||
|         FILE_BEGIN   = dsZeroBased; { Move relative to beginning of file }
 | ||
|         FILE_CURRENT = dsRelative;  { Move relative to current fptr position }
 | ||
|         FILE_END     = dsEndBased;  { Move relative to end of file }
 | ||
| 
 | ||
| {Change the filepointer of a file.}
 | ||
| function DosSetFilePtr (Handle: longint; Pos: longint; Method: cardinal;
 | ||
|                        var PosActual: longint): cardinal; cdecl;
 | ||
| function DosSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
 | ||
|                        var PosActual: cardinal): cardinal; cdecl;
 | ||
| function DosProtectSetFilePtr (Handle: longint; Pos, Method: longint;
 | ||
|                                var PosActual: longint;
 | ||
|                                FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
 | ||
|                                var PosActual: cardinal;
 | ||
|                                FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {This variant seeks always from begin of file and does not return the
 | ||
|  actual position.}
 | ||
| function DosSetFilePtr (Handle: THandle; Pos: longint): cardinal;
 | ||
| function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | ||
|                                           FileHandleLockID: cardinal): cardinal;
 | ||
| {This variant returns the current filepointer.}
 | ||
| function DosGetFilePtr (Handle: longint; var PosActual: longint): cardinal;
 | ||
| 
 | ||
| function DosGetFilePtr (Handle: THandle; var PosActual: cardinal): cardinal;
 | ||
| 
 | ||
| function DosProtectGetFilePtr (Handle: longint;
 | ||
|                   var PosActual: longint; FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| function DosProtectGetFilePtr (Handle: THandle;
 | ||
|                  var PosActual: cardinal; FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| {Use DosQueryFileInfo or DosQueryPathInfo to get the size of a file.}
 | ||
| 
 | ||
| {Change the size of a file.}
 | ||
| function DosSetFileSize (Handle: THandle; Size: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectSetFileSize (Handle: THandle; Size: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Flush update the changes to a file to disk.}
 | ||
| function DosResetBuffer (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Duplicate or redirect a handle.
 | ||
| To duplicate a handle: Fill handle with source handle and duplicate with -1.
 | ||
|                        Copy of handle will be returned in duplicate.
 | ||
| To redirect a handle:  Fill handle with handle to which the handle to
 | ||
|                        redirect will be redirected. The handle that will be
 | ||
|                        redirected should be placed in duplicate.}
 | ||
| function DosDupHandle (Handle: THandle; var Duplicate: THandle): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Return information about a specific handle. See DosOpen for a
 | ||
|  description of FileMode.}
 | ||
| function DosQueryFHState (Handle: longint; var FileMode: longint): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosQueryFHState (Handle: THandle; var FileMode: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| function DosProtectQueryFHState (Handle: THandle; var FileMode: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Set information about a specific handle. See DosOpen for a description
 | ||
|  of FileMode.}
 | ||
| function DosSetFHState (Handle: THandle; FileMode: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectSetFHState (Handle: THandle; FileMode: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Useful constants for the handle type.}
 | ||
| const   dhFile      =    0;
 | ||
|         dhDevice    =    1;
 | ||
|         dhPipe      =    2;
 | ||
|         dhNetwork   = 8192;
 | ||
| 
 | ||
| {Determine if a handle belongs to a file, a device or a pipe.
 | ||
|  Handle             = Handle tp query info about.
 | ||
|  HandType           = Bits 0-1:   00 = File
 | ||
|                                   01 = Device
 | ||
|                                   02 = Pipe
 | ||
|                       Bit 15:     0 = Local.
 | ||
|                                   1 = On network.}
 | ||
| function DosQueryHType (Handle: longint; var HandType: longint;
 | ||
|                        var Attr: longint): cardinal; cdecl;
 | ||
| function DosQueryHType (Handle: THandle; var HandType:cardinal;
 | ||
|                        var Attr:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                     File management related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| 
 | ||
| {Edit a filename using wildcard.
 | ||
| 
 | ||
| Example editing CONFIG.SYS with *.BAK becomes CONFIG.BAK.
 | ||
| Usefull when parsing commands like 'copy config.sys *.bak'.
 | ||
| All filename characters are casemapped.'
 | ||
| 
 | ||
| MetaLevel       = 0 Use modern semantics
 | ||
| MetaLevel       = 1 Use OS/2 1.2 semantics
 | ||
| Source          = string to edit
 | ||
| Edit            = editstring
 | ||
| Target          = destination buffer
 | ||
| TargetLen       = size of the destination buffer}
 | ||
| function DosEditName(MetaLevel:cardinal;Source,Edit:PChar;
 | ||
|                      Target:PChar;TargetLen:cardinal):cardinal; cdecl;
 | ||
| function DosEditName(MetaLevel:cardinal;const Source,Edit:string;
 | ||
|                      var Target:string):cardinal;
 | ||
| 
 | ||
| {Move or rename a file.
 | ||
|  OldFile    = old name of file
 | ||
|  NewFile    = new name of file}
 | ||
| function DosMove(OldFile,NewFile:PChar):cardinal; cdecl;
 | ||
| function DosMove(const OldFile,NewFile:string):cardinal;
 | ||
| 
 | ||
| 
 | ||
| const   dcExisting=1;           {Overwrite existing files.}
 | ||
|         dcAppend=2;             {Append to existing file.}
 | ||
|         dcFailAs=4;             {?? Info wanted!}
 | ||
| 
 | ||
| {Copy a file.
 | ||
|  OldFile    = source file
 | ||
|  NewFile    = destination file}
 | ||
| function DosCopy(OldFile,NewFile:PChar;Option:cardinal):cardinal; cdecl;
 | ||
| function DosCopy(const OldFile,NewFile:string;Option:cardinal):cardinal;
 | ||
| 
 | ||
| {Delete a file from disk.}
 | ||
| function DosDelete(FileName:PChar):cardinal; cdecl;
 | ||
| function DosDelete(const FileName:string):cardinal;
 | ||
| 
 | ||
| {Destroy a file on disk. DosForceDelete makes sure that the file cannot
 | ||
|  be unerased anymore.}
 | ||
| function DosForceDelete(FileName:PChar):cardinal; cdecl;
 | ||
| function DosForceDelete(const FileName:string):cardinal;
 | ||
| 
 | ||
| {Create a new directory.
 | ||
| 
 | ||
| Name            = Name of directory to create.
 | ||
| EA              = Extented attributes to give the directory. Use nil if you
 | ||
|                   do not want do give it extented attributes. Only the FEA
 | ||
|                   list is used.}
 | ||
| function DosCreateDir(Name:PChar;EA:PEAOp2):cardinal; cdecl;
 | ||
| function DosCreateDir(const Name:string;EA:PEAOp2):cardinal;
 | ||
| {Variants without the EA parameter (nil is used).}
 | ||
| function DosCreateDir(Name:PChar):cardinal;
 | ||
| function DosCreateDir(const Name:string):cardinal;
 | ||
| 
 | ||
| {Remove a directory.}
 | ||
| function DosDeleteDir(Name:PChar):cardinal; cdecl;
 | ||
| function DosDeleteDir(const Name:string):cardinal;
 | ||
| 
 | ||
| {Set the current drive. Cannot fail if the driveletter is correct.}
 | ||
| function DosSetDefaultDisk(DiskNum:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get the current drive. Because it cannot fail, it is declared as procedure.}
 | ||
| procedure DosQueryCurrentDisk(var DiskNum:longint;var Logical:longint); cdecl;
 | ||
| procedure DosQueryCurrentDisk(var DiskNum:cardinal;var Logical:cardinal); cdecl;
 | ||
| 
 | ||
| {Set the current directory.}
 | ||
| function DosSetCurrentDir(Name:PChar):cardinal; cdecl;
 | ||
| function DosSetCurrentDir(const Name:string):cardinal;
 | ||
| 
 | ||
| {Get the current directory.}
 | ||
| function DosQueryCurrentDir(DiskNum:longint;var Buffer;
 | ||
|                             var BufLen:longint):cardinal; cdecl;
 | ||
| function DosQueryCurrentDir(DiskNum:cardinal;var Buffer:string):cardinal;
 | ||
| function DosQueryCurrentDir(DiskNum:cardinal;var Buffer;
 | ||
|                             var BufLen:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Send/receive information to a device.
 | ||
| 
 | ||
|  Handle             = A file handle to a device, instead of a file.
 | ||
|  Category           = The category of functions the function is in.
 | ||
|  Func               = Function to call.
 | ||
|  Params             = Parameters for the function.
 | ||
|  ParamLen           = Size of the params buffer.
 | ||
|  ParamSize          = Size of the parametrs to send to the device
 | ||
|                       Receives size of the returned parameters.
 | ||
|  Data               = Data to send to device.
 | ||
|  DataLen            = Size of your data buffer.
 | ||
|  DataSize           = Size of the data to send to device.
 | ||
|                       Receives size of the data returned by the device.}
 | ||
| function DosDevIOCtl(Handle,Category,Func:longint;var Params;
 | ||
|                      ParamLen:longint;var ParamSize:longint;
 | ||
|                      var Data;DataLen:longint;var DataSize:
 | ||
|                      longint):cardinal; cdecl;
 | ||
| function DosDevIOCtl (Handle: THandle; Category,Func:cardinal;var Params;
 | ||
|                      ParamLen:cardinal;var ParamSize:cardinal;
 | ||
|               var Data;DataLen:cardinal;var DataSize:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                       File searching related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const   faReadOnly      =  1;
 | ||
|         faHidden        =  2;
 | ||
|         faSystem        =  4;
 | ||
|         faReserve       =  8;
 | ||
|         faDirectory     = 16;
 | ||
|         faArchive       = 32;
 | ||
| 
 | ||
|         ilStandard      =  1;
 | ||
|         ilQueryEASize   =  2;
 | ||
|         ilQueryEAs      =  3;
 | ||
|         ilQueryFullName =  5;
 | ||
|         ilStandardL     = 11;
 | ||
|         ilQueryEASizeL  = 12;
 | ||
|         ilQueryEAsL     = 13;
 | ||
| 
 | ||
|         FIL_Standard    = ilStandard;
 | ||
|         FIL_QueryEASize = ilQueryEASize;
 | ||
|         FIL_QueryEAsFromList = ilQueryEAs;
 | ||
|         FIL_StandardL   = ilStandardL;
 | ||
|         FIL_QueryEASizeL = ilQueryEASizeL;
 | ||
|         FIL_QueryEAsFromListL = ilQueryEAsL;
 | ||
| 
 | ||
| {Format of date records:
 | ||
| 
 | ||
|  Bit 0..4:      day
 | ||
|  Bit 5..8:      month
 | ||
|  Bit 9..15:     year minus 1980
 | ||
| 
 | ||
|  Format of time records:
 | ||
| 
 | ||
|  Bit 0..4:      seconds divided by 2
 | ||
|  Bit 5..10:     minutes
 | ||
|  Bit 11..15:    hours}
 | ||
| 
 | ||
| type
 | ||
|         TFileStatus = object
 | ||
|         end;
 | ||
|         PFileStatus = ^TFileStatus;
 | ||
| 
 | ||
|         TFileStatus3 = object (TFileStatus)
 | ||
|             DateCreation,               {Date of file creation.}
 | ||
|             TimeCreation,               {Time of file creation.}
 | ||
|             DateLastAccess,             {Date of last access to file.}
 | ||
|             TimeLastAccess,             {Time of last access to file.}
 | ||
|             DateLastWrite,              {Date of last modification of file.}
 | ||
|             TimeLastWrite:word;         {Time of last modification of file.}
 | ||
|             FileSize,                   {Size of file.}
 | ||
|             FileAlloc:cardinal;         {Amount of space the file really
 | ||
|                                          occupies on disk.}
 | ||
|             AttrFile:cardinal;          {Attributes of file.}
 | ||
|         end;
 | ||
|         PFileStatus3=^TFileStatus3;
 | ||
| 
 | ||
|         TFileStatus4=object(TFileStatus3)
 | ||
|             cbList:cardinal;            {Length of entire EA set.}
 | ||
|         end;
 | ||
|         PFileStatus4=^TFileStatus4;
 | ||
| 
 | ||
|         TFileFindBuf3=object(TFileStatus)
 | ||
|             NextEntryOffset: cardinal;  {Offset of next entry}
 | ||
|             DateCreation,               {Date of file creation.}
 | ||
|             TimeCreation,               {Time of file creation.}
 | ||
|             DateLastAccess,             {Date of last access to file.}
 | ||
|             TimeLastAccess,             {Time of last access to file.}
 | ||
|             DateLastWrite,              {Date of last modification of file.}
 | ||
|             TimeLastWrite:word;         {Time of last modification of file.}
 | ||
|             FileSize,                   {Size of file.}
 | ||
|             FileAlloc:cardinal;         {Amount of space the file really
 | ||
|                                          occupies on disk.}
 | ||
|             AttrFile:cardinal;          {Attributes of file.}
 | ||
|             Name:string;                {Also possible to use as ASCIIZ.
 | ||
|                                          The byte following the last string
 | ||
|                                          character is always zero.}
 | ||
|         end;
 | ||
|         PFileFindBuf3=^TFileFindBuf3;
 | ||
| 
 | ||
|         TFileFindBuf4=object(TFileStatus)
 | ||
|             NextEntryOffset: cardinal;  {Offset of next entry}
 | ||
|             DateCreation,               {Date of file creation.}
 | ||
|             TimeCreation,               {Time of file creation.}
 | ||
|             DateLastAccess,             {Date of last access to file.}
 | ||
|             TimeLastAccess,             {Time of last access to file.}
 | ||
|             DateLastWrite,              {Date of last modification of file.}
 | ||
|             TimeLastWrite:word;         {Time of last modification of file.}
 | ||
|             FileSize,                   {Size of file.}
 | ||
|             FileAlloc:cardinal;         {Amount of space the file really
 | ||
|                                          occupies on disk.}
 | ||
|             AttrFile:cardinal;          {Attributes of file.}
 | ||
|             cbList:cardinal;            {Size of the file's extended attributes.}
 | ||
|             Name:string;                {Also possible to use as ASCIIZ.
 | ||
|                                          The byte following the last string
 | ||
|                                          character is always zero.}
 | ||
|         end;
 | ||
|         PFileFindBuf4=^TFileFindBuf4;
 | ||
| 
 | ||
|         TFileFindBuf3L=object(TFileStatus)
 | ||
|             NextEntryOffset: cardinal;  {Offset of next entry}
 | ||
|             DateCreation,               {Date of file creation.}
 | ||
|             TimeCreation,               {Time of file creation.}
 | ||
|             DateLastAccess,             {Date of last access to file.}
 | ||
|             TimeLastAccess,             {Time of last access to file.}
 | ||
|             DateLastWrite,              {Date of last modification of file.}
 | ||
|             TimeLastWrite:word;         {Time of last modification of file.}
 | ||
|             FileSize,                   {Size of file.}
 | ||
|             FileAlloc:int64;            {Amount of space the file really
 | ||
|                                          occupies on disk.}
 | ||
|             AttrFile:cardinal;          {Attributes of file.}
 | ||
|             Name:string;                {Also possible to use as ASCIIZ.
 | ||
|                                          The byte following the last string
 | ||
|                                          character is always zero.}
 | ||
|         end;
 | ||
|         PFileFindBuf3L=^TFileFindBuf3L;
 | ||
| 
 | ||
|         TFileFindBuf4L=object(TFileStatus)
 | ||
|             NextEntryOffset: cardinal;  {Offset of next entry}
 | ||
|             DateCreation,               {Date of file creation.}
 | ||
|             TimeCreation,               {Time of file creation.}
 | ||
|             DateLastAccess,             {Date of last access to file.}
 | ||
|             TimeLastAccess,             {Time of last access to file.}
 | ||
|             DateLastWrite,              {Date of last modification of file.}
 | ||
|             TimeLastWrite:word;         {Time of last modification of file.}
 | ||
|             FileSize,                   {Size of file.}
 | ||
|             FileAlloc:int64;            {Amount of space the file really
 | ||
|                                          occupies on disk.}
 | ||
|             AttrFile:cardinal;          {Attributes of file.}
 | ||
|             cbList:cardinal;            {Size of the file's extended attributes.}
 | ||
|             Name:string;                {Also possible to use as ASCIIZ.
 | ||
|                                          The byte following the last string
 | ||
|                                          character is always zero.}
 | ||
|         end;
 | ||
|         PFileFindBuf4L=^TFileFindBuf4L;
 | ||
| 
 | ||
| 
 | ||
| {Find first file matching a filemask. In contradiction to DOS, a search
 | ||
|  handle is returned which should be closed with FindClose when done.
 | ||
|  FileMask       = Filemask to search.
 | ||
|  Handle         = Search handle will be returned here, fill with -1 before
 | ||
|                   call.
 | ||
|  Attrib         = File attributes to search for.
 | ||
|  AFileStatus    = Return buffer.
 | ||
|  FileStatusLen  = Size of return buffer.
 | ||
|  Count          = Fill with maximum number of files to search for, the
 | ||
|                   actual number of matching files found is returned here.
 | ||
|  InfoLevel      = One of the ilXXXX constants. Consult IBM documentation
 | ||
|                   for exact meaning. For normal use: Use ilStandard and
 | ||
|                   use PFileFindBuf3 for AFileStatus.}
 | ||
| function DosFindFirst (FileMask: PChar; var Handle: THandle; Attrib: cardinal;
 | ||
|                       AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | ||
|                       var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosFindFirst (const FileMask: string; var Handle: THandle;
 | ||
|                       Attrib: cardinal; AFileStatus: PFileStatus;
 | ||
|                       FileStatusLen: cardinal; var Count: cardinal;
 | ||
|                       InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| {Find next matching file.}
 | ||
| function DosFindNext (Handle: THandle; AFileStatus: PFileStatus;
 | ||
|                      FileStatusLen: cardinal; var Count: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Close a search handle. Cannot fail if handle does exist.}
 | ||
| function DosFindClose (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Get info about a file.
 | ||
| 
 | ||
|  Handle         = Handle of file.
 | ||
|  InfoLevel      = One of the ilXXXX constants. Consult IBM documentation
 | ||
|                   for exect meaning. For normal use: Use ilStandard and
 | ||
|                   PFileFindBuf3 for AFileStatus.
 | ||
|  AFileStatus    = An info return buffer.
 | ||
|  FileStatusLen  = Size of info buffer.}
 | ||
| function DosQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|            AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                             AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Set info about a file. File must be opened with write permissions. See
 | ||
|  above fo the parameters.}
 | ||
| function DosSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|            AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                             AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Return info about a file. In contradiction to the above functions, the
 | ||
|  file does not have to be open.}
 | ||
| function DosQueryPathInfo(FileName:PChar;InfoLevel:cardinal;
 | ||
|                 AFileStatus:PFileStatus;FileStatusLen:cardinal):cardinal; cdecl;
 | ||
| function DosQueryPathInfo(const FileName:string;InfoLevel:cardinal;
 | ||
|                        AFileStatus:PFileStatus;FileStatusLen:cardinal):cardinal;
 | ||
| 
 | ||
| {Set information about a file.}
 | ||
| function DosSetPathInfo(FileName:PChar;InfoLevel:cardinal;
 | ||
|                         AFileStatus:PFileStatus;FileStatusLen,
 | ||
|                         Options:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get info about the names and lengths of the EA's for a file or directory.
 | ||
| 
 | ||
|  RefType            = 0 = AFile is a pointer to a file-handle.
 | ||
|                       1 = AFile is a pointer to an ASCIIZ string.
 | ||
|  AFile              = Pointer file's name or handle.
 | ||
|  Entry              = Number of EA to query inof about. (1 = first EA).
 | ||
|  Buf                = Buffer where requested info is returned. For InfoLevel
 | ||
|                       1, the buffer is a TfEA2 datastructure.
 | ||
|  BufLen             = Size of buf in bytes.
 | ||
|  Count              = Number of EA's to return info for. Number of EA's that
 | ||
|                       actually fitted in buf is returned here.
 | ||
|  InfoLevel          = Level of information to return. Only level 1 is
 | ||
|                       currently allowed.}
 | ||
| 
 | ||
| function DosEnumAttribute(RefType:longint;AFile:pointer;
 | ||
|                           Entry:longint;var Buf;BufSize:longint;
 | ||
|                         var Count:longint;InfoLevel:longint):cardinal; cdecl;
 | ||
| 
 | ||
| function DosEnumAttribute(RefType:cardinal;AFile:pointer;
 | ||
|                           Entry:cardinal;var Buf;BufSize:cardinal;
 | ||
|                         var Count:cardinal;InfoLevel:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| function DosEnumAttribute (RefType: cardinal; AFile: PChar;
 | ||
|                           Entry: cardinal; var Buf; BufSize:cardinal;
 | ||
|                     var Count: cardinal; InfoLevel: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosEnumAttribute(RefType: cardinal; const AFile: THandle;
 | ||
|                           Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                     var Count: cardinal; InfoLevel: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (RefType: cardinal; AFile: pointer;
 | ||
|                                   Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                                   var Count: cardinal; InfoLevel: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| function DosEnumAttribute (Handle: longint; Entry: longint; var Buf;
 | ||
|            BufSize: longint; var Count: longint; InfoLevel: longint): cardinal;
 | ||
| 
 | ||
| function DosEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | ||
|         BufSize: cardinal; var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | ||
|                                   BufSize: cardinal; var Count: cardinal;
 | ||
|                                   InfoLevel: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| function DosEnumAttribute (const FileName: string;
 | ||
|                            Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (const FileName: string; Entry: cardinal;
 | ||
|                                   var Buf; BufSize: cardinal;
 | ||
|                                   var Count: cardinal; InfoLevel: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| 
 | ||
| {Get an environment variable.
 | ||
|  Name               = Name of environment variable to get.
 | ||
|  Value              = Receives pointer to environment string.}
 | ||
| function DosScanEnv(Name:PChar;var Value:PChar):cardinal; cdecl;
 | ||
| {There is, of course a string variant.}
 | ||
| function DosScanEnv(const Name:string;var Value:string):cardinal;
 | ||
| 
 | ||
| const   dsPathOnly      = 0;    {Do not search current dir. (Unless it is
 | ||
|                                  in the directory list.)}
 | ||
|         dsCurrentDir    = 1;    {Search in the current direcotry and in the
 | ||
|                                  directory list.}
 | ||
|         dsEnvironment   = 2;    {The dirlist parameter is not a directory
 | ||
|                                  list, but an environment variable
 | ||
|                                  containing one.}
 | ||
|         dsIgnoreNetErrs = 4;    {Ignore network errors when searching.}
 | ||
| 
 | ||
| {Search for a file in a given number of directories.
 | ||
|  Flags          = A combination of the dsXXXX constants.
 | ||
|  DirList        = Directory list or environment variable containing list
 | ||
|                   to search in.
 | ||
|  FileName       = Filename to search for. May contain wildcards.
 | ||
|  FullName       = Receives filename found, including path.
 | ||
|  FullLen        = Length of your fullname buffer.}
 | ||
| function DosSearchPath(Flag:cardinal;DirList,FileName:PChar;
 | ||
|                        FullName:PChar;FullLen:cardinal):cardinal; cdecl;
 | ||
| function DosSearchPath(Flag:cardinal;const DirList,FileName:string;
 | ||
|                        var FullName:string):cardinal;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                        File system related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| type    TFSInfo=record
 | ||
|             case word of
 | ||
|                 1:
 | ||
|                     (File_Sys_ID,
 | ||
|                      Sectors_Per_Cluster,
 | ||
|                      Total_Clusters,
 | ||
|                      Free_Clusters:cardinal;
 | ||
|                      Bytes_Per_Sector:word);
 | ||
|                 2:                          {For date/time description,
 | ||
|                                              see file searching realted
 | ||
|                                              routines.}
 | ||
|                     (Label_Date,            {Date when volumelabel created.}
 | ||
|                      Label_Time:word;       {Time when volumelabel created.}
 | ||
|                      VolumeLabel:string);   {Volume label. Can also be used
 | ||
|                                              as ASCIIZ, because the byte
 | ||
|                                              following the last character of
 | ||
|                                              the string is always zero.}
 | ||
|         end;
 | ||
|         PFSInfo=^TFSInfo;
 | ||
| 
 | ||
|         TAttachData=record
 | ||
|             case integer of         {Flag in [0,1,2].}
 | ||
|                 0,1:                {Flag = 0.}
 | ||
|                     (Count:word;
 | ||
|                      Data:TCharArray);
 | ||
|                 2:                  {Flag = 2.}
 | ||
|                     (PipeHandle: THandle;
 | ||
|                                     {Handle of named pipe opened by spooler.}
 | ||
|                      SpoolName:string);
 | ||
|                                     {Name of spooler object. Can also be used
 | ||
|                                      as ASCIIZ, because the bute following
 | ||
|                                      the last character is always zero.}
 | ||
|         end;
 | ||
|         PAttachData=^TAttachData;
 | ||
| 
 | ||
|         TFSQBuffer2=record
 | ||
|             _Type:word;
 | ||
|             NameLen:word;
 | ||
|             FSDNameLen:word;
 | ||
|             FSADataLen:word;
 | ||
|             Name:char;
 | ||
|             Nul1:byte;
 | ||
|             FSDName:char;
 | ||
|             Nul2:byte;
 | ||
|             FSAData:char;
 | ||
|             Nul3:byte;
 | ||
|         end;
 | ||
|         PFSQBuffer2=^TFSQBuffer2;
 | ||
| 
 | ||
| const   fsAttach        = 0;    {Attach a drive.}
 | ||
|         fsDetach        = 1;    {Detach a drive.}
 | ||
|         fsSpoolAttach   = 2;    {Attach a spool device.}
 | ||
|         fsSpoolDetach   = 3;    {Detach a spool device.}
 | ||
| 
 | ||
| {IBM DOCS: "DosFSAttach attaches or detaches a drive to or from a remote file
 | ||
|  system driver (FSD), or a pseudocharacter device name to or from a local or
 | ||
|  remote FSD."
 | ||
| 
 | ||
|  DevName            = When flag is 0 or 1, the name of a drive or a pseudo-
 | ||
|                       character device. When using a drivename use the drive-
 | ||
|                       letter followed by a colon.
 | ||
|                       When flag is 2 or 3, the name of a spooled device.
 | ||
|  FileSystem         = Name of the driver that should be attached or detached
 | ||
|                       to DevName. Use nil when flag is 2 or 3.
 | ||
|  Data               = Should contain a number of ASCIIZ strings that will
 | ||
|                       be passed to the filesystem driver when flag is 0 or 1.
 | ||
|                       Should contain de pipehandle and spoolname when flag is
 | ||
|                       2. Should be nil when flag is 3.
 | ||
|  DataLen            = Number of bytes in data parameter.
 | ||
|  Flag               = One of the dsXXXX constants. See above}
 | ||
| function DosFSAttach(DevName,FileSystem:PChar;var Data:TAttachData;
 | ||
|                      DataLen,Flag:cardinal):cardinal; cdecl;
 | ||
| function DosFSAttach(const DevName,FileSystem:string;var Data:TAttachData;
 | ||
|                      DataLen,Flag:cardinal):cardinal;
 | ||
| 
 | ||
| {IBMDOCS: "DosQueryFSAttach obtains information about an attached file system
 | ||
|  (local or remote), or about a character device or pseudocharacter device
 | ||
|  attached to the file system."
 | ||
| 
 | ||
|  DevName            = Name info drive or pseudo character device to query
 | ||
|                       info about. Ignored for InfoLevels 2 and 3.
 | ||
|  Ordinal            = Index into list of character/pseudo-character
 | ||
|                       devices. Starts at 1. Ignored for infolevel 1.
 | ||
|  InfoLevel          = 1 = Return information about a drive or device named
 | ||
|                           by DevName.
 | ||
|                       2 = Return information about a (pseudo) charachter
 | ||
|                           device numbered by Ordinal.
 | ||
|                       3 = Return information about a drive numbered by
 | ||
|                           Ordinal.
 | ||
|  Buffer             = Will be filled with infomation.
 | ||
|  BufLen             = Size of your buffer in bytes. Number of bytes filled
 | ||
|                       in your buffer is returned here.}
 | ||
| function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:longint;
 | ||
|                      var Buffer:TFSQBuffer2;var BufLen:longint):cardinal; cdecl;
 | ||
| function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:longint;
 | ||
|                           var Buffer:TFSQBuffer2;var BufLen:longint):cardinal;
 | ||
| function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:cardinal;
 | ||
|                      var Buffer:TFSQBuffer2;var BufLen:cardinal):cardinal; cdecl;
 | ||
| function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:cardinal;
 | ||
|                           var Buffer:TFSQBuffer2;var BufLen:cardinal):cardinal;
 | ||
| 
 | ||
| const   FSCtl_Handle=1;
 | ||
|         FSCtl_PathName=2;
 | ||
|         FSCtl_FSDName=3;
 | ||
|         FSCtl_Error_Info=1;
 | ||
|         FSCtl_Max_EASize=2;
 | ||
| 
 | ||
| {IBMDOCS: "DosFSCtl provides an extended standard interface between an
 | ||
|  application and a file-system driver (FSD).
 | ||
| 
 | ||
|  Consult IBM documentation about this function..}
 | ||
| function DosFSCtl (Data: pointer; DataLen: longint; var ResDataLen: longint;
 | ||
|                   Parms: pointer; ParmsLen: longint; var ResParmsLen: longint;
 | ||
|                   _Function: longint; Route: PChar;
 | ||
|                   Handle, Method: longint): cardinal; cdecl;
 | ||
| function DosFSCtl (Data: pointer; DataLen: longint; var ResDataLen: longint;
 | ||
|                   Parms: pointer;ParmsLen: longint; var ResParmsLen: longint;
 | ||
|                   _Function: longint; const Route: string;
 | ||
|                   Handle, Method: longint): cardinal;
 | ||
| function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
 | ||
|                  Parms: pointer; ParmsLen: cardinal; var ResParmsLen: cardinal;
 | ||
|                   _Function: cardinal; Route: PChar;
 | ||
|                   Handle: THandle;Method: cardinal): cardinal; cdecl;
 | ||
| function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
 | ||
|                  Parms: pointer; ParmsLen: cardinal; var ResParmsLen: cardinal;
 | ||
|                   _Function: cardinal; const Route: string;
 | ||
|                   Handle: THandle; Method: cardinal): cardinal;
 | ||
| 
 | ||
| {Get information about a drive.
 | ||
| InfoLevels:
 | ||
|  1              Get total/free space etc.
 | ||
|  2              Get volumelabel.}
 | ||
| function DosQueryFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
 | ||
|                          BufLen: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Set information about a drive.}
 | ||
| function DosSetFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSinfo;
 | ||
|                        BufLen: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Check if verify mode is enabled.}
 | ||
| function DosQueryVerify (var Enabled: longint): cardinal; cdecl;
 | ||
| function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
 | ||
| function DosQueryVerify (var Enabled: boolean): cardinal; cdecl;
 | ||
| 
 | ||
| {Turn the verify mode on or off.}
 | ||
| function DosSetVerify (Enable: cardinal): cardinal; cdecl;
 | ||
| function DosSetVerify (Enable: boolean): cardinal; cdecl;
 | ||
| 
 | ||
| {Change the number of filehandles our program can open. (Default=50). It
 | ||
|  won't hurt if there are files open when you are calling this.}
 | ||
| function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Ask for more filehandles (or dump filehandles). It won't hurt if there are
 | ||
|  files open when you are calling this.
 | ||
|  ReqCount       = Number of filehandles to ask for. (Negative to dump them.)
 | ||
|  CurMaxFH       = Receives the total number of filehandles your program has
 | ||
|                   access to.}
 | ||
| function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: longint):
 | ||
|                                                                cardinal; cdecl;
 | ||
| function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| 
 | ||
| const   dsFull=0;       {IBM DOCS: "Perform full system shutdown and
 | ||
|                          file-system lock."}
 | ||
|         dsQuiescient=1; {IBM DOCS: "Perform buffer and cache flushing to
 | ||
|                          make system quiescent."}
 | ||
| 
 | ||
| {Prepare the system for shutdown.}
 | ||
| function DosShutdown (Flags: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| 
 | ||
| {Parameters (system variables) for DosQuerySysInfo.}
 | ||
| const   svMaxPathLength     = 1;        {Maximum length of a pathname.}
 | ||
|         svMaxTextSessions   = 2;        {Maximum number of text sessions.}
 | ||
|         svMaxPMSessions     = 3;        {Maximum number of PM sessions.}
 | ||
|         svMaxVDMSessions    = 4;        {Maximum number of DOS sessions.}
 | ||
|         svBootDrive         = 5;        {Get the boot drive. (A=1, B=2 etc.)}
 | ||
|         svDynPriVariation   = 6;        {Dynamic priority variation flag
 | ||
|                                          (0 = absolute priority, 1 means
 | ||
|                                          dynamic priority).}
 | ||
|         svMaxWait           = 7;        {Maximum wait time in seconds.}
 | ||
|         svMinSlice          = 8;        {Minimum time slice in milliseconds.}
 | ||
|         svMaxSlice          = 9;        {Maximum time slice in milliseconds.}
 | ||
|         svPageSize          = 10;       {Size of a page (always 4096 bytes for
 | ||
|                                          x86).}
 | ||
|         svVersionMajor      = 11;       {Major version number of kernel:
 | ||
|                                          10 for OS/2 1.0 and 1.1,
 | ||
|                                          20 for OS/2 2.0 .. OS/2 4.0.}
 | ||
|         svVersionMinor      = 12;       {Minor version of kernel:
 | ||
|                                          OS/2 2.0: 00, 2.1: 10, 2.11: 11,
 | ||
|                                               3.0: 30, 4.0: 40.}
 | ||
|         svVersionRevision   = 13;       {Revision of kernel. Until now all
 | ||
|                                          OS/2 versions return 0.}
 | ||
|         svMsCount           = 14;       {Uptime in milliseconds.}
 | ||
|         svTimeLow           = 15;       {System time in seconds since
 | ||
|                                          1 January 1970 0:00:00, low dword.}
 | ||
|         svTimeHigh          = 16;       {System time in seconds since
 | ||
|                                          1 January 1970 0:00:00, high dword.}
 | ||
|         svTotPhysMem        = 17;       {Amount in bytes of physical memory
 | ||
|                                          in system.}
 | ||
|         svTotResMem         = 18;       {Amount in bytes of resident memory
 | ||
|                                          in system.}
 | ||
|         svTotAvailMem       = 19;       {Amount in bytes of available
 | ||
|                                          memory.}
 | ||
|         svMaxPrMem          = 20;       {Maximum amount of memory the current
 | ||
|                                          process can request for its
 | ||
|                                          private use.}
 | ||
|         svMaxShMem          = 21;       {Maximum amount of shared memory
 | ||
|                                          the current process can request.}
 | ||
|         svTimerInterval     = 22;       {Timer interval in tenths of a
 | ||
|                                          millisecond.}
 | ||
|         svMaxCompLength     = 23;       {Maximum length of a component in a
 | ||
|                                          pathname.}
 | ||
|         svForegroundFSSession = 24;     {Session ID of the foreground
 | ||
|                                          full-screen session. Presentation
 | ||
|                                          Manager and all sessions running under
 | ||
|                                          PM (including PM, windowed VIO, VDM
 | ||
|                                          and seamless Win 3.x) return ID 1.}
 | ||
|         svForegroundProcess = 25;       {Process ID of the current foreground
 | ||
|                                          process.}
 | ||
|         svNumProcessors     = 26;       {Number of CPUs in machine - supported
 | ||
|                                          since WarpServer Advanced SMP.}
 | ||
| {The following parameters are only supported in WSeB/MCP/eCS
 | ||
|  or OS/2 Warp 4.0 with FP14 and above.}
 | ||
|         svMaxHPrMem         = 27;       {Maximum amount of high memory the
 | ||
|                                          process can request for its private
 | ||
|                                          use in total (not necessarily at once
 | ||
|                                          because of potential fragmentation).}
 | ||
|         svMaxHShMem         = 28;       {Maximum amount of high shared memory
 | ||
|                                          the process can request.}
 | ||
|         svMaxProcesses      = 29;       {Maximum number of concurrent processes
 | ||
|                                          supported.}
 | ||
|         svVirtualAddressLimit = 30;     {Size of the user address space in MB
 | ||
|                                          (i.e. the value of the rounded
 | ||
|                                          VIRTUALADDRESSLIMIT as specified in
 | ||
|                                          CONFIG.SYS, or the default value of
 | ||
|                                          512).}
 | ||
|         svMax               = 30;       {The maximum parameter number
 | ||
|                                          for WSeB/MCP/eCS.}
 | ||
| 
 | ||
| {Aliases for compatibility...}
 | ||
|         QSV_MAX_PATH_LENGTH = svMaxPathLength;
 | ||
|         QSV_MAX_TEXT_SESSIONS = svMaxTextSessions;
 | ||
|         QSV_MAX_PM_SESSIONS = svMaxPMSessions;
 | ||
|         QSV_MAX_VDM_SESSIONS = svMaxVDMSessions;
 | ||
|         QSV_BOOT_DRIVE = svBootDrive;
 | ||
|         QSV_DYN_PRI_VARIATION = svDynPriVariation;
 | ||
|         QSV_MAX_WAIT = svMaxWait;
 | ||
|         QSV_MIN_SLICE = svMinSlice;
 | ||
|         QSV_MAX_SLICE = svMaxSlice;
 | ||
|         QSV_PAGE_SIZE = svPageSize;
 | ||
|         svMajorVersion = svVersionMajor;
 | ||
|         QSV_VERSION_MAJOR = svVersionMajor;
 | ||
|         svMinorVersion = svVersionMinor;
 | ||
|         QSV_VERSION_MINOR = svVersionMinor;
 | ||
|         svRevision = svVersionRevision;
 | ||
|         QSV_VERSION_REVISION = svVersionRevision;
 | ||
|         QSV_MS_COUNT = svMsCount;
 | ||
|         QSV_TIME_LOW = svTimeLow;
 | ||
|         QSV_TIME_HIGH = svTimeHigh;
 | ||
|         svPhysMem = svTotPhysMem;
 | ||
|         QSV_TOTPHYSMEM = svTotPhysMem;
 | ||
|         svResMem = svTotResMem;
 | ||
|         QSV_TOTRESMEM = svTotResMem;
 | ||
|         svAvailMem = svTotAvailMem;
 | ||
|         QSV_TOTAVAILMEM = svTotAvailMem;
 | ||
|         svPrMem = svMaxPrMem;
 | ||
|         svShMem = svMaxShMem;
 | ||
|         QSV_MAXPRMEM = svMaxPrMem;
 | ||
|         QSV_MAXSHMEM = svMaxShMem;
 | ||
|         QSV_TIMER_INTERVAL = svTimerInterval;
 | ||
|         QSV_MAX_COMP_LENGTH = svMaxCompLength;
 | ||
|         QSV_FOREGROUND_FS_SESSION = svForegroundFSSession;
 | ||
|         svForegroundSession = svForegroundFSSession;
 | ||
|         QSV_FOREGROUND_PROCESS = svForegroundProcess;
 | ||
|         QSV_NUMPROCESSORS = svNumProcessors;
 | ||
|         QSV_MAXHPRMEM = svMaxHPrMem;
 | ||
|         QSV_MAXHSHMEM = svMaxHShMem;
 | ||
|         QSV_MAXPROCESSES = svMaxProcesses;
 | ||
|         QSV_VIRTUALADDRESSLIMIT = svVirtualAddressLimit;
 | ||
|         QSV_MAX = svMax;
 | ||
| 
 | ||
| {Get one or more system variables.
 | ||
|  First          = First variable to get.
 | ||
|  Last           = Last variable to get.
 | ||
|  Buf            = Receives variables.
 | ||
|  BufSize        = Size of the buffer (every system variable is a cardinal).}
 | ||
| function DosQuerySysInfo(First,Last:cardinal;var Buf;BufSize:cardinal):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| type
 | ||
|     TQSVValues = array [1..svMax] of cardinal;
 | ||
|     PQSVValues = ^TQSVValues;
 | ||
| 
 | ||
| function DosQuerySysInfo(First,Last:cardinal;Buf:PQSVValues;
 | ||
|                                               BufSize:cardinal):cardinal;cdecl;
 | ||
| 
 | ||
| {Return information about a partitionable disk.}
 | ||
| function DosPhysicalDisk(Func:cardinal;Buf:pointer;BufSize:cardinal;
 | ||
|                             Params:pointer;ParamSize:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                        Memory allocation related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const   mfPag_Read      = $00001;   {Give read access to memory.}
 | ||
|         mfPag_Write     = $00002;   {Give write access to memory.}
 | ||
|         mfPag_Execute   = $00004;   {Allow code execution in memory.}
 | ||
|         mfPag_Guard     = $00008;   {Used for dynamic memory growing. Create
 | ||
|                                      uncommitted memory and make the first
 | ||
|                                      page guarded. Once it is accessed it
 | ||
|                                      will be made committed, and the next
 | ||
|                                      uncommitted page will be made guarded.}
 | ||
|         mfPag_Commit    = $00010;   {Make the memory committed.}
 | ||
|         mfPag_Decommit  = $00020;   {Decommit the page.}
 | ||
|         mfObj_Tile      = $00040;   {Also allocate 16-bit segments of 64k
 | ||
|                                      which map the memory. (Makes 16<>32 bit
 | ||
|                                      pointer conversion possible.}
 | ||
|         mfObj_Protected = $00080;
 | ||
|         mfObj_Gettable  = $00100;
 | ||
|         mfObj_Giveable  = $00200;
 | ||
|         mfObj_Any       = $00400;   {Allow using high memory (> 512 MB).}
 | ||
|         mfPag_Default   = $00400;
 | ||
|         mfPag_Shared    = $02000;
 | ||
|         mfPag_Free      = $04000;
 | ||
|         mfPag_Base      = $10000;
 | ||
| 
 | ||
|         mfSub_Init      = $00001;   {Use base, if not set, choose a base
 | ||
|                                      address yourself.}
 | ||
|         mfSub_Grow      = $00002;   {Grow the specified heap, instead of
 | ||
|                                      allocating it. Ignore mfSub_Init.}
 | ||
|         mfSub_Sparse    = $00004;
 | ||
|         mfSub_Serialize = $00008;
 | ||
| 
 | ||
| (* Plus a little bit compatibility... *)
 | ||
|         pag_Read = mfPag_Read;
 | ||
|         pag_Write = mfPag_Write;
 | ||
|         pag_Execute = mfPag_Execute;
 | ||
|         pag_Guard = mfPag_Guard;
 | ||
|         pag_Commit = mfPag_Commit;
 | ||
|         pag_Decommit = mfPag_Decommit;
 | ||
|         obj_Tile = mfObj_Tile;
 | ||
|         obj_Protected = mfObj_Protected;
 | ||
|         obj_Gettable = mfObj_Gettable;
 | ||
|         obj_Giveable = mfObj_Giveable;
 | ||
|         obj_Any = mfObj_Any;
 | ||
|         pag_Default = mfPag_Default;
 | ||
|         pag_Shared = mfPag_Shared;
 | ||
|         pag_Free = mfPag_Free;
 | ||
|         pag_Base = mfPag_Base;
 | ||
|         sub_Init = mfSub_Init;
 | ||
|         sub_Grow = mfSub_Grow;
 | ||
|         sub_Sparse = mfSub_Sparse;
 | ||
|         sub_Serialize = mfSub_Serialize;
 | ||
| 
 | ||
| {Get some memory.
 | ||
|  P          = Pointer to memory will be returned here.
 | ||
|  Size       = Number of bytes to get. The size is rounded up to a multiple
 | ||
|               of 4096. This is probably not the case on non-intel 386
 | ||
|               versions of OS/2.
 | ||
|  Flags      = One or more of the mfXXXX constants.}
 | ||
| function DosAllocMem(var P:pointer;Size,Flag:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Free a memory block.}
 | ||
| function DosFreeMem(P:pointer):cardinal; cdecl;
 | ||
| 
 | ||
| {Set settings for a block of memory.
 | ||
|  P          = Pointer to the memory. Doesn't need to be the start of the
 | ||
|               memory block allocated with DosAllocMem, but must be a multiple
 | ||
|               of 4096.
 | ||
|  Size       = Number of bytes to change settings for. Is rounded up to a
 | ||
|               multile of 4096.
 | ||
|  Flags      = New flags for the memory.}
 | ||
| function DosSetMem(P:pointer;Size,Flag:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Give another process access to a shared memory block.
 | ||
| 
 | ||
|  P          = Pointer to the shared memory object.
 | ||
|  PID        = Process of destination process.
 | ||
|  Flag       = Permissions the the destination process gets.}
 | ||
| function DosGiveSharedMem(P:pointer;PID,Flag:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get access to a shared memory object.
 | ||
| 
 | ||
|  P          = Pointer to shared memory object.
 | ||
|  Flag       = Permissions to ask.}
 | ||
| function DosGetSharedMem(P:pointer;Flag:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get access to a shared memory object that has a name.
 | ||
| 
 | ||
|  P          = Pointer to shared memory object.
 | ||
|  Name       = Name of the memory object. (Starting with '\SHAREMEM\'.
 | ||
|  Flag       = Permissions to ask.}
 | ||
| function DosGetNamedSharedMem(var P:pointer;Name:PChar;Flag:cardinal):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosGetNamedSharedMem(var P:pointer;const Name:string;
 | ||
|                               Flag:cardinal):cardinal;
 | ||
| 
 | ||
| {Allocate memory so that it can later be shared with another program.
 | ||
|  P          = Reveives pointer to memory.
 | ||
|  Name       = Optional: name to give memory. Must start with '\SHAREMEM\'.
 | ||
|               Use nil for the PChar or '' for the string variant for no name.
 | ||
|  Size       = Number of bytes to allocate.}
 | ||
| function DosAllocSharedMem(var P:pointer;Name:PChar;
 | ||
|                                             Size,Flag:cardinal):cardinal; cdecl;
 | ||
| function DosAllocSharedMem(var P:pointer;const Name:string;Size,
 | ||
|                                                         Flag:cardinal):cardinal;
 | ||
| 
 | ||
| {Get the size and flags of a block of memory.
 | ||
| 
 | ||
|  P          = Pointer to the block of memory.
 | ||
|  Size       = Receives block size.
 | ||
|  Flag       = Receives the flags.}
 | ||
| function DosQueryMem(P:pointer;var Size,Flag:longint):cardinal; cdecl;
 | ||
| function DosQueryMem (P: pointer; var Size, Flag: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Allocate a block of memory in a heap.
 | ||
|  Base       = Pointer to the start of the heap.
 | ||
|  P          = Receives pointer to the memory bock.
 | ||
|  Size       = Number of bytes to allocate.}
 | ||
| function DosSubAllocMem(Base:pointer;var P:pointer;Size:cardinal):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Free a block of memory in a heap.
 | ||
|  Base       = Pointer to the start of the heap.
 | ||
|  P          = Pointer to memory block to free.
 | ||
|  Size       = Number of bytes to free.}
 | ||
| function DosSubFreeMem(Base,P:pointer;Size:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Turn a block of memory into a heap.
 | ||
| 
 | ||
| Base        = Pointer to memory block to turn into a heap.
 | ||
| Flag        = One or more of the mfSub_XXXX flags.
 | ||
| Size        = Size of the requested heap.}
 | ||
| function DosSubSetMem(Base:pointer;Flag,Size:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Destroy a heap. (Memory remains allocated).
 | ||
| 
 | ||
| Base        = Pointer to the heap to destroy.}
 | ||
| function DosSubUnsetMem(Base:pointer):cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         Semaphore related routines
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const   smShared        = $0001;    {Semaphore is shared.}
 | ||
|         smMWWaitAny     = $0002;    {MuxWait only: Wait until a semaphore
 | ||
|                                      is cleared.}
 | ||
|         smMWWaitAll     = $0004;    {MuxWait only: Wait until all semaphores
 | ||
|                                      are cleared.}
 | ||
|         Sem_Indefinite_Wait = -1;   {DosRequestMutExSem blocks the calling
 | ||
|                                      thread indefinitely.}
 | ||
|         Sem_Immediate_Return = 0;   {DosRequestMutExSem returns immediately
 | ||
|                                      without blocking the calling thread.}
 | ||
| (* The following two flag values are only available
 | ||
|    on Warp 3 FP 29, Warp 4 FP 5 and above. *)
 | ||
|         dce_AutoReset   = $1000;    {This will cause the (event) semaphore
 | ||
|                                      to be reset automatically at the time
 | ||
|                                      it is posted.}
 | ||
|         dce_PostOne     = $0800;    {This will cause only one thread to be
 | ||
|                                      posted where multiple threads are
 | ||
|                                      waiting on an event semaphore created
 | ||
|                                      with this attribute. dce_PostOne also
 | ||
|                                      causes the semaphore to be reset
 | ||
|                                      automatically when it is posted.}
 | ||
| (* The following just for compatibility. *)
 | ||
|         dcMW_Wait_Any = smMWWaitAny;
 | ||
|         dcMW_Wait_All = smMWWaitAll;
 | ||
| 
 | ||
| type   PSemRecord=^TSemRecord;
 | ||
|        TSemRecord=record
 | ||
|           Semaphore: THandle;               {Handle of semaphore to link.}
 | ||
|           User: cardinal;
 | ||
|        end;
 | ||
| 
 | ||
|        PSemArray=^TSemArray;
 | ||
|        TSemArray=array[0..$ffff] of TSemRecord;
 | ||
| 
 | ||
| {Create an event semaphore.
 | ||
|  Name       = Optional: Name of semaphore to create. Must start with '\SEM32\.
 | ||
|               Use nil for PChar or '' for string variant for noname. An
 | ||
|               unnamed semaphore is not shared unless the sm_Shared flag is
 | ||
|               set.
 | ||
|  Handle     = Receives handle of semaphore.
 | ||
|  Attr       = One or more of the smXXXX constants.
 | ||
|  State      = Initial state: 0 = Reset (false), 1 = Posted (true).}
 | ||
| function DosCreateEventSem (Name: PChar;var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal; cdecl;
 | ||
| function DosCreateEventSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal;
 | ||
| function DosCreateEventSem (Name: PChar;var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal; cdecl;
 | ||
| function DosCreateEventSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal;
 | ||
| 
 | ||
| {Open a semaphore created by another process or thread.
 | ||
| 
 | ||
|  Name       = Name of semaphore.
 | ||
|  Handle     = Receives handle of semaphore.}
 | ||
| function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| function DosOpenEventSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| {Close an event semaphore.
 | ||
|  Handle     = Handle of a semaphore to close.}
 | ||
| function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Reset an event semaphore: *** probeer *** operation.
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  PostCount  = Number of times DosPostEventSem has been called since last
 | ||
|               reset.
 | ||
| 
 | ||
|  Note:      Returns errorcode 300 if semaphore is already reset.}
 | ||
| function DosResetEventSem(Handle:longint;var PostCount:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosResetEventSem (Handle: THandle; var PostCount: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Post an event semaphore: *** verhoog *** operation.
 | ||
|  Handle     = Handle of semaphore.
 | ||
| 
 | ||
| Note:       Returns errorcode 299 if semaphore is already posted.}
 | ||
| function DosPostEventSem (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Wait until an event semaphore is posted (wait until *** verhoog *** operation).
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  Timeout    = Return with errorcode if timeout milliseconds have past and the
 | ||
|               semaphore is still reset. To return immediately use 0,
 | ||
|               to wait forever use -1.}
 | ||
| function DosWaitEventSem (Handle: THandle; Timeout: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Check if an event semaphore is posted (if a *** verhoog *** operation has been done).
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  Posted     = Receives number of times DosPostEventSem was called since
 | ||
|               the last reset.}
 | ||
| function DosQueryEventSem (Handle: longint; var Posted: longint): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Create a Mutual Exclusion semaphore (mutex).
 | ||
|  Name       = Optional: Name to give to semaphore. Must start with '\SEM32\'.
 | ||
|               Use nil for PChar or '' for string variant to use no name.
 | ||
|               If a name if used the semaphore is shared.
 | ||
|  Handle     = Receives handle of semaphore.
 | ||
|  Attr       = One or more of the smXXXX constants.
 | ||
|  State      = Initial state: (0/false=Not owned, 1/true=Owned.)}
 | ||
| function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal; cdecl;
 | ||
| function DosCreateMutExSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal;
 | ||
| function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal; cdecl;
 | ||
| function DosCreateMutExSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal;
 | ||
| 
 | ||
| {Open a shared mutex semaphore.
 | ||
|  Name       = Name of semaphore to open, always starts with '\SEM32\'.
 | ||
|  Handle     = Receives handle to semaphore.}
 | ||
| function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| function DosOpenMutExSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| {Close a mutex semaphore.
 | ||
|  handle     = Handle of semaphore to close.}
 | ||
| function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Request ownership of a mutex semaphore. If the semaphore is already owned the
 | ||
|  process is halted until the semaphore is released.
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  Timeout    = Return with errorcode if the semaphore is still owned after
 | ||
|               timeout milliseconds; special values are Sem_Indefinite_Wait
 | ||
|               and Sem_Immediate_Return.}
 | ||
| function DosRequestMutExSem (Handle: THandle; Timeout: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Release the ownership of a mutex semaphore.
 | ||
|  Handle     = Handle of semaphore to release.}
 | ||
| function DosReleaseMutExSem (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Query the PID and TIB of the owner of a mutex semaphore.
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  PID        = Receives process ID of owner.
 | ||
|  TID        = Receives thread ID of owner.
 | ||
|  Count      = Number of threads (within and outside current process) waiting
 | ||
|               for ownership of semaphore.}
 | ||
| function DosQueryMutExSem(Handle:longint;var PID,TID,Count:longint):
 | ||
|                                                                cardinal; cdecl;
 | ||
| function DosQueryMutExSem (Handle: THandle; var PID, TID, Count: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| 
 | ||
| {Create a Multiple Wait (MuxWait) semaphore.
 | ||
|  Name       = Optional: Name to give semaphore. Must start with '\SEM32\'.
 | ||
|               Use nil for PChar or '' for string variant to use no name.
 | ||
|               If a name if used the semaphore is shared.
 | ||
|  Handle     = Receives handle of semaphore.
 | ||
|  CSemRec    = Number of semaphores to link muxwait semaphore with.
 | ||
|  SemArray   = Array of semaphore records to link with muxwait semaphore.
 | ||
|  Attr       = One or more of the smXXXX constants.}
 | ||
| function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
 | ||
|   CSemRec: cardinal; var SemArray: TSemArray; Attr: cardinal): cardinal; cdecl;
 | ||
| function DosCreateMuxWaitSem (const Name: string; var Handle: THandle;
 | ||
|                              CSemRec: cardinal; var SemArray: TSemArray;
 | ||
|                              Attr: cardinal): cardinal;
 | ||
| 
 | ||
| {Open a MuxWait semaphore.
 | ||
|  Name       = Name of semaphore to open.
 | ||
|  Handle     = Receives handle of semaphore.}
 | ||
| function DosOpenMuxWaitSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| function DosOpenMuxWaitSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| {Close a MuxWait semaphore.}
 | ||
| function DosCloseMuxWaitSem (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Wait for the MuxWait semaphore to be cleared.
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  Timeout    = Timeout. See above.
 | ||
|  User       = Receives user value of the semaphore that caused the muxwait
 | ||
|               semaphore to be cleared.}
 | ||
| function DosWaitMuxWaitSem(Handle:longint;Timeout:longint;
 | ||
|                                               var User:longint):cardinal;cdecl;
 | ||
| function DosWaitMuxWaitSem (Handle: THandle; Timeout: cardinal;
 | ||
|                                           var User: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Add a semaphore to the MuxWait semaphore.
 | ||
| 
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  SemRec     = The semaphore to add.}
 | ||
| function DosAddMuxWaitSem (Handle: THandle; var SemRec: TSemRecord): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Remove a semaphore from the MuxWait semaphore.
 | ||
|  Handle     = Handle of muxwait semaphore.
 | ||
|  Sem        = Handle of semaphore to remove.}
 | ||
| function DosDeleteMuxWaitSem (Handle, Sem: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Query the semaphores from a MuxWait semaphore.
 | ||
|  Handle     = Handle of semaphore.
 | ||
|  CSemRec    = Input: Size of our array. Output: Number of items in array.
 | ||
|  SemRecs    = Array where TSemRecords are stored.
 | ||
|  Attr       = Flags used by creation of semaphore.}
 | ||
| function DosQueryMuxWaitSem (Handle: longint; var CSemRec: longint;
 | ||
|                    var SemRecs: TSemArray; var Attr: longint): cardinal; cdecl;
 | ||
| function DosQueryMuxWaitSem (Handle: THandle; var CSemRec: cardinal;
 | ||
|                   var SemRecs: TSemArray; var Attr: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         Timing related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| 
 | ||
| type    TDateTime=packed record
 | ||
|             case byte of
 | ||
|                 1:
 | ||
|                     (Hour,
 | ||
|                      Minute,
 | ||
|                      Second,
 | ||
|                      Sec100,
 | ||
|                      Day,
 | ||
|                      Month: byte;
 | ||
|                      Year: word;
 | ||
|                      TimeZone: smallint;
 | ||
|                      WeekDay: byte);
 | ||
|                 2:                        (* For compatibility *)
 | ||
|                     (Hours,
 | ||
|                      Minutes,
 | ||
|                      Seconds,
 | ||
|                      Hundredths,
 | ||
|                      _Day,
 | ||
|                      _Month: byte;
 | ||
|                      _Year: word;
 | ||
|                      _TimeZone: smallint;
 | ||
|                      _WeekDay: byte);
 | ||
|         end;
 | ||
|         PDateTime=^TDateTime;
 | ||
| 
 | ||
| 
 | ||
| {Get the date and time.}
 | ||
| function DosGetDateTime(var Buf:TDateTime):cardinal; cdecl;
 | ||
| 
 | ||
| {Set the date and time.}
 | ||
| function DosSetDateTime(var Buf:TDateTime):cardinal; cdecl;
 | ||
| 
 | ||
| {Start a one shot timer.
 | ||
|  MSec       = Number of miliseconds the timer will run.
 | ||
|  HSem       = Handle of event semaphore that is posted when time has expired.
 | ||
|  TimHandle  = Receives timer handle.}
 | ||
| function DosAsyncTimer (MSec: cardinal; HSem: THandle;
 | ||
|                                       var TimHandle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Start a cyclic timer.
 | ||
|  MSec       = Number of miliseconds the timer will run.
 | ||
|  HSem       = Handle of event semaphore that is posted when time has expired.
 | ||
|  TimHandle  = Receives timer handle.}
 | ||
| function DosStartTimer (MSec: cardinal; HSem: THandle;
 | ||
|                                       var TimHandle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Stop a timer and destroy its handle. There is no need to check for an
 | ||
|  error code if you know your timer handle is correct.}
 | ||
| function DosStopTimer (TimHandle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Get the frequency of the high resolution timer.}
 | ||
| function DosTmrQueryFreq(var Freq:longint):cardinal; cdecl;
 | ||
| function DosTmrQueryFreq(var Freq:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get the current value of the high resolution timer.}
 | ||
| function DosTmrQueryTime(var Time:comp):cardinal; cdecl;
 | ||
| function DosTmrQueryTime (var Time: QWord): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                              DLL specific routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| {Load a DLL in memory if it is not yet loaded.
 | ||
|  ObjName        = When the DLL cannot be found, or one of the DLL's it needs
 | ||
|                   cannot be found, the name of the DLL will be put here.
 | ||
|  ObjLen         = Size of the ObjName result buffer.
 | ||
|  DLLName        = Name of DLL to load. Do not give an extension or a path,
 | ||
|                   just the name. OS/2 will automatically search through the
 | ||
|                   LIBPATH for the DLL.
 | ||
|  Handle         = Receives DLL handle.}
 | ||
| function DosLoadModule (ObjName: PChar; ObjLen: cardinal; DLLName: PChar;
 | ||
|                                          var Handle: THandle): cardinal; cdecl;
 | ||
| function DosLoadModule (var ObjName: string; ObjLen: cardinal;
 | ||
|                          const DLLName: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| {Let OS/2 know that we do not need a DLL anymore. If we were the only process
 | ||
|  using the DLL, it is unloaded.}
 | ||
| function DosFreeModule (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Get the address of a procedure.
 | ||
|  Handle         = DLL handle,
 | ||
|  Ordinal        = Procedure to get address for. 0=Use its name.
 | ||
|  ProcName       = Name of the procedure to query address for. Must be nil
 | ||
|                   for PChar or '' for string variant if Ordinal is nonzero.
 | ||
|  Address        = Receives address of procedure.}
 | ||
| function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal; ProcName: PChar;
 | ||
|                                         var Address: pointer): cardinal; cdecl;
 | ||
| function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal;
 | ||
|                        const ProcName: string; var Address: pointer): cardinal;
 | ||
| 
 | ||
| {Get the handle of a loaded DLL or a loaded executable.
 | ||
|  DLLName        = Name of DLL.
 | ||
|  Handle         = Receives DLL handle if present.}
 | ||
| function DosQueryModuleHandle (DLLName: PChar; var Handle: THandle): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosQueryModuleHandle (const DLLName: string;
 | ||
|                                                 var Handle: THandle): cardinal;
 | ||
| 
 | ||
| {Get the pathname of a loaded DLL or a loaded executable.
 | ||
| 
 | ||
|  Handle         = Handle of DLL.
 | ||
|  NameLen        = Maximum length of char array.
 | ||
|  Name           = PChar (or string) where name is returned.}
 | ||
| function DosQueryModuleName (Handle: THandle; NameLen: cardinal;
 | ||
|                                                  Name: Pchar): cardinal; cdecl;
 | ||
| {function DosQueryModuleName(Handle:THandle;var Name:OpenString):cardinal;}
 | ||
| 
 | ||
| const   pt16bit=0;
 | ||
|         pt32bit=1;
 | ||
| 
 | ||
| {Return if a procedure is either 16 or 32 bit.
 | ||
|  Handle         = Handle of DLL.
 | ||
|  Ordinal        = DLL index number. 0 means use Name.
 | ||
|  Name           = Must be nil for PChar or '' for string variant if Ordinal
 | ||
|                   is zero. Otherwise it contains the procedure name.
 | ||
|  ProcType       = One of the ptXXXX constants.}
 | ||
| function DosQueryProcType (Handle,Ordinal:longint;Name:PChar;
 | ||
|                           var ProcType:longint):cardinal; cdecl;
 | ||
| function DosQueryProcType(Handle,Ordinal:longint;const Name:string;
 | ||
|                           var ProcType:longint):cardinal;
 | ||
| function DosQueryProcType (Handle: THandle; Ordinal: cardinal; Name:PChar;
 | ||
|                           var ProcType: cardinal): cardinal; cdecl;
 | ||
| function DosQueryProcType (Handle: THandle; Ordinal: cardinal; const Name: string;
 | ||
|                           var ProcType: cardinal): cardinal;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                            Resource related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| {Possible resource types:}
 | ||
| 
 | ||
| const   rtPointer       =  1;       {Mouse pointer.}
 | ||
|         rtBitmap        =  2;       {Bitmap}
 | ||
|         rtMenu          =  3;       {Menu template.}
 | ||
|         rtDialog        =  4;       {Dialog template.}
 | ||
|         rtString        =  5;       {A string table.}
 | ||
|         rtFontDir       =  6;       {Font directory.}
 | ||
|         rtFont          =  7;       {A font.}
 | ||
|         rtAccelTable    =  8;       {Accelerator table.}
 | ||
|         rtRcData        =  9;       {Binary data.}
 | ||
|         rtMessage       = 10;       {Error message table.}
 | ||
|         rtDlgInclude    = 11;       {Dialog include filename.}
 | ||
|         rtVKeyTbl       = 12;       {Key to vkey tables.}
 | ||
|         rtKeyTbl        = 13;       {Key to ugl tables.}
 | ||
|         rtCharTbl       = 14;       {Glyph to character tables.}
 | ||
|         rtDisplayInfo   = 15;       {Screen display information.}
 | ||
|         rtFKAShort      = 16;       {Function key area short form.}
 | ||
|         rtFKALong       = 17;       {Function key area long form.}
 | ||
|         rtHelpTable     = 18;       {Help table.}
 | ||
|         rtHelpSubTable  = 19;       {Sub help table.}
 | ||
|         rtFDDir         = 20;       {DBCS unique/font driver directory.}
 | ||
|         rtFD            = 21;       {DBCS unique/font driver.}
 | ||
| 
 | ||
| {Get the address of a resource object.
 | ||
|  Handle         = Handle of DLL (or executable) to get resource from.
 | ||
|  ResType        = One of the rtXXXX constants.
 | ||
|  ResName        = Number associated to resource object by resource compiler.}
 | ||
| function DosGetResource (Handle: THandle; ResType, ResName: cardinal;
 | ||
|                                               var P: pointer): cardinal; cdecl;
 | ||
| 
 | ||
| {Remove a resource object from memory.
 | ||
|  P              = Pointer to resource.}
 | ||
| function DosFreeResource (P: pointer): cardinal; cdecl;
 | ||
| 
 | ||
| {Get the size of a resource object.
 | ||
|  Handle         = Handle to DLL (or executable).
 | ||
|  IDT            = One of the rtXXXX constants.
 | ||
|  IDN            = Number associated to resource object by resource compiler.
 | ||
|  Size           = Receives resource size.}
 | ||
| function DosQueryResourceSize (Handle,IDT,IDN:longint;var Size:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosQueryResourceSize (Handle: THandle; IDT, IDN: cardinal;
 | ||
|                                           var Size: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                    Country and codepage specific routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| type    TCountryCode=record
 | ||
|             Country,            {Country to query info about (0=current).}
 | ||
|             CodePage:cardinal;  {Code page to query info about (0=current).}
 | ||
|         end;
 | ||
|         PCountryCode=^TCountryCode;
 | ||
|         CountryCode=TCountryCode;
 | ||
| 
 | ||
|         TTimeFmt=(Clock12,Clock24);
 | ||
| 
 | ||
|         TCountryInfo=record
 | ||
|             Country,CodePage:cardinal;     {Country and codepage requested.}
 | ||
|             case byte of
 | ||
|             0:(
 | ||
|             DateFormat:cardinal;            {1=ddmmyy 2=yymmdd 3=mmddyy}
 | ||
|             CurrencyUnit:array[0..4] of char;
 | ||
|             ThousandSeparator:char;         {Thousands separator.}
 | ||
|             Zero1:byte;                     {Always zero.}
 | ||
|             DecimalSeparator:char;          {Decimals separator,}
 | ||
|             Zero2:byte;
 | ||
|             DateSeparator:char;             {Date separator.}
 | ||
|             Zero3:byte;
 | ||
|             TimeSeparator:char;             {Time separator.}
 | ||
|             Zero4:byte;
 | ||
|             CurrencyFormat,                 {Bit field:
 | ||
|                                              Bit 0: 0=indicator before value
 | ||
|                                                     1=indicator after value
 | ||
|                                              Bit 1: 1=insert space after
 | ||
|                                                       indicator.
 | ||
|                                              Bit 2: 1=Ignore bit 0&1, replace
 | ||
|                                                       decimal separator with
 | ||
|                                                       indicator.}
 | ||
|             DecimalPlace:byte;              {Number of decimal places used in
 | ||
|                                              currency indication.}
 | ||
|             TimeFormat:TTimeFmt;            {12/24 hour.}
 | ||
|             Reserve1:array[0..1] of word;
 | ||
|             DataSeparator:char;             {Data list separator}
 | ||
|             Zero5:byte;
 | ||
|             Reserve2:array[0..4] of word);
 | ||
|             1:(
 | ||
|             fsDateFmt:cardinal;             {1=ddmmyy 2=yymmdd 3=mmddyy}
 | ||
|             szCurrency:array[0..4] of char; {null terminated currency symbol}
 | ||
|             szThousandsSeparator:array[0..1] of char;
 | ||
|                                             {Thousands separator + #0}
 | ||
|             szDecimal:array[0..1] of char;  {Decimals separator + #0}
 | ||
|             szDateSeparator:array[0..1] of char;
 | ||
|                                             {Date separator + #0}
 | ||
|             szTimeSeparator:array[0..1] of char;
 | ||
|                                             {Time separator + #0}
 | ||
|             fsCurrencyFmt,                  {Bit field:
 | ||
|                                              Bit 0: 0=indicator before value
 | ||
|                                                     1=indicator after value
 | ||
|                                              Bit 1: 1=insert space after
 | ||
|                                                       indicator.
 | ||
|                                              Bit 2: 1=Ignore bit 0&1, replace
 | ||
|                                                       decimal separator with
 | ||
|                                                       indicator}
 | ||
|             cDecimalPlace:byte;             {Number of decimal places used in
 | ||
|                                              currency indication}
 | ||
|             fsTimeFmt:byte;                 {0=12,1=24 hours}
 | ||
|             abReserved1:array[0..1] of word;
 | ||
|             szDataSeparator:array[0..1] of char;
 | ||
|                                             {Data list separator + #0}
 | ||
|             abReserved2:array[0..4] of word);
 | ||
|         end;
 | ||
|         PCountryInfo=^TCountryInfo;
 | ||
|         CountryInfo=TCountryInfo;
 | ||
| 
 | ||
|         TDBCSRange=record
 | ||
|             Start,Stop:byte;
 | ||
|         end;
 | ||
| 
 | ||
|         TDBCSArray=array[0..$ffff] of TDBCSRange;
 | ||
|         PDBCSArray=^TDBCSArray;
 | ||
| 
 | ||
| const   CurrentCountry:TCountryCode=(Country:0;CodePage:0);
 | ||
| 
 | ||
| {Get country specific information.
 | ||
|     Size        = Size of our datastructure. (SizeOf(TCountryInfo))
 | ||
|     ActualSize  = Size of OS/2's datastructure. ActualSize bytes of
 | ||
|                   our TCountryInfo have been filled.}
 | ||
| function DosQueryCtryInfo(Size:longint;var Country:TCountryCode;
 | ||
|                   var Res:TCountryInfo;var ActualSize:longint):cardinal; cdecl;
 | ||
| function DosQueryCtryInfo(Size:cardinal;var Country:TCountryCode;
 | ||
|                  var Res:TCountryInfo;var ActualSize:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Get info about a code page with a DBCS character set.}
 | ||
| function DosQueryDBCSEnv(Size:cardinal;var Country:TCountryCode;
 | ||
|                                                     Buf:PChar):cardinal; cdecl;
 | ||
| 
 | ||
| {Convert a string to uppercase.
 | ||
|     Size        = Length of string.
 | ||
|     Country     = Country and codepage for converting.
 | ||
|     AString     = String to convert.}
 | ||
| function DosMapCase(Size:cardinal;var Country:TCountryCode;
 | ||
|                                                 AString:PChar):cardinal; cdecl;
 | ||
| function DosMapCase(var Country:TCountryCode;
 | ||
|                                                   var AString:string):cardinal;
 | ||
| 
 | ||
| {Get a collate table (a table for comparing which character is smaller and
 | ||
|  which one is greater).
 | ||
|     Size        = Length of the databuffer the program has.
 | ||
|     Country     = Country to query table for. (0,0) is default country and
 | ||
|                   codepage.
 | ||
|     Buf         = Buffer to return table in. It's filled with the sort
 | ||
|                   weights of the ascii code. For example the 128th byte
 | ||
|                   contains the weight for ascii code 128.
 | ||
|     TableLen    = Length of collating table.}
 | ||
| function DosQueryCollate(Size:longint;var Country:TCountryCode;
 | ||
|                           Buf:PByteArray;var TableLen:longint):cardinal; cdecl;
 | ||
| function DosQueryCollate (Size: cardinal; var Country: TCountryCode;
 | ||
|                       Buf:PByteArray; var TableLen: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Get the current codepage. The PWordArray is filled with the current code
 | ||
|  page followed by alternative codepages.}
 | ||
| function DosQueryCP(Size:longint;CodePages:PWordArray;
 | ||
|                                           var ActSize:longint):cardinal; cdecl;
 | ||
| function DosQueryCP (Size: cardinal; CodePages: PWordArray;
 | ||
|                                        var ActSize: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Change the codepage, but only for the current process.}
 | ||
| function DosSetProcessCP (CP: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                        Exception handling related functions
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| 
 | ||
| {Exception constants.}
 | ||
| const
 | ||
|   Xcpt_Continue_Search            = $00000000;
 | ||
|   Xcpt_Continue_Execution         = $ffffffff;
 | ||
|   Xcpt_Continue_Stop              = $00716668;
 | ||
| 
 | ||
|   Xcpt_Signal_Intr                = $1;
 | ||
|   Xcpt_Signal_KillProc            = $3;
 | ||
|   Xcpt_Signal_Break               = $4;
 | ||
| 
 | ||
|   Xcpt_Fatal_Exception            = $c0000000;
 | ||
|   Xcpt_Severity_Code              = $c0000000;
 | ||
|   Xcpt_Customer_Code              = $20000000;
 | ||
|   Xcpt_Facility_Code              = $1fff0000;
 | ||
|   Xcpt_Exception_Code             = $0000ffff;
 | ||
| 
 | ||
|   Xcpt_Unknown_Access             = $00000000;
 | ||
|   Xcpt_Read_Access                = $00000001;
 | ||
|   Xcpt_Write_Access               = $00000002;
 | ||
|   Xcpt_Execute_Access             = $00000004;
 | ||
|   Xcpt_Space_Access               = $00000008;
 | ||
|   Xcpt_Limit_Access               = $00000010;
 | ||
|   Xcpt_Data_Unknown               = $ffffffff;
 | ||
| 
 | ||
|   Xcpt_Guard_Page_Violation       = $80000001;
 | ||
|   Xcpt_Unable_To_Grow_Stack       = $80010001;
 | ||
|   Xcpt_Access_Violation           = $c0000005;
 | ||
|   Xcpt_In_Page_Error              = $c0000006;
 | ||
|   Xcpt_Illegal_Instruction        = $c000001c;
 | ||
|   Xcpt_Invalid_Lock_Sequence      = $c000001d;
 | ||
|   Xcpt_Noncontinuable_Exception   = $c0000024;
 | ||
|   Xcpt_Invalid_Disposition        = $c0000025;
 | ||
|   Xcpt_Unwind                     = $c0000026;
 | ||
|   Xcpt_Bad_Stack                  = $c0000027;
 | ||
|   Xcpt_Invalid_Unwind_Target      = $c0000028;
 | ||
|   Xcpt_Array_Bounds_Exceeded      = $c0000093;
 | ||
|   Xcpt_Float_Denormal_Operand     = $c0000094;
 | ||
|   Xcpt_Float_Divide_By_Zero       = $c0000095;
 | ||
|   Xcpt_Float_Inexact_Result       = $c0000096;
 | ||
|   Xcpt_Float_Invalid_Operation    = $c0000097;
 | ||
|   Xcpt_Float_Overflow             = $c0000098;
 | ||
|   Xcpt_Float_Stack_Check          = $c0000099;
 | ||
|   Xcpt_Float_Underflow            = $c000009a;
 | ||
|   Xcpt_Integer_Divide_By_Zero     = $c000009b;
 | ||
|   Xcpt_Integer_Overflow           = $c000009c;
 | ||
|   Xcpt_Privileged_Instruction     = $c000009d;
 | ||
|   Xcpt_Datatype_Misalignment      = $c000009e;
 | ||
|   Xcpt_Breakpoint                 = $c000009f;
 | ||
|   Xcpt_Single_Step                = $c00000a0;
 | ||
|   Xcpt_Process_Terminate          = $c0010001;
 | ||
|   Xcpt_Async_Process_Terminate    = $c0010002;
 | ||
|   Xcpt_Signal                     = $c0010003;
 | ||
| 
 | ||
|   Context_Control        = $00000001; { SS:ESP, CS:EIP, EFLAGS and EBP set }
 | ||
|   Context_Integer        = $00000002; { EAX, EBX, ECX, EDX, ESI and EDI set }
 | ||
|   Context_Segments       = $00000004; { DS, ES, FS, and GS set }
 | ||
|   Context_Floating_Point = $00000008; { numeric coprocessor state set }
 | ||
|   Context_Full           = Context_Control or
 | ||
|                            Context_Integer or
 | ||
|                            Context_Segments or
 | ||
|                            Context_Floating_Point;
 | ||
| 
 | ||
| const
 | ||
|     MaxExceptionParameters = 4;  { Enough for all system exceptions. }
 | ||
| 
 | ||
| type        PExceptionRegistrationRecord=^TExceptionRegistrationRecord;
 | ||
|             PExceptionReportRecord=^TExceptionReportRecord;
 | ||
|             PContextRecord=^TContextRecord;
 | ||
| 
 | ||
|             TExceptionHandler = function (Report: PExceptionReportRecord;
 | ||
|                                           RegRec: PExceptionRegistrationRecord;
 | ||
|                                           Context: PContextRecord;
 | ||
|                                           DispContext: pointer): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
|             TExceptionRegistrationRecord=record
 | ||
|                 Prev_Structure:PExceptionRegistrationRecord;
 | ||
|                 ExceptionHandler:TExceptionHandler;
 | ||
|             end;
 | ||
| 
 | ||
|             TExceptionReportRecord=record
 | ||
|                 Exception_Num,
 | ||
|                 HandlerFlags:cardinal;
 | ||
|                 Nested_RepRec:PExceptionReportRecord;
 | ||
|                 Address:pointer;
 | ||
|                 ParamCount:cardinal;
 | ||
|                 Parameters:array [0..MaxExceptionParameters] of cardinal;
 | ||
|             end;
 | ||
| 
 | ||
|             TContextRecord=record
 | ||
|                 ContextFlags:cardinal;
 | ||
|                 Env:array[1..7] of cardinal;
 | ||
|                 FPUStack:array[0..7] of extended;
 | ||
|                 Reg_GS,
 | ||
|                 Reg_FS,
 | ||
|                 Reg_ES,
 | ||
|                 Reg_DS,
 | ||
|                 Reg_EDI,
 | ||
|                 Reg_ESI,
 | ||
|                 Reg_EAX,
 | ||
|                 Reg_EBX,
 | ||
|                 Reg_ECX,
 | ||
|                 Reg_EDX,
 | ||
|                 Reg_EBP,
 | ||
|                 Reg_EIP,
 | ||
|                 Reg_CS,
 | ||
|                 Flags,
 | ||
|                 Reg_ESP,
 | ||
|                 Reg_SS:cardinal;
 | ||
|             end;
 | ||
| 
 | ||
| {Warning!!! Never use Presentation Manager functions from exception
 | ||
|  handlers!}
 | ||
| 
 | ||
| {Install an exceptionhandler. The Prev_Structure field of RegRec should be
 | ||
| nil, it will be filled in be OS/2. RegRec must be on the stack: It must be a
 | ||
| local variable.}
 | ||
| function DosSetExceptionHandler(var RegRec:TExceptionRegistrationRecord):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Uninstall an exception handler.}
 | ||
| function DosUnSetExceptionHandler(var RegRec:TExceptionRegistrationRecord
 | ||
|                                   ):cardinal; cdecl;
 | ||
| 
 | ||
| {Trigger an exception.}
 | ||
| function DosRaiseException(var Excpt:TExceptionReportRecord):cardinal; cdecl;
 | ||
| 
 | ||
| {Send a signal to a process.}
 | ||
| function DosSendSignalException(PID,Exception:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Call and remove a set of exceptionhandlers}
 | ||
| function DosUnwindException(var Handler:TExceptionRegistrationRecord;
 | ||
|                             TargetIP:pointer;
 | ||
|                             var RepRec:TExceptionReportRecord):cardinal; cdecl;
 | ||
| 
 | ||
| {Full screen applications can get Ctrl-C and Ctrl-Break focus. For all
 | ||
|  processes sharing one screen, only one can have Ctrl-C focus.
 | ||
|  Enable     = 0 = Release focus, 1 = Get focus.
 | ||
|  Times      = Number of times focus has been get minus number of times it
 | ||
|               has been released.}
 | ||
| function DosSetSignalExceptionFocus(Enable:longint;var Times:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosSetSignalExceptionFocus (Enable: cardinal;
 | ||
|                                          var Times: cardinal): cardinal; cdecl;
 | ||
| function DosSetSignalExceptionFocus (Enable: boolean;
 | ||
|                                          var Times: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Tell OS/2 that if an exception occurs, it must queue it up, until a
 | ||
|  DosExitMustComplete follows. Urgent exceptions still occur. The only
 | ||
|  possible error is that the nesting becomes too high, so error checking
 | ||
|  is only needed in seldom cases.
 | ||
|  Nesting    = Number of DosEnterMustComplete calls minus number of
 | ||
|               DosExitMustComplete calls.}
 | ||
| function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
 | ||
| function DosEnterMustComplete(var Nesting:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Tell OS/2 that it can send exceptions again. See above}
 | ||
| function DosExitMustComplete(var Nesting:longint):cardinal; cdecl;
 | ||
| function DosExitMustComplete(var Nesting:cardinal):cardinal; cdecl;
 | ||
| 
 | ||
| {Tell we want further signal exceptions.
 | ||
|  SignalNum  = Signal nummer to acknowlegde.}
 | ||
| function DosAcknowledgeSignalException (SignalNum: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                            Queue related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| type
 | ||
|  TRequestData = record
 | ||
|                  case boolean of
 | ||
|                   false: (PID0:longint;   {ID of process that wrote element.}
 | ||
|                           Data0:longint); {Information from process
 | ||
|                                           writing the data.}
 | ||
|                   true: (PID, Data: cardinal);
 | ||
|                 end;
 | ||
|  PRequestData = ^TRequestData;
 | ||
| 
 | ||
| {Useful constants for priority parameters.}
 | ||
| const   quFIFO=0;
 | ||
|         quLIFO=1;
 | ||
|         quPriority=2;
 | ||
|         quNoConvert_Address=0;
 | ||
|         quConvert_Address=4;
 | ||
| 
 | ||
| {Close a queue. If the calling process has created the queue, it is
 | ||
|  destroyed. If you can guarantee the handle is correct, there is no need
 | ||
|  to check for error codes.}
 | ||
| function DosCloseQueue (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Create a queue. The process that creates a queue, owns that queue, and is
 | ||
|  the only one who can read from that queue. Other processes can only write
 | ||
|  to that queue. The queuename must have the format '\QUEUES\name.ext' .
 | ||
| 
 | ||
|  Handle         = Receives queue handle.
 | ||
|  Priority       = 0 = Use FIFO system.
 | ||
|                   1 = Use LIFO system.
 | ||
|                   2 = Use priority system.
 | ||
|                   Add 4 to convert addresses of data inserted by 16-bit
 | ||
|                   processes to 32 bit pointers.
 | ||
|  Name           = Name of queue to create.}
 | ||
| function DosCreateQueue (var Handle: THandle; Priority: cardinal;
 | ||
|                          Name: PChar): cardinal; cdecl;
 | ||
| function DosCreateQueue (var Handle: THandle; Priority: cardinal;
 | ||
|                          const Name: string): cardinal;
 | ||
| 
 | ||
| {Open an existing queue. You cannot read from the queue unless you are the
 | ||
|  process that created it. The name must have the format '\QUEUES\name.ext'}
 | ||
| function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
 | ||
|                       Name:PChar):cardinal; cdecl;
 | ||
| function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
 | ||
|                       const Name:string):cardinal;
 | ||
| 
 | ||
| function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
 | ||
|                        Name: PChar): cardinal; cdecl;
 | ||
| function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
 | ||
|                        const Name: string): cardinal;
 | ||
| 
 | ||
| {Read a record from a queue, but do not remove it from the queue.
 | ||
|  Handle         = Handle of queue to read from.
 | ||
|  ReqBuffer      = Receives information about read data.
 | ||
|  DataLen        = Receives length of data read.
 | ||
|  DataPtr        = Receives the address of the data.
 | ||
|  Element        = 0 = Return first element in queue.
 | ||
|                   1 = Return next element in queue. Can be repeated.
 | ||
|                       Current element number is returned here, for use
 | ||
|                       with DosReadQueue.
 | ||
|  Wait           = 0 = Wait until there is a queue element available.
 | ||
|                   1 = Return with an error when queue is empty.
 | ||
|  Priority       = Receives priority of queue record (1..15).
 | ||
|  ASem           = Use NIL if Wait=0, give a handle of a semaphore when
 | ||
|                   Wait=1. The semaphore will be cleared when there is an
 | ||
|                   element inserted it the queue.
 | ||
|                   !! event queue}
 | ||
| function DosPeekQueue(Handle:longint;var ReqBuffer:TRequestData;
 | ||
|                       var DataLen:longint;var DataPtr:pointer;
 | ||
|                       var Element:longint;Wait:longint;
 | ||
|                       var Priority:byte;ASem:longint):cardinal; cdecl;
 | ||
| function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        var Element: cardinal; Wait: boolean;
 | ||
|                        var Priority: byte; ASem: THandle): cardinal; cdecl;
 | ||
| function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        var Element: cardinal; Wait: cardinal;
 | ||
|                        var Priority: byte; ASem: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Empty a queue. You must be the process the created the queue.}
 | ||
| function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Return the number of elements in the queue.}
 | ||
| function DosQueryQueue(Handle:longint;var Count:longint):cardinal; cdecl;
 | ||
| function DosQueryQueue (Handle: THandle; var Count: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Read a record from a queue, but do not remove it from the queue.
 | ||
|  Handle         = Handle of queue to read from.
 | ||
|  ReqBuffer      = Receives information about read data.
 | ||
|  DataLen        = Receives length of data read.
 | ||
|  DataPtr        = Receives the address of the data.
 | ||
|  Element        = 0 = Return first element in queue.
 | ||
|                   Otherwise: Return the element numbered with this.
 | ||
|  Wait           = 0 = Wait until there is a queue element available.
 | ||
|                   1 = Return with an error when queue is empty.
 | ||
|  Priority       = Receives priority of queue record (1..15).
 | ||
|  ASem           = Use NIL if Wait=0, give a handle of a semaphore when
 | ||
|                   Wait=1. The semaphore will be cleared when there is an
 | ||
|                   element inserted it the queue.
 | ||
|                   !! event queue}
 | ||
| function DosReadQueue(Handle:longint;var ReqBuffer:TRequestData;
 | ||
|                       var DataLen:longint;var DataPtr:pointer;
 | ||
|                       Element,Wait:longint;var Priority:byte;
 | ||
|                       ASem:longint):cardinal; cdecl;
 | ||
| function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                       var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                       Element, Wait: cardinal; var Priority: byte;
 | ||
|                       ASem: THandle): cardinal; cdecl;
 | ||
| function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                       var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                       Element: cardinal; Wait: boolean; var Priority: byte;
 | ||
|                       ASem: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Write a data record to a queue.
 | ||
|  Handle         = Handle of queue to write to.
 | ||
|  Request        = Value that will be inserted in the RequestData field when
 | ||
|                   element is read from queue.
 | ||
|  DataLen        = Size of data to write.
 | ||
|  DataBuf        = Data to write.
 | ||
|  Priority       = Priority of data in buffer. Only relevant when queue is
 | ||
|                   created with priority support.}
 | ||
| function DosWriteQueue (Handle: THandle; Request, Datalen: cardinal;
 | ||
|                         var DataBuf; Priority: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         Error handling related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const   deHardErr           = 1;    {Hard errors are enabled, to disable
 | ||
|                                      do not give this switch.}
 | ||
|         deDisableExceptions = 2;    {Exceptions are disabled, to enable
 | ||
|                                      do not give this switch.}
 | ||
| {For compatibility with VP:}
 | ||
|         ferr_DisableHardErr = 0;    {Disable hard error popups.}
 | ||
|         ferr_EnableHardErr  = deHardErr;
 | ||
|         ferr_EnableException = 0;   {Enable exception popups.}
 | ||
|         ferr_DisableException = deDisableExceptions;
 | ||
| 
 | ||
| {Disable the end user notification of hardware errors and exceptions. Users
 | ||
|  can overide this in config.sys. By default, notification is enabled.
 | ||
|  There is no need for error checking if you can guarantee the parameter is
 | ||
|  correct.}
 | ||
| function DosError (Error: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Get information about an error code.
 | ||
|  It cannot fail, so it is written as procedure.
 | ||
| 
 | ||
| Code            = Error code to get info about.
 | ||
| _Class          = Receives the error class.
 | ||
| Action          = Receives the recommended action you should take.
 | ||
| Locus           = Receives what could have caused the error.}
 | ||
| procedure DosErrClass(Code:longint;var _Class,Action,Locus:longint); cdecl;
 | ||
| procedure DosErrClass (Code: cardinal; var _Class, Action, Locus: cardinal);
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                         Message file specific routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| 
 | ||
| type    PInsertTable=^TInsertTable;
 | ||
|         TInsertTable=array[1..9] of PChar;
 | ||
| 
 | ||
| {Get a message from a messagefile.
 | ||
|  Table          = Table of strings to insert.
 | ||
|  TableSize      = Number of strings in table.
 | ||
|  Buf            = Address of buffer to store message in.
 | ||
|  BufSize        = Size of buffer to store message in.
 | ||
|  MsgNumber      = Number of message to get.
 | ||
|  FileName       = Name of file to get message from.
 | ||
|  MsgSize        = The size of the message returned.}
 | ||
| function DosGetMessage(Table:PInsertTable;TableSize:longint;Buf:PChar;
 | ||
|                        BufSize,MsgNumber:longint;FileName:PChar;
 | ||
|                        var MsgSize:longint):cardinal;
 | ||
| function DosGetMessage (Table: PInsertTable; TableSize: cardinal; Buf: PChar;
 | ||
|                         BufSize, MsgNumber: cardinal; FileName: PChar;
 | ||
|                         var MsgSize: cardinal): cardinal;
 | ||
| {And a variant using strings and open arrays.
 | ||
| function DosGetMessage(const Table:array of PString;var Buf:string;
 | ||
|                        BufSize,MsgNumber:longint;const FileName:PChar):cardinal;}
 | ||
| 
 | ||
| {And a variant using strings, but with a PChar buffer, because of long
 | ||
|  messages, and open arrays.
 | ||
| function DosGetMessage(const Table:array of PString;Buf:PChar;
 | ||
|                        BufSize,MsgNumber:longint;const FileName:string;
 | ||
|                        MsgSize:longint):cardinal;}
 | ||
| 
 | ||
| {Insert textstrings into a message. The message must be loaded before with
 | ||
|  DosGetMessage. This function is used when the insert strings are not yet
 | ||
|  known when the message was loaded.
 | ||
|  Table          = Table of strings to insert.
 | ||
|  TableSize      = Number of struings to insert.
 | ||
|  Message        = Message to insert strings into.
 | ||
|  SrcMessageSize = Size of message to insert strings into.
 | ||
|  Buf            = Receives adjusted message.
 | ||
|  BufSize        = Size of your buffer.
 | ||
|  DstMessageSize = Receives size of adjusted message.}
 | ||
| function DosInsertMessage(Table:PInsertTable;TableSize:longint;
 | ||
|                           Message:PChar;SrcMessageSize:longint;
 | ||
|                           Buf:PChar;BufSize:longint;
 | ||
|                           var DstMessageSize:longint):cardinal; cdecl;
 | ||
| function DosInsertMessage (Table: PInsertTable; TableSize: cardinal;
 | ||
|                            Message: PChar; SrcMessageSize: cardinal;
 | ||
|                            Buf: PChar; BufSize: cardinal;
 | ||
|                            var DstMessageSize: cardinal): cardinal; cdecl;
 | ||
| {And a variant using strings and open arrays.
 | ||
| function DosInsertMessage(Table:array of PString;
 | ||
|                           const Message:string;
 | ||
|                           var Buf:openstring):cardinal;}
 | ||
| 
 | ||
| {And a variant using strings, but with a PChar buffer, because of long
 | ||
|  messages, and open arrays.
 | ||
| function DosInsertMessage(Table:array of PString;
 | ||
|                           Message:PChar;SrcMessageSize:longint;
 | ||
|                           Buf:PChar;BufSize:longint;
 | ||
|                           var DstMessageSize:longint):cardinal;}
 | ||
| 
 | ||
| {Write a message to a file.
 | ||
|  Handle         = Handle of file.
 | ||
|  Size           = Size of message.
 | ||
|  Buf            = Buffer where message is located.}
 | ||
| function DosPutMessage (Handle: THandle; Size: cardinal; Buf: PChar): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosPutMessage (Handle: THandle; const Buf: string): cardinal;
 | ||
| 
 | ||
| {Get info about which codepages and languages a messagefile supports.
 | ||
|  Buf            = Receives information.
 | ||
|  BufSize        = Size of buffer.
 | ||
|  FileName       = Filename of message file.
 | ||
|  InfoSize       = Receives size in bytes of the returned info.}
 | ||
| function DosQueryMessageCP(var Buf;BufSize:longint;FileName:PChar;
 | ||
|                             var InfoSize:longint):cardinal;
 | ||
| function DosQueryMessageCP(var Buf;BufSize:longint;const FileName:string;
 | ||
|                             var InfoSize:longint):cardinal;
 | ||
| function DosQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
 | ||
|                             var InfoSize: cardinal): cardinal;
 | ||
| function DosQueryMessageCP (var Buf; BufSize: cardinal; const FileName: string;
 | ||
|                             var InfoSize: cardinal): cardinal;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                            Session specific routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| const
 | ||
| {Start the new session independent or as a child.}
 | ||
|     ssf_Related_Independent = 0;    {Start new session independent
 | ||
|                                      of the calling session.}
 | ||
|     ssf_Related_Child       = 1;    {Start new session as a child
 | ||
|                                      session to the calling session.}
 | ||
| 
 | ||
| {Start the new session in the foreground or in the background.}
 | ||
|     ssf_FgBg_Fore           = 0;    {Start new session in foreground.}
 | ||
|     ssf_FgBg_Back           = 1;    {Start new session in background.}
 | ||
| 
 | ||
| {Should the program started in the new session
 | ||
|  be executed under conditions for tracing?}
 | ||
|     ssf_TraceOpt_None       = 0;    {No trace.}
 | ||
|     ssf_TraceOpt_Trace      = 1;    {Trace with no notification
 | ||
|                                      of descendants.}
 | ||
|     ssf_TraceOpt_TraceAll   = 2;    {Trace all descendant sessions.
 | ||
|                                      A termination queue must be
 | ||
|                                      supplied and Related must be
 | ||
|                                      ssf_Related_Child (=1).}
 | ||
| 
 | ||
| {Will the new session inherit open file handles
 | ||
|  and environment from the calling process.}
 | ||
|     ssf_InhertOpt_Shell     = 0;    {Inherit from the shell.}
 | ||
|     ssf_InhertOpt_Parent    = 1;    {Inherit from the calling process.}
 | ||
| 
 | ||
| {Specifies the type of session to start.}
 | ||
|     ssf_Type_Default        = 0;    {Use program's type.}
 | ||
|     ssf_Type_FullScreen     = 1;    {OS/2 full screen.}
 | ||
|     ssf_Type_WindowableVIO  = 2;    {OS/2 window.}
 | ||
|     ssf_Type_PM             = 3;    {Presentation Manager.}
 | ||
|     ssf_Type_VDM            = 4;    {DOS full screen.}
 | ||
|     ssf_Type_WindowedVDM    = 7;    {DOS window.}
 | ||
| {Additional values for Windows programs}
 | ||
|     Prog_31_StdSeamlessVDM    = 15; {Windows 3.1 program in its
 | ||
|                                      own windowed session.}
 | ||
|     Prog_31_StdSeamlessCommon = 16; {Windows 3.1 program in a
 | ||
|                                      common windowed session.}
 | ||
|     Prog_31_EnhSeamlessVDM    = 17; {Windows 3.1 program in enhanced
 | ||
|                                      compatibility mode in its own
 | ||
|                                      windowed session.}
 | ||
|     Prog_31_EnhSeamlessCommon = 18; {Windows 3.1 program in enhanced
 | ||
|                                      compatibility mode in a common
 | ||
|                                      windowed session.}
 | ||
|     Prog_31_Enh               = 19; {Windows 3.1 program in enhanced
 | ||
|                                      compatibility mode in a full
 | ||
|                                      screen session.}
 | ||
|     Prog_31_Std               = 20; {Windows 3.1 program in a full
 | ||
|                                      screen session.}
 | ||
| 
 | ||
| {Specifies the initial attributes for a OS/2 window or DOS window session.}
 | ||
|     ssf_Control_Visible      = 0;   {Window is visible.}
 | ||
|     ssf_Control_Invisible    = 1;   {Window is invisible.}
 | ||
|     ssf_Control_Maximize     = 2;   {Window is maximized.}
 | ||
|     ssf_Control_Minimize     = 4;   {Window is minimized.}
 | ||
|     ssf_Control_NoAutoClose  = 8;   {Window will not close after
 | ||
|                                      the program has ended.}
 | ||
|     ssf_Control_SetPos   = 32768;   {Use InitXPos, InitYPos,
 | ||
|                                      InitXSize, and InitYSize for
 | ||
|                                      the size and placement.}
 | ||
| 
 | ||
| type    TStatusData=record
 | ||
|             Length:word;                {Length, in bytes, of datastructure.}
 | ||
|             SelectIND:word;             {Determines if the session can be
 | ||
|                                          selected: Don't change/selectable/
 | ||
|                                          not selectable (0/1/2).}
 | ||
|             BondIND:word;               {Determines which section will come
 | ||
|                                          to the foreground when it is
 | ||
|                                          selected: Don't change/child to
 | ||
|                                          foreground when parent selected/
 | ||
|                                          parent to foreground when parent
 | ||
|                                          selected.}
 | ||
|         end;
 | ||
|         PStatusData=^TStatusData;
 | ||
| 
 | ||
| {Queue data structure for synchronously started sessions.}
 | ||
|         TChildInfo = record
 | ||
|             case boolean of
 | ||
|              false:
 | ||
|                (SessionID,
 | ||
|                 Return: word);  {Return code from the child process.}
 | ||
|              true:
 | ||
|                (usSessionID,
 | ||
|                 usReturn: word);     {Return code from the child process.}
 | ||
|         end;
 | ||
|         PChildInfo = ^TChildInfo;
 | ||
| 
 | ||
| 
 | ||
|         TStartData=record
 | ||
|         {Note: to omit some fields, use a length smaller than
 | ||
|          SizeOf(TStartData).}
 | ||
|             Length:word;                {Length, in bytes, of datastructure
 | ||
|                                          (24/30/32/50/60).}
 | ||
|             Related:word;               {Independent/child session (0/1).}
 | ||
|             FgBg:word;                  {Foreground/background (0/1).}
 | ||
|             TraceOpt:word;              {No trace/trace this/trace all
 | ||
|                                          (0/1/2).}
 | ||
|             PgmTitle:PChar;             {Program title.}
 | ||
|             PgmName:PChar;              {Filename to program.}
 | ||
|             PgmInputs:PChar;            {Command parameters (nil allowed).}
 | ||
|             TermQ:PChar;                {System queue. (nil allowed).}
 | ||
|             Environment:PChar;          {Environment to pass (nil allowed).}
 | ||
|             InheritOpt:word;            {Inherit environment from shell/
 | ||
|                                          inherit environment from parent
 | ||
|                                          (0/1).}
 | ||
|             SessionType:word;           {Auto/full screen/window/presentation
 | ||
|                                          manager/full screen Dos/windowed Dos
 | ||
|                                          (0/1/2/3/4/5/6/7).}
 | ||
|             Iconfile:PChar;             {Icon file to use (nil allowed).}
 | ||
|             PgmHandle:cardinal;         {0 or the program handle.}
 | ||
|             PgmControl:word;            {Bitfield describing initial state
 | ||
|                                          of windowed sessions.}
 | ||
|             InitXPos,InitYPos:word;     {Initial top coordinates.}
 | ||
|             InitXSize,InitYSize:word;   {Initial size.}
 | ||
|             Reserved:word;
 | ||
|             ObjectBuffer:PChar;         {If a module cannot be loaded, its
 | ||
|                                          name will be returned here.}
 | ||
|             ObjectBuffLen:cardinal;     {Size of your buffer.}
 | ||
|         end;
 | ||
|         PStartData=^TStartData;
 | ||
|         StartData=TStartData;
 | ||
| 
 | ||
| {Start a new session.
 | ||
|  AStartData         = A startdata record.
 | ||
|  SesID              = Receives session ID of session created.
 | ||
|  PID                = Receives process ID of process created.}
 | ||
| function DosStartSession(var AStartData:TStartData;
 | ||
|                                          var SesID,PID:longint):cardinal;cdecl;
 | ||
| function DosStartSession (var AStartData: TStartData;
 | ||
|                           var SesID, PID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Set the status of a child session.
 | ||
|  SesID              = ID of session.
 | ||
|  AStatus            = Status to set.}
 | ||
| function DosSetSession (SesID: cardinal; var AStatus: TStatusData): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Bring a child session to the foreground.
 | ||
|  SesID              = ID of session.}
 | ||
| function DosSelectSession (SesID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Terminate (a) child session(s).
 | ||
|  Scope              = 0 = Terminate specified session.
 | ||
|                       1 = Terminate all child sessions.
 | ||
|  SesID              = ID of session to terminate (ignored when terminating
 | ||
|                       all).}
 | ||
| function DosStopSession (Scope, SesID: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                      Named/unnamed pipe specific routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| type
 | ||
|   TAvailData = record
 | ||
|     cbPipe,              {Number of bytes in pipe.}
 | ||
|     cbMessage: word;     {Number of bytes in current message.}
 | ||
|   end;
 | ||
| 
 | ||
|   TPipeInfo = record
 | ||
|     cbOut: word;         {Size of outbound data.}
 | ||
|     cbIn: word;          {Size of inbound data.}
 | ||
|     MaxInst: byte;       {Maximum number of instances.}
 | ||
|     CurInst: byte;       {Current number of instances.}
 | ||
|     Name: string;        {Name of the pipe. You can use @Name[1] if
 | ||
|                           you need a PChar to the name; the string is
 | ||
|                           always followed by a zero.}
 | ||
|   end;
 | ||
| 
 | ||
|   TPipeSemState = record
 | ||
|     case boolean of
 | ||
|       false: (Status: byte;
 | ||
|               Flag: byte;
 | ||
|               Key: word;
 | ||
|               Avail: word);
 | ||
|       true:  (fStatus: byte;
 | ||
|               fFlag: byte;
 | ||
|               usKey: word;
 | ||
|               usAvail: word);
 | ||
|   end;
 | ||
|   PPipeSemState = ^TPipeSemState;
 | ||
|   TPipeSemStates = array [0..$FFFF] of TPipeSemState;
 | ||
| 
 | ||
| {Create an unnamed pipe.
 | ||
|  ReadHandle     = Receives handle for reading from pipe.
 | ||
|  WriteHandle    = Receives handle to write to pipe.
 | ||
|  Size           = Size of pipe to create. 0 means default size. If data is
 | ||
|                   written into a pipe that is smaller than the sent data, the
 | ||
|                   writing thread is suspended until the data has been read
 | ||
|                   from the pipe, thus making room for more data to send.}
 | ||
| function DosCreatePipe (var ReadHandle, WriteHandle: THandle;
 | ||
|                         Size: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| const   {np_XXXX constants for openmode.}
 | ||
|         np_Access_Inbound       = $0000;    {Client to server connection.}
 | ||
|         np_Access_Outbound      = $0001;    {Server to client access.}
 | ||
|         np_Access_Duplex        = $0002;    {Two way access.}
 | ||
|         np_Inherit              = $0000;    {Pipe handle is inherited by
 | ||
|                                              child processes.}
 | ||
|         np_NoInherit            = $0080;    {Pipe handle is _not_ inherited by
 | ||
|                                              child processes.}
 | ||
|         np_No_Write_Behind      = $4000;    {Don't allow write behind for
 | ||
|                                              remote pipes.}
 | ||
|         {np_XXXX constants for pipemode.}
 | ||
|         np_Unlimited_Instances  = $00ff;    {Unlimited instances.}
 | ||
|         np_ReadMode_Mesg        = $0100;    {Read the pipe as a message
 | ||
|                                              stream instead of as a byte
 | ||
|                                              stream.}
 | ||
|         np_ReadMode_Message     = np_ReadMode_Mesg;
 | ||
|         np_RMesg                = np_ReadMode_Message;
 | ||
|         np_WriteMode_Mesg       = $0400;    {Write the pipe as a message
 | ||
|                                              stream instead of as a byte
 | ||
|                                              stream.}
 | ||
|         np_WriteMode_Message    = np_WriteMode_Mesg;
 | ||
|         np_Type_Message         = np_WriteMode_Mesg;
 | ||
|         np_WMesg                = np_WriteMode_Mesg;
 | ||
|         np_Wait                 = 0;        { For compatibility only }
 | ||
|         np_NoWait               = $8000;    {Dosread and Doswrite do not
 | ||
|                                              wait is no data can be read or
 | ||
|                                              written; they return with an
 | ||
|                                              error message.}
 | ||
| 
 | ||
| {Create a named pipe.
 | ||
|  Name           = Name of pipe to create.
 | ||
|  Handle         = Receives handle to pipe.
 | ||
|  OpenMode       = A combination of np_XXXX constants for openmode.
 | ||
|  PipeMode       = A combination of np_XXXX constants for pipemode,
 | ||
|                   plus a number within [1..254] which determines the number
 | ||
|                   of instances that can be created to the pipe, or,
 | ||
|                   np_Unlimited_Instance for an unlimited number of
 | ||
|                   instances.
 | ||
|  OutBufSize     = The number of bytes to allocate for the output buffer.
 | ||
|  InBufSize      = The number of bytes to allocate for the input buffer.
 | ||
|  MSec           = The maximum time to wait for an available instance.}
 | ||
| function DosCreateNPipe (Name: PChar; var Handle: THandle; OpenMode, PipeMode,
 | ||
|                          OutBufSize, InBufSize, MSec: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosCreateNPipe (const Name: string; var Handle: THandle; OpenMode,
 | ||
|                          PipeMode, OutBufSize, InBufSize, MSec: cardinal):
 | ||
|                                                                       cardinal;
 | ||
| 
 | ||
| {Makes a procedure call to a duplex message pipe.
 | ||
|  Name           = Name of pipe.
 | ||
|  Input          = Buffer that contains data to be written to the pipe.
 | ||
|  InputSize      = Size of the inputdata.
 | ||
|  Output         = Buffer that contains data to be read from the pipe.
 | ||
|  OutputSize     = Size of the outputbuffer.
 | ||
|  ReadBytes      = Receives number of bytes actually read.
 | ||
|  MSec           = The maximum time to wait for an available instance.}
 | ||
| function DosCallNPipe(Name:PChar;var Input;InputSize:longint;
 | ||
|                       var Output;OutputSize:longint;var ReadBytes:longint;
 | ||
|                       MSec:longint):cardinal; cdecl;
 | ||
| function DosCallNPipe(const Name:string;var Input;InputSize:longint;
 | ||
|                       var Output;OutputSize:longint;var ReadBytes:longint;
 | ||
|                       MSec:longint):cardinal;
 | ||
| function DosCallNPipe (Name: PChar; var Input; InputSize: cardinal;
 | ||
|                        var Output; OutputSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; MSec: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| function DosCallNPipe (const Name: string; var Input; InputSize: cardinal;
 | ||
|                        var Output; OutputSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; MSec: cardinal): cardinal;
 | ||
| 
 | ||
| {Prepare a named pipe for a client process.
 | ||
|  Handle         = Handle that was returned when pipe was created.}
 | ||
| function DosConnectNPipe (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Acknowledges that a client process has closed a named pipe.
 | ||
|  Handle         = Handle that was returned when pipe was created.}
 | ||
| function DosDisconnectNPipe (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| const   np_State_Disconnected   = 1;    {Pipe is disconnected.}
 | ||
|         np_State_Listening      = 2;    {Pipe is listening.}
 | ||
|         np_State_Connected      = 3;    {Pipe is connected.}
 | ||
|         np_State_Closing        = 4;    {Pipe is closing.}
 | ||
| 
 | ||
| {Preview data in a pipe: Read data without removing it.
 | ||
|  Handle         = Handle to named pipe.
 | ||
|  Buffer         = Buffer to receive data in.
 | ||
|  BufSize        = Size of the buffer.
 | ||
|  ReadBytes      = Receives number of bytes put in buffer.
 | ||
|  Avail          = Receives size of available data.
 | ||
|  State          = One of the np_xxxx constants for states.}
 | ||
| function DosPeekNPipe(Handle:longint;var Buffer;BufSize:longint;
 | ||
|                       var ReadBytes:longint;var Avail:TAvailData;
 | ||
|                       var State:longint):cardinal; cdecl;
 | ||
| function DosPeekNPipe (Handle: THandle; var Buffer; BufSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; var Avail: TAvailData;
 | ||
|                        var State: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Get information about a named pipe handle.
 | ||
|  Handle         = Handle to pipe.
 | ||
|  State          = A combination of np_XXXX constants for (!!!) pipemode.}
 | ||
| function DosQueryNPHState(Handle:longint;var State:longint):cardinal; cdecl;
 | ||
| function DosQueryNPHState (Handle: THandle; var State: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Return information about a named pipe.
 | ||
|  Handle         = Handle to pipe.
 | ||
|  InfoLevel      = Level of information wanted (1 or 2 allowed).
 | ||
|  Buffer         = TPipeInfo datastructure for level 1.
 | ||
|                   Unique 4 byte identifier of the client for level 2. Only
 | ||
|                   used for LAN based pipe servers.}
 | ||
| function DosQueryNPipeInfo (Handle: THandle; InfoLevel: cardinal; var Buffer;
 | ||
|                             BufSize: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Return information of local named pipes that are attached to a semaphore.
 | ||
|  SemHandle      = Handle to a shared event or MuxWait semaphore that is
 | ||
|                   attached to a named pipe.
 | ||
|  SemArray       = Array in which for each pipe attached to the semaphore.
 | ||
|  BufSize        = Size of SemArray, in bytes.}
 | ||
| function DosQueryNPipeSemState (SemHandle: THandle; var SemArray;
 | ||
|                                 BufSize: cardinal): cardinal; cdecl;
 | ||
| function DosQueryNPipeSemState (SemHandle: THandle; SemArray: PPipeSemState;
 | ||
|                                            BufSize: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Resets the blocking mode and state of a named pipe.
 | ||
|  Handle         = Handle to named pipe.
 | ||
|  State          = One of the np_XXXX constants for pipemode.}
 | ||
| function DosSetNPHState (Handle: THandle; State: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Attach a shared event semaphore to a local named pipe.
 | ||
|  PipeHandle     = Handle to named pipe.
 | ||
|  SemHandle      = Handle to semaphore.
 | ||
|  Key            = A key that must be different for each named pipe that is
 | ||
|                   attached to the semaphore.}
 | ||
| function DosSetNPipeSem (PipeHandle, SemHandle: THandle; Key: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| 
 | ||
| {Write to a duplex named pipe; then read from it.
 | ||
|  Handle         = Handle to named pipe.
 | ||
|  OutBuf         = The data to write.
 | ||
|  OutSize        = Size of the data to write.
 | ||
|  InBuf          = Receives the read data.
 | ||
|  InSize         = Size of the input buffer.
 | ||
|  ReadBytes      = Number of bytes read from the pipe.}
 | ||
| function DosTransactNPipe(Handle:longint;var OutBuf;OutSize:longint;
 | ||
|                           var InBuf;InSize:longint;
 | ||
|                           var ReadBytes:longint):cardinal; cdecl;
 | ||
| function DosTransactNPipe (Handle: THandle; var OutBuf; OutSize: cardinal;
 | ||
|                            var InBuf; InSize: cardinal;
 | ||
|                            var ReadBytes: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| {Waits until an instance of a named pipe becomes available.
 | ||
|  Name           = Name of named pipe (always starts with '\PIPE\').
 | ||
|  MSec           = Return with an error code if this time has elapsed.}
 | ||
| function DosWaitNPipe (Name: PChar; MSec: cardinal): cardinal; cdecl;
 | ||
| function DosWaitNPipe (const Name: string; MSec: cardinal): cardinal;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                     Virtual device driver related routines.
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| {Open a virtual device driver.
 | ||
|  Name           = Name of virtual device driver.
 | ||
|  Handle         = Receives handle to virtual device driver.}
 | ||
| function DosOpenVDD (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {Request to talk with a virtual device driver.
 | ||
|  Handle         = Handle to virtual device driver.
 | ||
|  SGroup         = Handle to the screen group of a DOS session (may be nil).
 | ||
|  Cmd            = A number which indicates the service you call.
 | ||
|  InSize         = Size of the data to send to the VDD.
 | ||
|  InBuffer       = Buffer which contains the data to send to the VDD.
 | ||
|  OutSize        = Size of the buffer in which the VDD will return data.
 | ||
|  OutBuffer      = Receives the data that the VDD returns.}
 | ||
| function DosRequestVDD (Handle: THandle; SGroup, Cmd: cardinal;
 | ||
|                         InSize: cardinal; var InBuffer;
 | ||
|                         OutSize: cardinal; var OutBuffer): cardinal; cdecl;
 | ||
| 
 | ||
| {Close a virtual device driver.}
 | ||
| function DosCloseVDD (Handle: THandle): cardinal; cdecl;
 | ||
| 
 | ||
| {****************************************************************************
 | ||
| 
 | ||
|                     16 <=> 32 bit support related routines
 | ||
| 
 | ||
| ****************************************************************************}
 | ||
| 
 | ||
| {Convert a 16 bit far pointer to a 32 bit near pointer.
 | ||
|  This procedure needs to be called from assembler.
 | ||
|  This procedure works by mapping an area in your flat address space onto the
 | ||
|  same physical memory address as the selector of the 16 bit far pointer.
 | ||
| 
 | ||
| In:
 | ||
|   eax           Pointer to convert in selector:offset format.
 | ||
| 
 | ||
| Out:
 | ||
|   eax           Returned 32 bit near pointer.}
 | ||
| procedure DosSelToFlat; cdecl;
 | ||
| 
 | ||
| type
 | ||
|  TFarPtr = record
 | ||
|   Sel, Offset: word;
 | ||
|  end;
 | ||
| 
 | ||
| function SelToFlat (AFarPtr: TFarPtr): pointer;
 | ||
| function SelToFlat (AFarPtr: cardinal): pointer;
 | ||
| {The second variant can make use of the register calling convention.}
 | ||
| 
 | ||
| {Convert a 32 bit near pointer to a 16 bit far pointer.
 | ||
|  This procedure needs to be called from assembler.
 | ||
|  This procedure works by allocating a selector at the same physical address
 | ||
|  as the pointer you pass points to.
 | ||
| 
 | ||
| In:
 | ||
|   eax           Pointer to convert in 32 bit near format.
 | ||
| 
 | ||
| Out:
 | ||
|   eax           Returned 16 bit far pointer in selector:offset format.}
 | ||
| procedure DosFlatToSel; cdecl;
 | ||
| 
 | ||
| {typecast result to TFarPtr}
 | ||
| function FlatToSel (APtr: pointer): cardinal;
 | ||
| 
 | ||
| {Allocate Count dwords in a memory block unique in each thread. A maximum
 | ||
|  of 8 dwords can be allocated at a time, the total size of the thread local
 | ||
|  memory area is 128 bytes; FPC 1.1+ uses one dword from this for internal
 | ||
|  multi-threading support, leaving 124 bytes to programmers.}
 | ||
| function DosAllocThreadLocalMemory (Count: cardinal; var P: pointer): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| {Deallocate a previously allocated space in the thread local memory area.}
 | ||
| function DosFreeThreadLocalMemory (P: pointer): cardinal; cdecl;
 | ||
| 
 | ||
| const
 | ||
| { Values for DosQueryRASInfo Index parameter }
 | ||
|   sis_MMIOAddr = 0;
 | ||
|   sis_MEC_Table = 1;
 | ||
|   sis_Sys_Log = 2;
 | ||
| { The following one for compatibility only }
 | ||
|   SPU_SIS_MEC_TABLE = sis_MEC_Table;
 | ||
| 
 | ||
| { Bit flags for the SYSLOG status word. }
 | ||
|   lf_LogEnable = 1;     { Logging enabled }
 | ||
|   lf_LogAvailable = 2;  { Logging available }
 | ||
| 
 | ||
| { DosQueryRASInfo returns information about active trace event recording
 | ||
|   and System Logging facility from the Global Information Segment (InfoSegGDT)
 | ||
|   dump.}
 | ||
| { Parameters
 | ||
|   * Index - one of the sis_* values:
 | ||
|     sis_MEC_Table - return the address of the table of actively traced major
 | ||
|       event codes in the InfoSegGDT. The table is 32 bytes long, each bit
 | ||
|       represents each major event code from 0 to 255.
 | ||
|     sis_Sys_Log - return the address of the SYSLOG status word from
 | ||
|       the InfoSegGDT. The status may contain a combination of lf_Log* flags
 | ||
|       defined above.}
 | ||
| { Possible return codes:
 | ||
|    0 - No_Error
 | ||
|    5 - Error_Access_Denied
 | ||
|   87 - Error_Invalid_Parameter}
 | ||
| function DosQueryRASInfo (Index: cardinal; var PBuffer: pointer): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| 
 | ||
| const
 | ||
| { Logging constants }
 | ||
|   ErrLog_Service = 1;
 | ||
|   ErrLog_Version = 1;
 | ||
| 
 | ||
| { LogRecord status bits }
 | ||
|   lf_Bit_ProcName = 1;    {used to indicate whether the current error log}
 | ||
|                           {entry packet contains space in which the error}
 | ||
|                           {logging facility can place a long process name}
 | ||
|                           {("on" indicates YES, "off" indicates NO)      }
 | ||
|   lf_Bit_Origin_256 = 2;  {used to indicate whether the current error log }
 | ||
|                           {entry packet contains an 8 byte originator name}
 | ||
|                           {or a 256 byte originator name ("on" indicates  }
 | ||
|                           {a 256 byte originator name, "off" indicates an }
 | ||
|                           {8 byte originator name)                        }
 | ||
|   lf_Bit_DateTime = 4;    {used to indicate that the caller has placed time}
 | ||
|                           {and date values in the Error Log entry packet   }
 | ||
|                           {and does not wish to have those values modified }
 | ||
|                           {during the logging process ("on" indicates that }
 | ||
|                           {the error log entry packet already contains time}
 | ||
|                           {and date values, "off" indicates the packet does}
 | ||
|                           {not already contain time and date values)       }
 | ||
|   lf_Bit_Suspend = 8;
 | ||
|   lf_Bit_Resume = 16;
 | ||
|   lf_Bit_Redirect = 32;
 | ||
|   lf_Bit_GetStatus = 64;
 | ||
|   lf_Bit_Register = 128;
 | ||
|   lf_Bit_Remote_Fail = 256;
 | ||
| 
 | ||
| type
 | ||
| { Log entry record header for OS/2 2.x and above used    }
 | ||
| { by 32-bit device drivers and callers of LogAddEntries. }
 | ||
|   TLogRecord = record
 | ||
|     Len: word;          { length of this record (including the Len field) }
 | ||
|     Rec_ID: word;       { record ID }
 | ||
|     Status: cardinal;   { record status bits (see lf_Bit_* constants) }
 | ||
|     Qualifier: array [1..4] of char;    { qualifier tag }
 | ||
|     Reserved: cardinal;
 | ||
|     Time: cardinal;     { hours, minutes, seconds, hundreds }
 | ||
|     Date: cardinal;     { day, month, year (stored as word) }
 | ||
|     case byte of
 | ||
|      0: (Data: array [1..3400] of char); { variable data (up to 3400 bytes); }
 | ||
|                                          { beginning of this area must match }
 | ||
|                                          { one of the following patterns     }
 | ||
|      1: (Originator256: array [0..255] of char;     {Originator - if the flag }
 | ||
|                                                     {lf_Bit_Origin_256 is set }
 | ||
|          ProcessName_O256: array [1..260] of char;  {if lf_Bit_ProcName is set}
 | ||
|          FormatDLLName_O256_ProcName: array [1..12] of char;  {ASCIIZ DLL name}
 | ||
|          Data_O256_ProcName: array [1..3400] of char);        {Variable data  }
 | ||
|      2: (Originator256b: array [0..255] of char;
 | ||
|          FormatDLLName_O256: array [1..12] of char;
 | ||
|          Data_O256: array [1..3400] of char);
 | ||
|      3: (Originator8: array [0..7] of char;      {Originator - if flag     }
 | ||
|                                                  {lf_Bit_Origin_256 clear  }
 | ||
|          ProcessName_O8: array [1..260] of char; {if lf_Bit_ProcName is set}
 | ||
|          FormatDLLName_O8_ProcName: array [1..12] of char;
 | ||
|          Data_O8_ProcName: array [1..3400] of char);
 | ||
|      4: (Originator8b: array [0..7] of char;
 | ||
|          FormatDLLName_O8: array [1..12] of char;
 | ||
|          Data_O8: array [1..3400] of char);
 | ||
|   end;
 | ||
|   LogRecord = TLogRecord;
 | ||
|   PLogRecord = ^TLogRecord;
 | ||
| 
 | ||
| { Format of buffer sent to LogAddEntries }
 | ||
|   TLogEntryRec = record
 | ||
|     Version: word;                      {this version is 1}
 | ||
|     Count: word;                        {number of log records in this buffer}
 | ||
|     LogRec: array [0..0] of TLogRecord; {repeated count times}
 | ||
|   end;
 | ||
|   LogEntryRec = TLogEntryRec;
 | ||
|   PLogEntryRec = ^TLogEntryRec;
 | ||
| 
 | ||
| { Logging facility functions }
 | ||
| { Open a connection to the system error logging facility (through the system
 | ||
|   logging service device driver). }
 | ||
| { Possible return codes:
 | ||
|   0 .......... success
 | ||
|   non-zero ... facility not available }
 | ||
| function LogOpen (var Handle: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| { Close the connection to the to the system error logging facility. }
 | ||
| { Possible return codes:
 | ||
|   0 .......... success
 | ||
|   non-zero ... failure (possible reason - facility not open)}
 | ||
| function LogClose (Handle: cardinal): cardinal; cdecl;
 | ||
| 
 | ||
| { Add error log entries to the internal error log buffer maintained by
 | ||
|   the system logging service device driver.}
 | ||
| { Parameters:
 | ||
|   Handle - handle returned by previous LogOpen
 | ||
|   Service - specifies the class of logging facility:
 | ||
|     0 ........... reserved
 | ||
|     1 ........... error logging
 | ||
|     2 - $FFFF ... reserved
 | ||
|   LogEntries - buffer containing a variable length error log entry. The first
 | ||
|     word of the buffer contains the number of packets in the error log entry.
 | ||
|     Multiple error log packets (LogRec structure) can be included within
 | ||
|     a single error log entry buffer. If multiple packets are included within
 | ||
|     a buffer, each individual packet should be aligned on a double word
 | ||
|     boundary.
 | ||
| 
 | ||
|     Version - packet revision number. Can be used to distinguish error logging
 | ||
|               packets that are intended to be handled by different revisions
 | ||
|               of the LogAddEntries API. For the initial version of the API
 | ||
|               (all OS/2 versions from OS/2 v2.0 up to WSeB and eComStation),
 | ||
|               this field should be set to a value of 1. This field is included
 | ||
|               in the packet to support future backward compatibility.
 | ||
|     Count - number of separate error log entry packets contained within
 | ||
|             the user's buffer
 | ||
|     Len - length of this error log entry packet (LogRec) within the user's
 | ||
|           error log entry buffer in bytes (this length includes the length
 | ||
|           of all the error log entry packet control fields and the size
 | ||
|           of the error log entry text). To support efficient logging execution,
 | ||
|           this length should be a multiple of 4 bytes (i.e. if necessary
 | ||
|           the user should pad the error log entry packet).
 | ||
|     Rec_ID - error log record ID for the current error log entry
 | ||
|              (ID registration will be statically registered by the OS/2
 | ||
|              development organization)
 | ||
|     Status - status flags (two byte flag holder containing three single bit
 | ||
|              flags lf_Bit_* - all the other 29 bits in status flags
 | ||
|              are considered reserved at this time and will be zeroed by
 | ||
|              the LogAddEntries API)
 | ||
|     Qualifier - qualifier name is a secondary name field that is provided
 | ||
|                 by the caller
 | ||
|     Reserved - four byte reserved field
 | ||
|     Time - time of logging, filled in by the system error logging facility
 | ||
|            (unless lf_Bit_DateTime status flag is set to "on", indicating
 | ||
|            that the caller has preset a time value)
 | ||
|     Date - date of logging, filled in by the system error logging facility
 | ||
|            (unless lf_Bit_DateTime status flag is set to "on", indicating
 | ||
|            that the caller has preset a date value)
 | ||
|     Originator* - originator name (8 or 256 characters depending on Status),
 | ||
|                   a primary name field provided by the caller
 | ||
|     ProcName* - process name (0 or 260 characters), an optional long process
 | ||
|                 name field that will be filled in by the error logging facility
 | ||
|                 if the field is provided by the caller in the error log entry
 | ||
|                 packet
 | ||
|     FormatDLLName* - formatting DLL module name (optional); the optional name
 | ||
|                      of a DLL module that houses a formatting routine that
 | ||
|                      recognizes this type of error log entry and can format it
 | ||
|                      for display by the SYSLOG utility. The name is specified
 | ||
|                      as an ASCIIZ string that can be up to eight characters
 | ||
|                      in length. If no module name is specified in this field,
 | ||
|                      then SYSLOG will display the data portion of the error log
 | ||
|                      entry as a hexadecimal dump.
 | ||
|     Data* - error log entry data (up to 3400 characters / bytes); an optional
 | ||
|             variable length set of data that can be supplied by the caller
 | ||
|             (the format of the string is under the control of the caller)
 | ||
| }
 | ||
| { Possible return codes:
 | ||
|     0        - success
 | ||
|     non-zero - failure (invalid log type, facility unavailable, facility
 | ||
|                suspended, facility not open, error log buffer temporarily full)
 | ||
| }
 | ||
| function LogAddEntries (Handle: cardinal; Service: cardinal;
 | ||
|                                      LogEntries: PLogEntryRec): cardinal; cdecl;
 | ||
| 
 | ||
| function LogAddEntries (Handle: cardinal; Service: cardinal;
 | ||
|                                  var LogEntries: TLogEntryRec): cardinal; cdecl;
 | ||
| 
 | ||
| {***************************************************************************}
 | ||
| implementation
 | ||
| {***************************************************************************}
 | ||
| 
 | ||
| function DosCreateThread(var TID:longint;Address:TThreadEntry;
 | ||
|                           aParam:pointer;Flags:longint;
 | ||
|                           StackSize:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 311;
 | ||
| 
 | ||
| function DosCreateThread (var TID: cardinal; Address: TThreadEntry;
 | ||
|                           aParam: pointer; Flags: cardinal;
 | ||
|                           StackSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 311;
 | ||
| 
 | ||
| function DosCreateThread(var TID:longint;Address:pointer;
 | ||
|                         AParam:Pointer;Flags,StackSize:longint):cardinal;cdecl;
 | ||
| external 'DOSCALLS' index 311;
 | ||
| 
 | ||
| function DosCreateThread (var TID: cardinal; Address: pointer;
 | ||
|                  AParam: Pointer; Flags, StackSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 311;
 | ||
| 
 | ||
| function DosSuspendThread (TID:cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 238;
 | ||
| 
 | ||
| function DosResumeThread (TID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 237;
 | ||
| 
 | ||
| function DosKillThread (TID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 111;
 | ||
| 
 | ||
| function DosWaitThread(var TID:longint;Option:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 349;
 | ||
| 
 | ||
| function DosWaitThread (var TID: cardinal; Option: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 349;
 | ||
| 
 | ||
| function DosEnterCritSec: cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 232;
 | ||
| 
 | ||
| function DosExitCritSec: cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 233;
 | ||
| 
 | ||
| procedure DosExit (Action, Result: cardinal); cdecl;
 | ||
| external 'DOSCALLS' index 234;
 | ||
| 
 | ||
| procedure DosGetInfoBlocks(var ATIB:PThreadInfoBlock;
 | ||
|                            var APIB:PProcessInfoBlock); cdecl;
 | ||
| external 'DOSCALLS' index 312;
 | ||
| 
 | ||
| procedure DosGetInfoBlocks(PATIB:PPThreadInfoBlock;
 | ||
|                            PAPIB:PPProcessInfoBlock); cdecl;
 | ||
| external 'DOSCALLS' index 312;
 | ||
| 
 | ||
| procedure DosSleep (MSec: cardinal); cdecl;
 | ||
| external 'DOSCALLS' index 229;
 | ||
| 
 | ||
| function DosBeep (Freq, MS: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 286;
 | ||
| 
 | ||
| function DosDebug (DebugBuf: PDbgBuf): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 317;
 | ||
| 
 | ||
| function DosDebug (var APDbgBuf: TDbgBuf): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 317;
 | ||
| 
 | ||
| function DosExitList (OrderCode: cardinal; Proc: TExitProc): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 296;
 | ||
| 
 | ||
| function DosExecPgm (ObjName: PChar; ObjLen: longint; ExecFlag: cardinal;
 | ||
|                      Args, Env: PByteArray; var Res: TResultCodes;
 | ||
|                      FileName:PChar): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 283;
 | ||
| 
 | ||
| function DosExecPgm (var ObjName: string; Execflag: cardinal;
 | ||
|                      Args, Env: PByteArray; var Res: TResultCodes;
 | ||
|                      const FileName: string): cardinal;
 | ||
| var T,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosExecPgm:=DosExecPgm(@T2,SizeOf(T2),ExecFlag,Args,Env,Res,@T);;
 | ||
|     ObjName:=StrPas(@T2);
 | ||
| end;
 | ||
| 
 | ||
| function DosWaitChild(Action,Option:longint;var Res:TResultCodes;
 | ||
|                       var TermPID:longint;PID:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 280;
 | ||
| 
 | ||
| function DosWaitChild (Action, Option: cardinal; var Res: TResultCodes;
 | ||
|                        var TermPID: cardinal; PID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 280;
 | ||
| 
 | ||
| function DosSetPriority (Scope, TrClass: cardinal; Delta: longint;
 | ||
|                                             PortID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 236;
 | ||
| 
 | ||
| function DosKillProcess (Action, PID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 235;
 | ||
| 
 | ||
| function DosQueryAppType(FileName:PChar;var Flags:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 323;
 | ||
| 
 | ||
| function DosQueryAppType (FileName: PChar; var Flags: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 323;
 | ||
| 
 | ||
| function DosDevConfig (var DevInfo: byte; Item: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 231;
 | ||
| 
 | ||
| function DosSetFileLocks (Handle: THandle; var Unlock, Lock: TFileLock;
 | ||
|                           Timeout, Flags: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 428;
 | ||
| 
 | ||
| function DosProtectSetFileLocks (Handle: THandle; var Unlock, Lock: TFileLock;
 | ||
|                                  Timeout, Flags: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 639;
 | ||
| 
 | ||
| function DosCancelLockRequest (Handle: THandle; var Lock: TFileLock): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 429;
 | ||
| 
 | ||
| function DosOpen(FileName:PChar;var Handle,Action:longint;
 | ||
|                  InitSize,Attrib,OpenFlags,FileMode:longint;
 | ||
|                  EA:PEAOp2):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 273;
 | ||
| 
 | ||
| function DosOpen (FileName: PChar; var Handle: THandle; var Action: cardinal;
 | ||
|                   InitSize, Attrib, OpenFlags, FileMode: cardinal;
 | ||
|                   EA: PEAOp2): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 273;
 | ||
| 
 | ||
| function DosCreate (FileName: PChar; var Handle: THandle;
 | ||
|                     Attrib, OpenMode: cardinal): cardinal;
 | ||
| 
 | ||
| var Action: cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosCreate:=DosOpen(FileName,Handle,Action,0,Attrib,18,OpenMode,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpen (FileName: PChar; var Handle: THandle;
 | ||
|                   Attrib, OpenMode: cardinal): cardinal;
 | ||
| 
 | ||
| var Action: cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosOpen:=DosOpen(FileName,Handle,Action,0,Attrib,1,OpenMode,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpen(const FileName:string;var Handle,Action:longint;
 | ||
|                  InitSize,Attrib,OpenFlags,OpenMode:longint;
 | ||
|                  EA:PEAOp2):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosOpen:=DosOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpen (const FileName: string; var Handle: THandle;
 | ||
|                   var Action: cardinal; InitSize, Attrib, OpenFlags: cardinal;
 | ||
|                   OpenMode: cardinal; EA: PEAOp2): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosOpen:=DosOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreate (const FileName: string; var Handle: THandle;
 | ||
|                     Attrib, OpenMode: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
|     Action:cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosCreate:=DosOpen(@T,Handle,Action,0,Attrib,18,OpenMode,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpen (const FileName: string; var Handle: THandle;
 | ||
|                   Attrib, OpenMode: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
|     Action:cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosOpen:=DosOpen(@T,Handle,Action,0,Attrib,1,OpenMode,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectOpen (FileName: PChar; var Handle: longint;
 | ||
|                          var Action: longint; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: longint; ea: PEAOp2;
 | ||
|                               var FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 637;
 | ||
| 
 | ||
| function DosProtectOpen (FileName: PChar; var Handle: THandle;
 | ||
|                          var Action: cardinal; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | ||
|                               var FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 637;
 | ||
| 
 | ||
| function DosProtectOpen (const FileName: string; var Handle: longint;
 | ||
|                          var Action: longint; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: longint; ea: PEAOp2;
 | ||
|                                var FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosProtectOpen:=DosProtectOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA,FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectOpen (const FileName: string; var Handle: THandle;
 | ||
|                          var Action: cardinal; InitSize, Attrib,
 | ||
|                          OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | ||
|                                var FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosProtectOpen:=DosProtectOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA,FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosClose (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 257;
 | ||
| 
 | ||
| function DosProtectClose (Handle: THandle;
 | ||
|                                    FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 638;
 | ||
| 
 | ||
| function DosRead(Handle:longint;var Buffer;Count:longint;
 | ||
|                  var ActCount:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 281;
 | ||
| 
 | ||
| function DosRead (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                   var ActCount: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 281;
 | ||
| 
 | ||
| function DosProtectRead (Handle: longint; var Buffer; Count: longint;
 | ||
|            var ActCount: longint; FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 641;
 | ||
| 
 | ||
| function DosProtectRead (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|           var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 641;
 | ||
| 
 | ||
| function DosWrite(Handle:longint;var Buffer;Count:longint;
 | ||
|                   var ActCount:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 282;
 | ||
| 
 | ||
| function DosWrite (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                    var ActCount: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 282;
 | ||
| 
 | ||
| function DosProtectWrite (Handle: longint; var Buffer; Count: longint;
 | ||
|                           var ActCount: longint;
 | ||
|                           FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 642;
 | ||
| 
 | ||
| function DosProtectWrite (Handle: THandle; var Buffer; Count: cardinal;
 | ||
|                           var ActCount: cardinal;
 | ||
|                           FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 642;
 | ||
| 
 | ||
| function DosSetFilePtr(Handle:longint;Pos:longint;Method:cardinal;
 | ||
|                        var PosActual:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 256;
 | ||
| 
 | ||
| function DosSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
 | ||
|                         var PosActual: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 256;
 | ||
| 
 | ||
| function DosSetFilePtr (Handle: THandle; Pos: longint): cardinal;
 | ||
| 
 | ||
| var PosActual: cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosSetFilePtr:=DosSetFilePtr(Handle,Pos,0,PosActual);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectSetFilePtr (Handle: longint; Pos, Method: longint;
 | ||
|                                var PosActual: longint;
 | ||
|                                FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 621;
 | ||
| 
 | ||
| function DosProtectSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
 | ||
|                                var PosActual: cardinal;
 | ||
|                                FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 621;
 | ||
| 
 | ||
| function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | ||
|                                           FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| var PosActual:cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosProtectSetFilePtr:=DosProtectSetFilePtr(Handle,Pos,0,PosActual,
 | ||
|                                                              FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosGetFilePtr(Handle:longint;var PosActual:longint):cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosGetFilePtr:=DosSetFilePtr(Handle,0,1,PosActual);
 | ||
| end;
 | ||
| 
 | ||
| function DosGetFilePtr (Handle: THandle; var PosActual: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosGetFilePtr:=DosSetFilePtr(Handle,0,1,PosActual);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectGetFilePtr (Handle: longint;
 | ||
|                  var PosActual: longint; FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosProtectGetFilePtr := DosProtectSetFilePtr (Handle, 0, 1, PosActual,
 | ||
|                                                              FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectGetFilePtr (Handle: THandle;
 | ||
|                 var PosActual: cardinal; FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosProtectGetFilePtr := DosProtectSetFilePtr (Handle, 0, 1, PosActual,
 | ||
|                                                              FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosSetFileSize (Handle: THandle; Size: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 272;
 | ||
| 
 | ||
| function DosProtectSetFileSize (Handle: THandle; Size: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 640;
 | ||
| 
 | ||
| function DosResetBuffer (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 254;
 | ||
| 
 | ||
| function DosDupHandle (Handle: THandle; var Duplicate: THandle): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 260;
 | ||
| 
 | ||
| function DosQueryFHState(Handle:longint;var FileMode:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 276;
 | ||
| 
 | ||
| function DosQueryFHState (Handle: THandle; var FileMode: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 276;
 | ||
| 
 | ||
| function DosProtectQueryFHState (Handle: THandle; var FileMode: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 645;
 | ||
| 
 | ||
| function DosSetFHState (Handle: THandle; FileMode: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 221;
 | ||
| 
 | ||
| function DosProtectSetFHState (Handle: THandle; FileMode: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 644;
 | ||
| 
 | ||
| function DosQueryHType(Handle:longint;var HandType:longint;
 | ||
|                        var Attr:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 224;
 | ||
| 
 | ||
| function DosQueryHType (Handle: THandle; var HandType: cardinal;
 | ||
|                         var Attr: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 224;
 | ||
| 
 | ||
| function DosEditName (MetaLevel: cardinal; Source, Edit: PChar;
 | ||
|                       Target: PChar; TargetLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 261;
 | ||
| 
 | ||
| function DosEditName (MetaLevel: cardinal; const Source, Edit: string;
 | ||
|                       var Target: string): cardinal;
 | ||
| 
 | ||
| var T,T2,T3:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Source);
 | ||
|     StrPCopy(@T2,Edit);
 | ||
|     DosEditName:=DosEditName(MetaLevel,@T,@T2,@T3,SizeOf(T3));
 | ||
|     Target:=StrPas(@T3);
 | ||
| end;
 | ||
| 
 | ||
| function DosMove(OldFile,NewFile:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 271;
 | ||
| 
 | ||
| function DosMove(const OldFile,NewFile:string):cardinal;
 | ||
| 
 | ||
| var T,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,OldFile);
 | ||
|     StrPCopy(@T2,NewFile);
 | ||
|     DosMove:=DosMove(@T,@T2);
 | ||
| end;
 | ||
| 
 | ||
| function DosCopy (OldFile, NewFile: PChar; Option: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 258;
 | ||
| 
 | ||
| function DosCopy (const OldFile, NewFile: string; Option: cardinal): cardinal;
 | ||
| 
 | ||
| var T,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,OldFile);
 | ||
|     StrPCopy(@T2,NewFile);
 | ||
|     DosCopy:=DosCopy(@T,@T2,Option);
 | ||
| end;
 | ||
| 
 | ||
| function DosDelete(FileName:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 259;
 | ||
| 
 | ||
| function DosDelete(const FileName:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosDelete:=DosDelete(@T);
 | ||
| end;
 | ||
| 
 | ||
| function DosForceDelete(FileName:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 110;
 | ||
| 
 | ||
| function DosForceDelete(const FileName:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosForceDelete:=DosForceDelete(@T);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreateDir(Name:PChar;EA:PEAOp2):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 270;
 | ||
| 
 | ||
| function DosCreateDir(Name:PChar):cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosCreateDir:=DosCreateDir(Name,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreateDir(const Name:string;EA:PEAOp2):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosCreateDir:=DosCreateDir(@T,EA);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreateDir(const Name:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosCreateDir:=DosCreateDir(@T,nil);
 | ||
| end;
 | ||
| 
 | ||
| function DosDeleteDir(Name:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 226;
 | ||
| 
 | ||
| function DosDeleteDir(const Name:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosDeleteDir:=DosDeleteDir(@T);
 | ||
| end;
 | ||
| 
 | ||
| function DosSetDefaultDisk(DiskNum:cardinal):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 220;
 | ||
| 
 | ||
| procedure DosQueryCurrentDisk(var DiskNum:longint;var Logical:longint); cdecl;
 | ||
| external 'DOSCALLS' index 275;
 | ||
| 
 | ||
| procedure DosQueryCurrentDisk (var DiskNum: cardinal; var Logical: cardinal);
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 275;
 | ||
| 
 | ||
| function DosSetCurrentDir(Name:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 255;
 | ||
| 
 | ||
| function DosSetCurrentDir(const Name:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosSetCurrentDir:=DosSetCurrentDir(@T);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryCurrentDir(DiskNum:longint;var Buffer;
 | ||
|                             var BufLen:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 274;
 | ||
| 
 | ||
| function DosQueryCurrentDir (DiskNum: cardinal; var Buffer;
 | ||
|                              var BufLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 274;
 | ||
| 
 | ||
| function DosQueryCurrentDir (DiskNum: cardinal; var Buffer: string): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
|     L: cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     L:=255;
 | ||
|     DosQueryCurrentDir:=DosQueryCurrentDir(DiskNum,T,L);
 | ||
|     Buffer:=StrPas(@T);
 | ||
| end;
 | ||
| 
 | ||
| function DosDevIOCtl(Handle,Category,Func:longint;var Params;
 | ||
|                      ParamLen:longint;var ParamSize:longint;
 | ||
|                 var Data;DataLen:longint;var DataSize:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 284;
 | ||
| 
 | ||
| function DosDevIOCtl (Handle: THandle; Category, Func: cardinal; var Params;
 | ||
|                       ParamLen: cardinal; var ParamSize: cardinal;
 | ||
|                       var Data; DataLen: cardinal; var DataSize: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 284;
 | ||
| 
 | ||
| function DosFindFirst (FileMask: PChar; var Handle: THandle; Attrib: cardinal;
 | ||
|                        AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | ||
|                        var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 264;
 | ||
| 
 | ||
| function DosFindFirst (const FileMask: string; var Handle: THandle;
 | ||
|                        Attrib: cardinal; AFileStatus: PFileStatus;
 | ||
|                        FileStatusLen: cardinal; var Count: cardinal;
 | ||
|                        InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileMask);
 | ||
|     DosFindFirst:=DosFindFirst(@T,Handle,Attrib,AFileStatus,FileStatusLen,
 | ||
|      Count,InfoLevel);
 | ||
| end;
 | ||
| 
 | ||
| function DosFindNext (Handle: THandle; AFileStatus: PFileStatus;
 | ||
|                       FileStatusLen: cardinal; var Count: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 265;
 | ||
| 
 | ||
| function DosFindClose (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 263;
 | ||
| 
 | ||
| function DosQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                            AFileStatus: PFileStatus;
 | ||
|                                      FileStatusLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 279;
 | ||
| 
 | ||
| function DosProtectQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                                   AFileStatus: PFileStatus;
 | ||
|                                   FileStatusLen: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 646;
 | ||
| 
 | ||
| function DosSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                          AFileStatus: PFileStatus;
 | ||
|                          FileStatusLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 218;
 | ||
| 
 | ||
| function DosProtectSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | ||
|                                 AFileStatus: PFileStatus;
 | ||
|                                 FileStatusLen: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 643;
 | ||
| 
 | ||
| function DosQueryPathInfo (FileName: PChar; InfoLevel: cardinal;
 | ||
|            AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 223;
 | ||
| 
 | ||
| function DosQueryPathInfo (const FileName: string; InfoLevel: cardinal;
 | ||
|                   AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosQueryPathInfo:=DosQueryPathInfo(@T,InfoLevel,AFileStatus,
 | ||
|      FileStatusLen);
 | ||
| end;
 | ||
| 
 | ||
| function DosSetPathInfo (FileName: PChar; InfoLevel: cardinal;
 | ||
|                          AFileStatus: PFileStatus; FileStatusLen,
 | ||
|                          Options: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 219;
 | ||
| 
 | ||
| function DosEnumAttribute(RefType:longint;AFile:pointer;
 | ||
|                           Entry:longint;var Buf;BufSize:longint;
 | ||
|                           var Count:longint;InfoLevel:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 372;
 | ||
| 
 | ||
| function DosEnumAttribute (RefType: cardinal; AFile: pointer;
 | ||
|                            Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 372;
 | ||
| 
 | ||
| function DosEnumAttribute (RefType: cardinal; AFile: PChar;
 | ||
|                            Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 372;
 | ||
| 
 | ||
| function DosEnumAttribute (RefType: cardinal; const AFile: THandle;
 | ||
|                            Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 372;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (RefType: cardinal; AFile: pointer;
 | ||
|                                   Entry: cardinal; var Buf; BufSize: cardinal;
 | ||
|                                   var Count: cardinal; InfoLevel: cardinal;
 | ||
|                                   FileHandleLockID: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 636;
 | ||
| 
 | ||
| function DosEnumAttribute (Handle: longint; Entry: longint; var Buf;
 | ||
|                            BufSize: longint;
 | ||
|                            var Count: longint; InfoLevel: longint): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosEnumAttribute:=DosEnumAttribute(0,@Handle,Entry,Buf,BufSize,Count,
 | ||
|      InfoLevel);
 | ||
| end;
 | ||
| 
 | ||
| function DosEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | ||
|                            BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosEnumAttribute:=DosEnumAttribute(0,@Handle,Entry,Buf,BufSize,Count,
 | ||
|      InfoLevel);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | ||
|                                   BufSize: cardinal; var Count: cardinal;
 | ||
|                                   InfoLevel: cardinal;
 | ||
|                                           FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosProtectEnumAttribute := DosProtectEnumAttribute (0, @Handle, Entry, Buf,
 | ||
|                                   BufSize, Count, InfoLevel, FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosEnumAttribute (const FileName: string;
 | ||
|                            Entry: cardinal;var Buf;BufSize: cardinal;
 | ||
|                            var Count: cardinal; InfoLevel: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosEnumAttribute:=DosEnumAttribute(1,@T,Entry,Buf,BufSize,Count,
 | ||
|      InfoLevel);
 | ||
| end;
 | ||
| 
 | ||
| function DosProtectEnumAttribute (const FileName: string; Entry: cardinal;
 | ||
|                                   var Buf; BufSize: cardinal;
 | ||
|                                   var Count: cardinal; InfoLevel: cardinal;
 | ||
|                                           FileHandleLockID: cardinal): cardinal;
 | ||
| 
 | ||
| var T: array [0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy (@T, FileName);
 | ||
|     DosProtectEnumAttribute := DosProtectEnumAttribute (1, @T, Entry, Buf,
 | ||
|                                   BufSize, Count, InfoLevel, FileHandleLockID);
 | ||
| end;
 | ||
| 
 | ||
| function DosScanEnv(Name:PChar;var Value:PChar):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 227;
 | ||
| 
 | ||
| function DosScanEnv(const Name:string;var Value:string):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
|     P:PChar;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosScanEnv:=DosScanEnv(@T,P);
 | ||
|     Value:=StrPas(P);
 | ||
| end;
 | ||
| 
 | ||
| function DosSearchPath (Flag: cardinal; DirList, FileName: PChar;
 | ||
|                         FullName: PChar; FullLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 228;
 | ||
| 
 | ||
| function DosSearchPath (Flag: cardinal; const DirList, FileName: string;
 | ||
|                         var FullName: string): cardinal;
 | ||
| 
 | ||
| var T1,T2,T3:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,DirList);
 | ||
|     StrPCopy(@T2,FileName);
 | ||
|     DosSearchPath:=DosSearchPath(Flag,@T1,@T2,@T3,SizeOf(T3));
 | ||
|     FullName:=StrPas(@T3);
 | ||
| end;
 | ||
| 
 | ||
| function DosFSAttach (DevName, FileSystem: PChar; var Data: TAttachData;
 | ||
|                       DataLen, Flag: cardinal):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 269;
 | ||
| 
 | ||
| function DosFSAttach (const DevName, FileSystem: string; var Data: TAttachData;
 | ||
|                       DataLen, Flag: cardinal): cardinal;
 | ||
| 
 | ||
| var T1,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,DevName);
 | ||
|     StrPCopy(@T2,FileSystem);
 | ||
|     DosFSAttach:=DosFSAttach(@T1,@T2,Data,DataLen,Flag);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:longint;
 | ||
|                      var Buffer:TFSQBuffer2;var BufLen:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 277;
 | ||
| 
 | ||
| function DosQueryFSAttach (DevName: PChar; Ordinal, InfoLevel: cardinal;
 | ||
|                var Buffer: TFSQBuffer2; var BufLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 277;
 | ||
| 
 | ||
| function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:longint;
 | ||
|                           var Buffer:TFSQBuffer2;var BufLen:longint):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,DevName);
 | ||
|     DosQueryFSAttach:=DosQueryFSAttach(@T,Ordinal,InfoLevel,Buffer,BufLen);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryFSAttach (const DevName: string; Ordinal, InfoLevel: cardinal;
 | ||
|                       var Buffer: TFSQBuffer2; var BufLen: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,DevName);
 | ||
|     DosQueryFSAttach:=DosQueryFSAttach(@T,Ordinal,InfoLevel,Buffer,BufLen);
 | ||
| end;
 | ||
| 
 | ||
| function DosFSCtl(Data:pointer;DataLen:longint;var ResDataLen:longint;
 | ||
|                   Parms:pointer;ParmsLen:longint;var ResParmsLen:longint;
 | ||
|                   _Function:longint;Route:PChar;
 | ||
|                   Handle,Method:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 285;
 | ||
| 
 | ||
| function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
 | ||
|                    Parms: pointer; ParmsLen: cardinal;
 | ||
|                    var ResParmsLen: cardinal; _Function: cardinal;
 | ||
|                    Route: PChar; Handle: THandle; Method: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 285;
 | ||
| 
 | ||
| function DosFSCtl(Data:pointer;DataLen:longint;var ResDataLen:longint;
 | ||
|                   Parms:pointer;ParmsLen:longint;var ResParmsLen:longint;
 | ||
|                   _Function:longint;const Route:string;
 | ||
|                   Handle,Method:longint):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Route);
 | ||
|     DosFSCtl:=DosFSCtl(Data,Datalen,ResDataLen,Parms,ParmsLen,ResParmsLen,
 | ||
|      _Function,Route,Handle,Method);
 | ||
| end;
 | ||
| 
 | ||
| function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
 | ||
|                    Parms: pointer; ParmsLen: cardinal;
 | ||
|                    var ResParmsLen: cardinal; _Function: cardinal;
 | ||
|                    const Route: string; Handle: THandle; Method: cardinal):
 | ||
|                                                                       cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Route);
 | ||
|     DosFSCtl:=DosFSCtl(Data,Datalen,ResDataLen,Parms,ParmsLen,ResParmsLen,
 | ||
|      _Function,Route,Handle,Method);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
 | ||
|                          BufLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 278;
 | ||
| 
 | ||
| function DosSetFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
 | ||
|                        BufLen: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 222;
 | ||
| 
 | ||
| function DosQueryVerify(var Enabled:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 225;
 | ||
| 
 | ||
| function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 225;
 | ||
| 
 | ||
| function DosQueryVerify (var Enabled: boolean): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 225;
 | ||
| 
 | ||
| function DosSetVerify (Enable: boolean): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 210;
 | ||
| 
 | ||
| function DosSetVerify (Enable: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 210;
 | ||
| 
 | ||
| function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 209;
 | ||
| 
 | ||
| function DosSetRelMaxFH(var ReqCount,CurMaxFH:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 382;
 | ||
| 
 | ||
| function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 382;
 | ||
| 
 | ||
| function DosShutDown (Flags: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 415;
 | ||
| 
 | ||
| function DosQuerySysInfo (First, Last: cardinal; var Buf; BufSize: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 348;
 | ||
| 
 | ||
| function DosQuerySysInfo(First,Last:cardinal;Buf:PQSVValues;
 | ||
|                                               BufSize:cardinal):cardinal;cdecl;
 | ||
| external 'DOSCALLS' index 348;
 | ||
| 
 | ||
| function DosPhysicalDisk (Func: cardinal; Buf: pointer; BufSize: cardinal;
 | ||
|                           Params: pointer; ParamSize: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 287;
 | ||
| 
 | ||
| function DosAllocMem (var P: pointer; Size, Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 299;
 | ||
| 
 | ||
| function DosFreeMem (P: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 304;
 | ||
| 
 | ||
| function DosSetMem (P: pointer; Size, Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 305;
 | ||
| 
 | ||
| function DosGiveSharedMem (P: pointer; PID, Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 303;
 | ||
| 
 | ||
| function DosGetSharedMem (P: pointer; Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 302;
 | ||
| 
 | ||
| function DosGetNamedSharedMem (var P: pointer; Name: PChar; Flag: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 301;
 | ||
| 
 | ||
| function DosGetNamedSharedMem (var P: pointer; const Name: string;
 | ||
|                                Flag: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosGetNamedSharedMem:=DosGetNamedSharedMem(P,@T,Flag);
 | ||
| end;
 | ||
| 
 | ||
| function DosAllocSharedMem (var P: pointer; Name: PChar;
 | ||
|                                         Size, Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 300;
 | ||
| 
 | ||
| function DosAllocSharedMem (var P: pointer; const Name: string;
 | ||
|                                                Size, Flag: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T,Name);
 | ||
|             DosAllocSharedMem:=DosAllocSharedMem(P,@T,Size,Flag);
 | ||
|         end
 | ||
|     else
 | ||
|         DosAllocSharedMem:=DosAllocSharedMem(P,nil,Size,Flag);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryMem(P:pointer;var Size,Flag:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 306;
 | ||
| 
 | ||
| function DosQueryMem (P: pointer; var Size, Flag: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 306;
 | ||
| 
 | ||
| function DosSubAllocMem (Base: pointer; var P: pointer; Size: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 345;
 | ||
| 
 | ||
| function DosSubFreeMem (Base, P: pointer; Size: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 346;
 | ||
| 
 | ||
| function DosSubSetMem (Base: pointer; Flag, Size: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 344;
 | ||
| 
 | ||
| function DosSubUnSetMem (Base: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 347;
 | ||
| 
 | ||
| function DosCreateEventSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 324;
 | ||
| 
 | ||
| function DosCreateEventSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 324;
 | ||
| 
 | ||
| function DosCreateEventSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T,Name);
 | ||
|             DosCreateEventSem:=DosCreateEventSem(@T,Handle,Attr,State);
 | ||
|         end
 | ||
|     else
 | ||
|         DosCreateEventSem:=DosCreateEventSem(nil,Handle,Attr,State);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreateEventSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosCreateEventSem:=DosCreateEventSem(Name,Handle,Attr,boolean(State));
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 325;
 | ||
| 
 | ||
| function DosOpenEventSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosOpenEventSem:=DosOpenEventSem(@T,Handle);
 | ||
| end;
 | ||
| 
 | ||
| function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 326;
 | ||
| 
 | ||
| function DosResetEventSem(Handle:longint;var PostCount:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 327;
 | ||
| 
 | ||
| function DosResetEventSem (Handle: THandle; var PostCount: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 327;
 | ||
| 
 | ||
| function DosPostEventSem (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 328;
 | ||
| 
 | ||
| function DosWaitEventSem (Handle: THandle; Timeout: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 329;
 | ||
| 
 | ||
| function DosQueryEventSem(Handle:longint;var Posted:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 330;
 | ||
| 
 | ||
| function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 330;
 | ||
| 
 | ||
| function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr: cardinal; State:boolean): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 331;
 | ||
| 
 | ||
| function DosCreateMutExSem (Name: PChar; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 331;
 | ||
| 
 | ||
| function DosCreateMutExSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr: cardinal; State: boolean): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T,Name);
 | ||
|             DosCreateMutExSem:=DosCreateMutExSem(@T,Handle,Attr,State);
 | ||
|         end
 | ||
|     else
 | ||
|         DosCreateMutExSem:=DosCreateMutExSem(nil,Handle,Attr,State);
 | ||
| end;
 | ||
| 
 | ||
| function DosCreateMutExSem (const Name: string; var Handle: THandle;
 | ||
|                             Attr, State: cardinal): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosCreateMutExSem:=DosCreateMutExSem(Name,Handle,Attr,boolean(State));
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 332;
 | ||
| 
 | ||
| function DosOpenMutExSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosOpenMutExSem:=DosOpenMutExSem(@T,Handle);
 | ||
| end;
 | ||
| 
 | ||
| function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 333;
 | ||
| 
 | ||
| function DosRequestMutExSem (Handle: THandle; Timeout: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 334;
 | ||
| 
 | ||
| function DosReleaseMutExSem (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 335;
 | ||
| 
 | ||
| function DosQueryMutExSem(Handle:longint;var PID,TID,Count:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 336;
 | ||
| 
 | ||
| function DosQueryMutExSem (Handle: THandle; var PID, TID, Count: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 336;
 | ||
| 
 | ||
| function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
 | ||
|                               CSemRec: cardinal; var SemArray: TSemArray;
 | ||
|                               Attr: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 337;
 | ||
| 
 | ||
| function DosCreateMuxWaitSem (const Name: string; var Handle: THandle;
 | ||
|                               CSemRec: cardinal; var SemArray: TSemArray;
 | ||
|                               Attr: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T,Name);
 | ||
|             DosCreateMuxWaitSem:=DosCreateMuxWaitSem(@T,Handle,CSemRec,
 | ||
|              SemArray,Attr);
 | ||
|         end
 | ||
|     else
 | ||
|         DosCreateMuxWaitSem:=DosCreateMuxWaitSem(nil,Handle,CSemRec,SemArray,
 | ||
|          Attr);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenMuxWaitSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 338;
 | ||
| 
 | ||
| function DosOpenMuxWaitSem (const Name: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosOpenMuxWaitSem:=DosOpenMuxWaitSem(@T,Handle);
 | ||
| end;
 | ||
| 
 | ||
| function DosCloseMuxWaitSem (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 339;
 | ||
| 
 | ||
| function DosWaitMuxWaitSem(Handle,Timeout:longint;var User:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 340;
 | ||
| 
 | ||
| function DosWaitMuxWaitSem (Handle: THandle; Timeout: cardinal;
 | ||
|                                           var User: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 340;
 | ||
| 
 | ||
| function DosAddMuxWaitSem (Handle: THandle; var SemRec: TSemRecord): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 341;
 | ||
| 
 | ||
| function DosDeleteMuxWaitSem (Handle, Sem: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 342;
 | ||
| 
 | ||
| function DosQueryMuxWaitSem(Handle:longint;var CSemRec:longint;
 | ||
|                         var SemRecs:TSemArray;var Attr:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 343;
 | ||
| 
 | ||
| function DosQueryMuxWaitSem (Handle: THandle; var CSemRec: cardinal;
 | ||
|                   var SemRecs: TSemArray; var Attr: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 343;
 | ||
| 
 | ||
| function DosGetDateTime (var Buf: TDateTime): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 230;
 | ||
| 
 | ||
| function DosSetDateTime (var Buf: TDateTime): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 292;
 | ||
| 
 | ||
| function DosAsyncTimer (MSec: cardinal; HSem: THandle;
 | ||
|                         var TimHandle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 350;
 | ||
| 
 | ||
| function DosStartTimer (MSec: cardinal; HSem: THandle;
 | ||
|                         var TimHandle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 351;
 | ||
| 
 | ||
| function DosStopTimer (TimHandle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 290;
 | ||
| 
 | ||
| function DosTmrQueryFreq(var Freq:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 362;
 | ||
| 
 | ||
| function DosTmrQueryFreq (var Freq: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 362;
 | ||
| 
 | ||
| function DosTmrQueryTime (var Time: comp): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 363;
 | ||
| 
 | ||
| function DosTmrQueryTime (var Time: qword): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 363;
 | ||
| 
 | ||
| function DosLoadModule (ObjName: PChar; ObjLen: cardinal; DLLName: PChar;
 | ||
|                         var Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 318;
 | ||
| 
 | ||
| function DosLoadModule (var ObjName: string; ObjLen: cardinal;
 | ||
|                         const DLLName: string; var Handle: THandle): cardinal;
 | ||
| 
 | ||
| var T1,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T2,DLLName);
 | ||
|     DosLoadModule:=DosLoadModule(@T1,ObjLen,@T2,Handle);
 | ||
|     ObjName:=StrPas(@T1);
 | ||
| end;
 | ||
| 
 | ||
| function DosFreeModule (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 322;
 | ||
| 
 | ||
| function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal; ProcName: PChar;
 | ||
|                            var Address: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 321;
 | ||
| 
 | ||
| function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal;
 | ||
|                        const ProcName: string; var Address: pointer): cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if ProcName<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T1,ProcName);
 | ||
|             DosQueryProcAddr:=DosQueryProcAddr(Handle,Ordinal,@T1,Address);
 | ||
|         end
 | ||
|     else
 | ||
|         DosQueryProcAddr:=DosQueryProcAddr(Handle,Ordinal,nil,Address);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryModuleHandle (DLLName: PChar; var Handle: THandle): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 319;
 | ||
| 
 | ||
| function DosQueryModuleHandle (const DLLName: string; var Handle: THandle):
 | ||
|                                                                       cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,DLLName);
 | ||
|     DosQueryModuleHandle:=DosQueryModuleHandle(@T1,Handle);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryModuleName (Handle: THandle; NameLen: cardinal; Name: PChar):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 320;
 | ||
| 
 | ||
| {function DosQueryModuleName(Handle:longint;var Name:openstring):cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     DosQueryModuleName:=DosQueryModuleName(Handle,High(Name),@T1);
 | ||
|     Name:=StrPas(@T1);
 | ||
| end;}
 | ||
| 
 | ||
| function DosQueryProcType(Handle,Ordinal:longint;Name:PChar;
 | ||
|                           var ProcType:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 586;
 | ||
| 
 | ||
| function DosQueryProcType (Handle: THandle; Ordinal: cardinal; Name: PChar;
 | ||
|                            var ProcType: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 586;
 | ||
| 
 | ||
| function DosQueryProcType(Handle,Ordinal:longint;const Name:string;
 | ||
|                           var ProcType:longint):cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T1,Name);
 | ||
|             DosQueryProcType:=DosQueryProcType(Handle,Ordinal,@T1,ProcType);
 | ||
|         end
 | ||
|     else
 | ||
|         DosQueryProcType:=DosQueryProcType(Handle,Ordinal,nil,ProcType);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryProcType (Handle: THandle; Ordinal: cardinal;
 | ||
|                          const Name: string; var ProcType: cardinal): cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     if Name<>'' then
 | ||
|         begin
 | ||
|             StrPCopy(@T1,Name);
 | ||
|             DosQueryProcType:=DosQueryProcType(Handle,Ordinal,@T1,ProcType);
 | ||
|         end
 | ||
|     else
 | ||
|         DosQueryProcType:=DosQueryProcType(Handle,Ordinal,nil,ProcType);
 | ||
| end;
 | ||
| 
 | ||
| function DosGetResource (Handle: THandle; ResType, ResName: cardinal;
 | ||
|                                               var P: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 352;
 | ||
| 
 | ||
| function DosFreeResource (P: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 353;
 | ||
| 
 | ||
| function DosQueryResourceSize(Handle,IDT,IDN:longint;var Size:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 572;
 | ||
| 
 | ||
| function DosQueryResourceSize (Handle: THandle; IDT, IDN: cardinal;
 | ||
|                                           var Size: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 572;
 | ||
| 
 | ||
| function DosQueryCtryInfo(Size:longint;var Country:TCountryCode;
 | ||
|                   var Res:TCountryInfo;var ActualSize:longint):cardinal; cdecl;
 | ||
| external 'NLS' index 5;
 | ||
| 
 | ||
| function DosQueryCtryInfo (Size: cardinal; var Country: TCountryCode;
 | ||
|              var Res: TCountryInfo; var ActualSize: cardinal): cardinal; cdecl;
 | ||
| external 'NLS' index 5;
 | ||
| 
 | ||
| function DosQueryDBCSEnv (Size: cardinal; var Country: TCountryCode;
 | ||
|                                                   Buf: PChar): cardinal; cdecl;
 | ||
| external 'NLS' index 6;
 | ||
| 
 | ||
| function DosMapCase (Size: cardinal; var Country: TCountryCode;
 | ||
|                      AString: PChar): cardinal; cdecl;
 | ||
| external 'NLS' index 7;
 | ||
| 
 | ||
| function DosMapCase (var Country: TCountryCode; var AString: string): cardinal;
 | ||
| 
 | ||
| var T1:string;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,AString);
 | ||
|     DosMapCase:=DosMapCase(length(AString),Country,@T1);
 | ||
|     AString:=StrPas(@T1);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryCollate(Size:longint;var Country:TCountryCode;
 | ||
|                          buf:PByteArray;var TableLen:longint):cardinal; cdecl;
 | ||
| external 'NLS' index 8;
 | ||
| 
 | ||
| function DosQueryCollate (Size: cardinal; var Country: TCountryCode;
 | ||
|                      Buf: PByteArray; var TableLen: cardinal): cardinal; cdecl;
 | ||
| external 'NLS' index 8;
 | ||
| 
 | ||
| function DosQueryCP(Size:longint;CodePages:PWordArray;
 | ||
|                                           var ActSize:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 291;
 | ||
| 
 | ||
| function DosQueryCP (Size: cardinal; CodePages: PWordArray;
 | ||
|                                        var ActSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 291;
 | ||
| 
 | ||
| function DosSetProcessCP (CP: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 289;
 | ||
| 
 | ||
| function DosSetExceptionHandler (var RegRec: TExceptionRegistrationRecord):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 354;
 | ||
| 
 | ||
| function DosUnsetExceptionHandler (var RegRec: TExceptionRegistrationRecord):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 355;
 | ||
| 
 | ||
| function DosRaiseException (var Excpt: TExceptionReportRecord): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 356;
 | ||
| 
 | ||
| function DosSendSignalException (PID, Exception: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 379;
 | ||
| 
 | ||
| function DosUnwindException (var Handler: TExceptionRegistrationRecord;
 | ||
|                              TargetIP: pointer;
 | ||
|                           var RepRec: TExceptionReportRecord): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 357;
 | ||
| 
 | ||
| function DosSetSignalExceptionFocus(Enable:longint;var Times:longint):cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 378;
 | ||
| 
 | ||
| function DosSetSignalExceptionFocus (Enable: cardinal;
 | ||
|                                          var Times: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 378;
 | ||
| 
 | ||
| function DosSetSignalExceptionFocus (Enable: boolean;
 | ||
|                                          var Times: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 378;
 | ||
| 
 | ||
| function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 380;
 | ||
| 
 | ||
| function DosEnterMustComplete (var Nesting: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 380;
 | ||
| 
 | ||
| function DosExitMustComplete(var Nesting:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 381;
 | ||
| 
 | ||
| function DosExitMustComplete (var Nesting: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 381;
 | ||
| 
 | ||
| function DosAcknowledgeSignalException (SignalNum: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 418;
 | ||
| 
 | ||
| function DosCloseQueue (Handle: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 11;
 | ||
| 
 | ||
| function DosCreateQueue (var Handle: THandle; Priority: cardinal;
 | ||
|                          Name: PChar): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 16;
 | ||
| 
 | ||
| function DosCreateQueue (var Handle: THandle; Priority: cardinal;
 | ||
|                          const Name: string): cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,Name);
 | ||
|     DosCreateQueue:=DosCreateQueue(Handle,Priority,@T1);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
 | ||
|                       Name:PChar):cardinal; cdecl;
 | ||
| external 'QUECALLS' index 15;
 | ||
| 
 | ||
| function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
 | ||
|                        Name: PChar): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 15;
 | ||
| 
 | ||
| function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
 | ||
|                       const Name:string):cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,Name);
 | ||
|     DosOpenQueue:=DosOpenQueue(Parent_PID,Handle,@T1);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
 | ||
|                        const Name: string): cardinal;
 | ||
| 
 | ||
| var T1:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T1,Name);
 | ||
|     DosOpenQueue:=DosOpenQueue(Parent_PID,Handle,@T1);
 | ||
| end;
 | ||
| 
 | ||
| function DosPeekQueue(Handle:longint;var ReqBuffer:TRequestData;
 | ||
|                       var DataLen:longint;var DataPtr:pointer;
 | ||
|                       var Element:longint;Wait:longint;
 | ||
|                       var Priority:byte;ASem:longint):cardinal; cdecl;
 | ||
| external 'QUECALLS' index 13;
 | ||
| 
 | ||
| function DosPeekQueue (Handle: THandle; var ReqBuffer:TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        var Element: cardinal; Wait: cardinal;
 | ||
|                        var Priority: byte; ASem: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 13;
 | ||
| 
 | ||
| function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        var Element: cardinal; Wait: boolean;
 | ||
|                        var Priority: byte; ASem: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 13;
 | ||
| 
 | ||
| function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 10;
 | ||
| 
 | ||
| function DosQueryQueue(Handle:longint;var Count:longint):cardinal; cdecl;
 | ||
| external 'QUECALLS' index 12;
 | ||
| 
 | ||
| function DosQueryQueue (Handle: THandle; var Count: cardinal): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 12;
 | ||
| 
 | ||
| function DosReadQueue(Handle:longint;var ReqBuffer:TRequestData;
 | ||
|                       var DataLen:longint;var DataPtr:pointer;
 | ||
|                       Element,Wait:longint;var Priority:byte;
 | ||
|                       ASem:longint):cardinal; cdecl;
 | ||
| external 'QUECALLS' index 9;
 | ||
| 
 | ||
| function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        Element, Wait: cardinal; var Priority: byte;
 | ||
|                        ASem: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 9;
 | ||
| 
 | ||
| function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
 | ||
|                        var DataLen: cardinal; var DataPtr: pointer;
 | ||
|                        Element: cardinal; Wait: boolean; var Priority: byte;
 | ||
|                        ASem: THandle): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 9;
 | ||
| 
 | ||
| function DosWriteQueue (Handle: THandle; Request, DataLen: cardinal;
 | ||
|                         var DataBuf; Priority: cardinal): cardinal; cdecl;
 | ||
| external 'QUECALLS' index 14;
 | ||
| 
 | ||
| function DosError (Error: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 212;
 | ||
| 
 | ||
| procedure DosErrClass(Code:longint;var _Class,Action,Locus:longint); cdecl;
 | ||
| external 'DOSCALLS' index 211;
 | ||
| 
 | ||
| procedure DosErrClass (Code: cardinal; var _Class, Action, Locus: cardinal);
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 211;
 | ||
| 
 | ||
| function DosTrueGetMessage (MsgSeg: pointer; Table: PInsertTable;
 | ||
|                             TableSize: cardinal; Buf: PChar;
 | ||
|                             BufSize, MsgNumber: cardinal; FileName: PChar;
 | ||
|                             var MsgSize: cardinal): cardinal; cdecl;
 | ||
| external 'MSG' index 6;
 | ||
| 
 | ||
| function DosTrueGetMessage (MsgSeg: pointer; Table: PInsertTable;
 | ||
|                             TableSize: longint; Buf: PChar;
 | ||
|                             BufSize, MsgNumber: longint; FileName: PChar;
 | ||
|                             var MsgSize: longint): cardinal; cdecl;
 | ||
| external 'MSG' index 6;
 | ||
| 
 | ||
| function DosIQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
 | ||
|                      var InfoSize: cardinal; MesSeg: pointer): cardinal; cdecl;
 | ||
| external 'MSG' index 8;
 | ||
| 
 | ||
| function DosIQueryMessageCP (var Buf; BufSize: longint; FileName: PChar;
 | ||
|                       var InfoSize: longint; MesSeg: pointer): cardinal; cdecl;
 | ||
| external 'MSG' index 8;
 | ||
| 
 | ||
| procedure MagicHeaderEnd; assembler; forward;
 | ||
| 
 | ||
| {$ASMMODE INTEL}
 | ||
| 
 | ||
| {start of _MSGSEG32 segment}
 | ||
| procedure MagicHeaderStart; assembler;
 | ||
| asm
 | ||
|   db $0FF
 | ||
|   db $4D,$53,$47,$53,$45,$47,$33,$32, 0       //'MSGSEG32'
 | ||
|   dd $8001
 | ||
|   dd MAGICHEADEREND
 | ||
| end;
 | ||
| 
 | ||
| function DosGetMessage (Table: PInsertTable; TableSize: cardinal; Buf: PChar;
 | ||
|                         BufSize, MsgNumber: cardinal; FileName: PChar;
 | ||
|                         var MsgSize: cardinal): cardinal;
 | ||
| begin
 | ||
|     DosGetMessage := DosTrueGetMessage(@MagicHeaderStart,Table,TableSize,
 | ||
|                                  Buf,BufSize,MsgNumber,FileName,MsgSize);
 | ||
| end;
 | ||
| 
 | ||
| function DosGetMessage (Table: PInsertTable; TableSize:longint;Buf:PChar;
 | ||
|                        BufSize,MsgNumber:longint;FileName:PChar;
 | ||
|                        var MsgSize:longint):cardinal;
 | ||
| begin
 | ||
|     DosGetMessage := DosTrueGetMessage(@MagicHeaderStart,Table,TableSize,
 | ||
|                                  Buf,BufSize,MsgNumber,FileName,MsgSize);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
 | ||
|                             var InfoSize: cardinal): cardinal;
 | ||
| begin
 | ||
|     DosQueryMessageCP := DosIQueryMessageCP(Buf, BufSize, FileName, InfoSize,
 | ||
|                                                             @MagicHeaderStart);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryMessageCP(var Buf;BufSize:longint;FileName:PChar;
 | ||
|                             var InfoSize:longint):cardinal;
 | ||
| begin
 | ||
|     DosQueryMessageCP := DosIQueryMessageCP(Buf, BufSize, FileName, InfoSize,
 | ||
|                                                             @MagicHeaderStart);
 | ||
| end;
 | ||
| 
 | ||
| procedure MagicHeaderEnd; assembler;
 | ||
| asm
 | ||
|   dd $0FFFF0000
 | ||
| end;
 | ||
| {$ASMMODE DEFAULT}
 | ||
| 
 | ||
| (*function DosGetMessage(const Table:array of PString;var Buf:openstring;
 | ||
|                         MsgNumber:longint;const FileName:string):cardinal;
 | ||
| 
 | ||
| {Hmm. This takes too much stackspace. Let's use the
 | ||
|  heap instead.}
 | ||
| 
 | ||
| type    TTableBuffer=record
 | ||
|             IT:TinsertTable;
 | ||
|             Strings:TByteArray;
 | ||
|         end;
 | ||
|         PTableBuffer=^TTableBuffer;
 | ||
| 
 | ||
| var Buffer:PTableBuffer;
 | ||
|     I,S:word;
 | ||
|     BufPtr:pointer;
 | ||
|     T1,T2:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     {Check if there are more than nine items in the table.}
 | ||
|     if High(Table)>8 then
 | ||
|         DosGetMessage:=87
 | ||
|     else
 | ||
|         begin
 | ||
|             {Step 1: Calculate the space we need on the heap.}
 | ||
|             S:=SizeOf(TInsertTable);
 | ||
|             for I:=Low(Table) to High(Table) do
 | ||
|                 S:=S+Length(Table[I])+1;
 | ||
| 
 | ||
|             {Step 2: Allocate the buffer.}
 | ||
|             GetMem(Buffer,S);
 | ||
| 
 | ||
|             {Step 3: Fill the buffer.}
 | ||
|             BufPtr:=@(S^.Strings);
 | ||
|             for I:=Low(Table) to High(Table) do
 | ||
|                 begin
 | ||
|                     S^.IT[I+1]:=bufptr;
 | ||
|                     StrPCopy(BufPtr,Table[I]);
 | ||
|                     Inc(longint(BufPtr),Length(Table[I])+1);
 | ||
|                 end;
 | ||
| 
 | ||
|             {Step 4: Convert the filename.}
 | ||
|             StrPCopy(@T2,FileName);
 | ||
| 
 | ||
|             {Step 5: Get the message.}
 | ||
|             DosGetMessage:=DosGetMessage(@(S^.IT),High(Table)+1,@T1,
 | ||
|              High(Buf),MsgNumber,@T2,I);
 | ||
| 
 | ||
|             {Step 6: Convert the returned message.}
 | ||
|             Buf[0]:=Char(I);
 | ||
|             Move(T1,Buf[1],I);
 | ||
| 
 | ||
|             {Step 7: Free the memory.}
 | ||
|             FreeMem(Buffer,S);
 | ||
|         end;
 | ||
| end;*)
 | ||
| 
 | ||
| {function DosGetMessage(const Table:array of PString;Buf:PChar;
 | ||
|                        BufSize,MsgNumber:longint;const FileName:string;
 | ||
|                        MsgSize:longint):cardinal;}
 | ||
| 
 | ||
| function DosQueryMessageCP(var Buf;BufSize:longint;const FileName:string;
 | ||
|                            var InfoSize:longint):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosQueryMessageCP:=DosQueryMessageCP(Buf,BufSize,@T,InfoSize);
 | ||
| end;
 | ||
| 
 | ||
| function DosQueryMessageCP (var Buf; BufSize: cardinal; const FileName: string;
 | ||
|                             var InfoSize: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,FileName);
 | ||
|     DosQueryMessageCP:=DosQueryMessageCP(Buf,BufSize,@T,InfoSize);
 | ||
| end;
 | ||
| 
 | ||
| function DosInsertMessage(Table:PInsertTable;TableSize:longint;
 | ||
|                           Message:PChar;SrcMessageSize:longint;
 | ||
|                           Buf:PChar;BufSize:longint;
 | ||
|                           var DstMessageSize:longint):cardinal; cdecl;
 | ||
| external 'MSG' index 4;
 | ||
| 
 | ||
| function DosInsertMessage (Table: PInsertTable; TableSize: cardinal;
 | ||
|                            Message: PChar; SrcMessageSize: cardinal;
 | ||
|                            Buf: PChar; BufSize: cardinal;
 | ||
|                            var DstMessageSize: cardinal): cardinal; cdecl;
 | ||
| external 'MSG' index 4;
 | ||
| 
 | ||
| {function DosInsertMessage(Table:array of PString;
 | ||
|                           const Message:string;
 | ||
|                           var Buf:openstring):cardinal;
 | ||
| 
 | ||
| function DosInsertMessage(Table:array of PString;
 | ||
|                           Message:PChar;SrcMessageSize:longint;
 | ||
|                           Buf:PChar;BufSize:longint;
 | ||
|                           var DstMessageSize:longint):cardinal;}
 | ||
| 
 | ||
| function DosPutMessage (Handle: THandle; Size: cardinal; Buf: PChar): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'MSG' index 5;
 | ||
| 
 | ||
| function DosPutMessage (Handle: THandle; const Buf: string): cardinal;
 | ||
| 
 | ||
| begin
 | ||
|     DosPutMessage:=DosPutMessage(Handle,Length(Buf),@Buf[1]);
 | ||
| end;
 | ||
| 
 | ||
| function DosStartSession (var AStartData:TStartData;
 | ||
|                           var SesID,PID:longint):cardinal; cdecl;
 | ||
| external 'SESMGR' index 37;
 | ||
| 
 | ||
| function DosStartSession (var AStartData: TStartData;
 | ||
|                           var SesID, PID: cardinal): cardinal; cdecl;
 | ||
| external 'SESMGR' index 37;
 | ||
| 
 | ||
| function DosSetSession (SesID: cardinal; var AStatus: TStatusData): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'SESMGR' index 39;
 | ||
| 
 | ||
| function DosSelectSession (SesID: cardinal): cardinal; cdecl;
 | ||
| external 'SESMGR' index 38;
 | ||
| 
 | ||
| function DosStopSession (Scope, SesID: cardinal): cardinal; cdecl;
 | ||
| external 'SESMGR' index 40;
 | ||
| 
 | ||
| function DosCreatePipe (var ReadHandle, WriteHandle: THandle;
 | ||
|                         Size: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 239;
 | ||
| 
 | ||
| function DosCreateNPipe (Name: PChar; var Handle: THandle; OpenMode, PipeMode,
 | ||
|                        OutBufSize, InBufSize, MSec: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 243;
 | ||
| 
 | ||
| function DosCreateNPipe (const Name: string; var Handle: THandle; OpenMode,
 | ||
|                     PipeMode, OutBufSize, InBufSize, MSec: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosCreateNPipe:=DosCreateNPipe(@T,Handle,OpenMode,PipeMode,OutBufSize,
 | ||
|      InBufSize,MSec);
 | ||
| end;
 | ||
| 
 | ||
| function DosCallNPipe(Name:PChar;var Input;InputSize:longint;
 | ||
|                       var Output;OutputSize:longint;var ReadBytes:longint;
 | ||
|                       MSec:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 240;
 | ||
| 
 | ||
| function DosCallNPipe (Name: PChar; var Input; InputSize: cardinal;
 | ||
|                        var Output; OutputSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; MSec: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 240;
 | ||
| 
 | ||
| function DosCallNPipe(const Name:string;var Input;InputSize:longint;
 | ||
|                       var Output;OutputSize:longint;var ReadBytes:longint;
 | ||
|                       MSec:longint):cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosCallNPipe:=DosCallNPipe(@T,Input,InputSize,Output,OutputSize,
 | ||
|      ReadBytes,MSec);
 | ||
| end;
 | ||
| 
 | ||
| function DosCallNPipe (const Name: string; var Input; InputSize: cardinal;
 | ||
|                        var Output; OutputSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; MSec: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosCallNPipe:=DosCallNPipe(@T,Input,InputSize,Output,OutputSize,
 | ||
|      ReadBytes,MSec);
 | ||
| end;
 | ||
| 
 | ||
| function DosConnectNPipe (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 241;
 | ||
| 
 | ||
| function DosDisconnectNPipe (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 242;
 | ||
| 
 | ||
| function DosPeekNPipe(Handle:longint;var Buffer;BufSize:longint;
 | ||
|                       var ReadBytes:longint;var Avail:TAvailData;
 | ||
|                       var State:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 244;
 | ||
| 
 | ||
| function DosPeekNPipe (Handle: THandle; var Buffer; BufSize: cardinal;
 | ||
|                        var ReadBytes: cardinal; var Avail: TAvailData;
 | ||
|                        var State: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 244;
 | ||
| 
 | ||
| function DosQueryNPHState(Handle:longint;var State:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 245;
 | ||
| 
 | ||
| function DosQueryNPHState (Handle: THandle; var State: cardinal): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 245;
 | ||
| 
 | ||
| function DosQueryNPipeInfo (Handle: THandle; InfoLevel: cardinal; var Buffer;
 | ||
|                             BufSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 248;
 | ||
| 
 | ||
| function DosQueryNPipeSemState (SemHandle: THandle; var SemArray;
 | ||
|                                            BufSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 249;
 | ||
| 
 | ||
| function DosQueryNPipeSemState (SemHandle: THandle; SemArray: PPipeSemState;
 | ||
|                                            BufSize: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 249;
 | ||
| 
 | ||
| function DosSetNPHState (Handle: THandle; State: cardinal):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 250;
 | ||
| 
 | ||
| function DosSetNPipeSem(PipeHandle,SemHandle: THandle; Key: cardinal):
 | ||
|                                                                cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 251;
 | ||
| 
 | ||
| function DosTransactNPipe(Handle:longint;var OutBuf;OutSize:longint;
 | ||
|                           var InBuf;InSize:longint;
 | ||
|                           var ReadBytes:longint):cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 252;
 | ||
| 
 | ||
| function DosTransactNPipe (Handle: THandle; var OutBuf; OutSize: cardinal;
 | ||
|                           var InBuf; InSize: cardinal;
 | ||
|                           var ReadBytes: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 252;
 | ||
| 
 | ||
| function DosWaitNPipe (Name: PChar; MSec: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 253;
 | ||
| 
 | ||
| function DosWaitNPipe (const Name: string; MSec: cardinal): cardinal;
 | ||
| 
 | ||
| var T:array[0..255] of char;
 | ||
| 
 | ||
| begin
 | ||
|     StrPCopy(@T,Name);
 | ||
|     DosWaitNPipe:=DosWaitNPipe(@T,MSec);
 | ||
| end;
 | ||
| 
 | ||
| function DosOpenVDD (Name: PChar; var Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 308;
 | ||
| 
 | ||
| function DosRequestVDD (Handle: THandle; SGroup, Cmd: cardinal;
 | ||
|                         InSize: cardinal; var InBuffer;
 | ||
|                         OutSize: cardinal; var OutBuffer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 309;
 | ||
| 
 | ||
| function DosCloseVDD (Handle: THandle): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 310;
 | ||
| 
 | ||
| procedure DosSelToFlat; cdecl;
 | ||
| external 'DOSCALLS' index 426;
 | ||
| 
 | ||
| procedure DosFlatToSel; cdecl;
 | ||
| external 'DOSCALLS' index 425;
 | ||
| 
 | ||
| {$ASMMODE INTEL}
 | ||
| function SelToFlat (AFarPtr: cardinal): pointer; assembler;
 | ||
|  asm
 | ||
|   push ebx
 | ||
|   push esi
 | ||
|   push edi
 | ||
| {$IFNDEF REGCALL}
 | ||
|   mov eax, AFarPtr
 | ||
| {$ENDIF REGCALL}
 | ||
|   call DosSelToFlat
 | ||
|   pop edi
 | ||
|   pop esi
 | ||
|   pop ebx
 | ||
|  end;
 | ||
| 
 | ||
| function SelToFlat (AFarPtr: TFarPtr): pointer; assembler;
 | ||
|  asm
 | ||
|   push ebx
 | ||
|   push esi
 | ||
|   push edi
 | ||
|   mov eax, AFarPtr
 | ||
|   call DosSelToFlat
 | ||
|   pop edi
 | ||
|   pop esi
 | ||
|   pop ebx
 | ||
|  end;
 | ||
| 
 | ||
| function FlatToSel (APtr: pointer): cardinal; assembler;
 | ||
|  asm
 | ||
|   push ebx
 | ||
|   push esi
 | ||
|   push edi
 | ||
| {$IFNDEF REGCALL}
 | ||
|   mov eax, APtr
 | ||
| {$ENDIF REGCALL}
 | ||
|   call DosFlatToSel
 | ||
|   pop edi
 | ||
|   pop esi
 | ||
|   pop ebx
 | ||
|  end;
 | ||
| 
 | ||
| function DosAllocThreadLocalMemory (Count: cardinal; var P: pointer): cardinal;
 | ||
|                                                                          cdecl;
 | ||
| external 'DOSCALLS' index 454;
 | ||
| 
 | ||
| function DosFreeThreadLocalMemory (P: pointer): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 455;
 | ||
| 
 | ||
| function DosQueryRASInfo (Index: cardinal; var PBuffer: pointer): cardinal;
 | ||
|                                           cdecl; external 'DOSCALLS' index 112;
 | ||
| 
 | ||
| function LogOpen (var Handle: cardinal): cardinal; cdecl;
 | ||
|                                                  external 'DOSCALLS' index 430;
 | ||
| 
 | ||
| function LogClose (Handle: cardinal): cardinal; cdecl;
 | ||
|                                                  external 'DOSCALLS' index 431;
 | ||
| 
 | ||
| function LogAddEntries (Handle: cardinal; Service: cardinal;
 | ||
|       LogEntries: PLogEntryRec): cardinal; cdecl; external 'DOSCALLS' index 432;
 | ||
| 
 | ||
| function LogAddEntries (Handle: cardinal; Service: cardinal;
 | ||
|   var LogEntries: TLogEntryRec): cardinal; cdecl; external 'DOSCALLS' index 432;
 | ||
| 
 | ||
| (* Todo:
 | ||
| 
 | ||
| function DosRawReadNPipe ...; cdecl;
 | ||
| external 'DOSCALLS' index 246;
 | ||
| 
 | ||
| function DosRawWriteNPipe ...; cdecl;
 | ||
| external 'DOSCALLS' index 247;
 | ||
| 
 | ||
| function DosSetCP ...; cdecl;
 | ||
| external 'DOSCALLS' index 288;
 | ||
| 
 | ||
| function DosDynamicTrace ...; cdecl;
 | ||
| external 'DOSCALLS' index 316;
 | ||
| 
 | ||
| function DosRegisterPerfCtrs ...; cdecl;
 | ||
| external 'DOSCALLS' index 367;
 | ||
| 
 | ||
| function DosQueryDOSProperty ...; cdecl;
 | ||
| external 'DOSCALLS' index 373;
 | ||
| 
 | ||
| function DosSetDOSProperty ...; cdecl;
 | ||
| external 'DOSCALLS' index 374;
 | ||
| 
 | ||
| function DosProfile ...; cdecl;
 | ||
| external 'DOSCALLS' index 377;
 | ||
| 
 | ||
| function DosReplaceModule ...; cdecl;
 | ||
| external 'DOSCALLS' index 417;
 | ||
| 
 | ||
| function DosTIB ...; cdecl;
 | ||
| external 'DOSCALLS' index 419;
 | ||
| 
 | ||
| function DosOpenChangeNotify ...; cdecl;
 | ||
| external 'DOSCALLS' index 440;
 | ||
| 
 | ||
| function DosResetChangeNotify ...; cdecl;
 | ||
| external 'DOSCALLS' index 441;
 | ||
| 
 | ||
| function DosCloseChangeNotify ...; cdecl;
 | ||
| external 'DOSCALLS' index 442;
 | ||
| 
 | ||
| function DosInitializePorthole ...; cdecl;
 | ||
| external 'DOSCALLS' index 580;
 | ||
| 
 | ||
| function DosQueryHeaderInfo ...; cdecl;
 | ||
| external 'DOSCALLS' index 582;
 | ||
| 
 | ||
| WSeB/eCS APIs:
 | ||
|  Creates a private Read/Write alias or an LDT code segment alias to part
 | ||
|  of an existing memory object. The alias object is accessible only to the
 | ||
|  process that created it. The original object must be accessible to the caller
 | ||
|  of DosAliasMem.
 | ||
| 
 | ||
|  An alias is removed by calling DosFreeMem with the alias address.
 | ||
| 
 | ||
|  Although it is possible to create a Read/Write alias to a code segment
 | ||
|  to allow code modification, this is not recommended. On Pentium processors,
 | ||
|  and later, pipe-lining techniques used by the processor might allow
 | ||
|  the processor not to be aware of the modified code, if appropriate
 | ||
|  pipe-line serialization is not performed by the programmer. For further
 | ||
|  information see the processor documentation.
 | ||
| 
 | ||
|  Possible return values:
 | ||
|      0 No_Error
 | ||
|      8 Error_Not_Enough_Memory
 | ||
|     87 Error_Invalid_Parameter
 | ||
|     95 Error_Interrupt
 | ||
|  32798 Error_Crosses_Object_Boundary
 | ||
| 
 | ||
| pMem   = Pointer to the memory to be aliased. It must be on a page boundary
 | ||
|          (i.e. aligned to 4 kB), but may specify an address within a memory
 | ||
|          object.
 | ||
| Size   = Specifies size in bytes for the memory to alias. The entire range
 | ||
|          must lie within a single memory object and must be committed
 | ||
|          if OBJ_SELMAPALL is specified.
 | ||
| Alias  = Pointer where the address of the aliased memory is returned.
 | ||
|          The corresponding LDT selector is not explicitly returned but may be
 | ||
|          calculated by using the Compatibility Mapping Algorithm
 | ||
|          ((Alias shr 13) or 7).
 | ||
| Flags  = Combination of the following values:
 | ||
|             obj_SelMapAll = $800 (Create a Read/Write 32 bit alias
 | ||
|                                   to the address specified. The entire range
 | ||
|                                   must be committed, start on page boundary
 | ||
|                                   and be within the extent of a single memory
 | ||
|                                   object. An LDT selector is created to map
 | ||
|                                   the entire range specified. If obj_SelMapAll
 | ||
|                                   is not specified, then size is rounded up
 | ||
|                                   to a 4K multiple and the alias created
 | ||
|                                   inherits the permissions from the pages
 | ||
|                                   of the original object.)
 | ||
|             obj_Tile      =  $40  (Obj_Tile may be specified, but currently
 | ||
|                                    this is enforced whether or not specified.
 | ||
|                                    This forces LDT selectors to be based
 | ||
|                                    on 64K boundaries.)
 | ||
|             sel_Code      =    1  (Marks the LDT alias selector(s)
 | ||
|                                    Read-Executable code selectors.)
 | ||
|             sel_Use32     =    2  (Used with obj_SelMapAll, otherwise ignored.
 | ||
|                                    Marks the first alias LDT selector
 | ||
|                                    as a 32 bit selector by setting the BIG/C32
 | ||
|                                    bit.)
 | ||
| functionDosAliasMem (pMem: pointer; Size: cardinal; var Alias: pointer; Flags: cardinal): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 298;
 | ||
| 
 | ||
|  DosCancelLockRequestL cancels an outstanding DosSetFileLocksL request.
 | ||
|  If two threads in a process are waiting on a lock file range, and another
 | ||
|  thread issues DosCancelLockRequestL for that lock file range, then both
 | ||
|  waiting threads are released.
 | ||
|  Not all file-system drivers (FSDs) can cancel an outstanding lock request.
 | ||
|  Local Area Network (LAN) servers cannot cancel an outstanding lock request
 | ||
|  if they use a version of the operating system prior to OS/2 Version 2.00.
 | ||
| 
 | ||
| Possible return values:
 | ||
|      0 No_Error
 | ||
|      6 Error_Invalid_Handle
 | ||
|     87 Error_Invalid_Parameter
 | ||
|    173 Error_Cancel_Violation
 | ||
| 
 | ||
| hFile    = File handle used in the DosSetFileLocksL function
 | ||
|            that is to be cancelled.
 | ||
| pflLockL = Address of the structure describing the lock request to cancel.
 | ||
| 
 | ||
| function DosCancelLockRequestL (hFile: THandle; pflLock: PFileLockL): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index ???;
 | ||
| 
 | ||
| function DosCancelLockRequestL (hFile: THandle; const Lock: TFileLockL): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index ???;
 | ||
| 
 | ||
| DosCreateThread2
 | ||
| DosDumpProcess
 | ||
| DosForceSystemDump
 | ||
| 
 | ||
| functionDosGetProcessorStatus (...): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 447;
 | ||
| 
 | ||
| function DosQueryPageUsage (...): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 358;
 | ||
| 
 | ||
| 
 | ||
| DosSetProcessorStatus = DOSCALLS.448
 | ||
| DosCreateSpinLock     = DOSCALLS.449
 | ||
| DosAcquireSpinLock    = DOSCALLS.450
 | ||
| DosReleaseSpinLock    = DOSCALLS.451
 | ||
| DosFreeSpinLock       = DOSCALLS.452
 | ||
| DosListIO
 | ||
| DosListIOL
 | ||
| DosOpenL = DOSCALLS.981
 | ||
| DosPerfSystemCall
 | ||
| DosProtectOpenL
 | ||
| DosProtectSetFileLocksL
 | ||
| DosProtectSetFilePrtL
 | ||
| DosProtectSetFileSizeL
 | ||
| DosQueryABIOSSuport
 | ||
| 
 | ||
| functionDosQueryMemState (...): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 307;
 | ||
| 
 | ||
| ___ functionDos16QueryModFromCS (...): ...
 | ||
| external 'DOSCALLS' index 359;
 | ||
| 
 | ||
| DosQueryModFromEIP
 | ||
| 
 | ||
| functionDosQuerySysState (): cardinal; cdecl;
 | ||
| external 'DOSCALLS' index 368;
 | ||
| 
 | ||
| DosQueryThreadAffinity
 | ||
| DosSetFileLocksL
 | ||
| DosSetFilePtrL = DOSCALLS.988
 | ||
| DosSetFileSizeL = DOSCALLS.989
 | ||
| DosSetThreadAffinity
 | ||
| Dos16SysTrace
 | ||
| DosVerifyPidTid
 | ||
| *)
 | ||
| 
 | ||
| 
 | ||
| end.
 | 
