DOS.DEF 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * DOS.DEF - Modula-2 OS/2 API Dos... API interface *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# call(o_a_size => off,
  11. o_a_copy=>off,
  12. result_optional=>on,
  13. reg_saved => (bx, cx, dx, si, di, es, ds, st1, st2),
  14. reg_param => (),
  15. seg_name => none,
  16. near_call => off,
  17. ds_eq_ss => off) *)
  18. (*# module(implementation=>off, init_code => off) *)
  19. (*# name(prefix => os2_lib) *)
  20. (*# data(near_ptr => off) *)
  21. DEFINITION MODULE Dos;
  22. (**)
  23. (**--- OS/2 Kernel Dos calls -----------------------------------------------*)
  24. (**)
  25. (**)
  26. (*--- Conditional sections, set to TRUE if required ------------------------*)
  27. (**)
  28. CONST
  29. i_PROCESS = TRUE; (* Threads & Processes *)
  30. i_INFOSEG = TRUE; (* Info Segment *)
  31. i_FILEMGR = TRUE; (* File Manager *)
  32. i_MEMMGR = TRUE; (* Memory Manager *)
  33. i_SEMAPHORE = TRUE; (* Semaphores *)
  34. i_DATETIME = TRUE; (* Date & Time *)
  35. i_MODULEMGR = TRUE; (* Module Manager *)
  36. i_RESOURCE = TRUE; (* Resource Manager *)
  37. i_NLS = TRUE; (* National Language Support *)
  38. i_SIGNAL = TRUE; (* Signal Manager *)
  39. i_MONITOR = TRUE; (* Device monitors *)
  40. i_QUEUES = TRUE; (* Pipes and queues *)
  41. i_MISC = TRUE; (* Miscellaneous dos services *)
  42. i_SESSION = TRUE; (* Session Manager *)
  43. i_DEVICE = TRUE; (* Device support *)
  44. i_NMPIPES = TRUE; (* Named pipes *)
  45. i_FONT = TRUE; (* Font support *)
  46. TYPE
  47. HSEM = FarADDRESS; (* Used in more than one section *)
  48. Os2ProcType = PROCEDURE();
  49. (**)
  50. (**--Dos General Services--------------------------------------------------*)
  51. (**)
  52. PROCEDURE Beep(frqncy,duratn:CARDINAL) : CARDINAL;
  53. PROCEDURE Exit(action,result:CARDINAL);
  54. CONST
  55. EXIT_THREAD = 0; EXIT_PROCESS = 1;
  56. (**)
  57. (*--Process routines-------------------------------------------------------*)
  58. (**)
  59. (*%T i_PROCESS *)
  60. TYPE
  61. PIDINFO = RECORD
  62. pid : CARDINAL;
  63. tid : CARDINAL;
  64. pidParent : CARDINAL;
  65. END;
  66. (*# save *)
  67. (*# call(reg_saved => (ds,si,di,st1,st2),
  68. near_call=>off) *)
  69. THREAD = PROCEDURE ();
  70. EXITLIST = PROCEDURE (CARDINAL);
  71. (*# restore *)
  72. PROCEDURE CreateThread(paddr:THREAD; VAR thread:CARDINAL; staddr:FarADDRESS) : CARDINAL;
  73. PROCEDURE ResumeThread(thread:CARDINAL) : CARDINAL;
  74. PROCEDURE SuspendThread(thread:CARDINAL) : CARDINAL;
  75. (* Values/types for DosCWait and DosExecPgm *)
  76. CONST
  77. DCWA_PROCESS = 0; DCWA_PROCESSTREE = 1;
  78. DCWW_WAIT = 0; DCWW_NOWAIT = 1;
  79. TYPE
  80. RESULTCODES = RECORD
  81. codeTerminate : CARDINAL;
  82. codeResult : CARDINAL;
  83. END;
  84. PROCEDURE CWait(action,wait:CARDINAL; VAR tcodes:RESULTCODES; VAR procadd:CARDINAL; process:CARDINAL) : CARDINAL;
  85. PROCEDURE Sleep(time:LONGCARD) : CARDINAL;
  86. PROCEDURE EnterCritSec();
  87. PROCEDURE ExitCritSec();
  88. CONST
  89. (* codeTerminate values *)
  90. TC_EXIT = 0; TC_HARDERROR = 1;
  91. TC_TRAP = 2; TC_KILLPROCESS = 3;
  92. (*DosExitList functions *)
  93. EXLST_ADD = 1; EXLST_REMOVE = 2; EXLST_EXIT = 3;
  94. PROCEDURE ExitList(fcncode:CARDINAL; rtnaddr:EXITLIST) : CARDINAL;
  95. PROCEDURE ExecPgm( VAR buff:ARRAY OF CHAR; buflen:INTEGER;
  96. eflag:CARDINAL; args:ARRAY OF CHAR;
  97. environ:ARRAY OF CHAR; VAR result:RESULTCODES;
  98. pgmfile:ARRAY OF CHAR) : CARDINAL;
  99. CONST (* ExecPgm functions *)
  100. EXEC_SYNC = 0; EXEC_ASYNC = 1;
  101. EXEC_ASYNCRESULT = 2; EXEC_TRACE = 3;
  102. EXEC_BACKGROUND = 4; EXEC_LOAD = 5;
  103. PROCEDURE GetPID(VAR parea:PIDINFO);
  104. PROCEDURE GetPPid(ChildId: CARDINAL; VAR ParentId: CARDINAL): CARDINAL;
  105. PROCEDURE GetPrty(scope:CARDINAL; VAR prty:CARDINAL; procid:CARDINAL) : CARDINAL;
  106. PROCEDURE SetPrty(scope,class:CARDINAL; delta:INTEGER; procid:CARDINAL) : CARDINAL;
  107. CONST (* Priority scopes, classes & deltas *)
  108. PRTYS_PROCESS = 0; PRTYS_PROCESSTREE = 1; PRTYS_THREAD = 2;
  109. PRTYC_NOCHANGE = 0; PRTYC_IDLETIME = 1;
  110. PRTYC_REGULAR = 2; PRTYC_TIMECRITICAL = 3;
  111. PRTYC_FOREGROUNDSERVER = 4;
  112. PRTYD_MINIMUM = -31;
  113. PRTYD_MAXIMUM = 31;
  114. PROCEDURE KillProcess(action,procid:CARDINAL) : CARDINAL;
  115. CONST (* Values for DosKillProcess *)
  116. DKP_PROCESSTREE = 0; DKP_PROCESS = 1;
  117. (*%E *)
  118. (**)
  119. (*-- Dos Info Segment support ----------------------------------------------*)
  120. (**)
  121. (*%T i_INFOSEG *)
  122. TYPE
  123. (* Global info seg *)
  124. GINFOSEG = RECORD
  125. time : LONGCARD;
  126. msecs : LONGCARD;
  127. hour : SHORTCARD;
  128. minutes : SHORTCARD;
  129. seconds : SHORTCARD;
  130. hundredths : SHORTCARD;
  131. timezone : CARDINAL;
  132. usecTimerInterval : CARDINAL;
  133. day : SHORTCARD;
  134. month : SHORTCARD;
  135. year : CARDINAL;
  136. weekday : SHORTCARD;
  137. majorVersion : SHORTCARD;
  138. minorVersion : SHORTCARD;
  139. revisionLetter : SHORTCARD;
  140. current : SHORTCARD;
  141. gMax : SHORTCARD;
  142. hugeShift : SHORTCARD;
  143. protectModeOnly : BOOLEAN;
  144. pidForeground : CARDINAL;
  145. dynamicSched : BOOLEAN;
  146. secMaxWait : SHORTCARD;
  147. msecMinSlice : CARDINAL;
  148. msecMaxSlice : CARDINAL;
  149. bootdrive : CARDINAL;
  150. amecRAS : ARRAY [0..31] OF SHORTCARD;
  151. windowableVioMax : SHORTCARD;
  152. PMMax : SHORTCARD;
  153. END;
  154. PGINFOSEG = POINTER TO GINFOSEG;
  155. (* Local Info Seg *)
  156. LINFOSEG = RECORD
  157. pidCurrent : CARDINAL;
  158. pidParent : CARDINAL;
  159. prtyCurrent : CARDINAL;
  160. tidCurrent : CARDINAL;
  161. sgCurrent : CARDINAL;
  162. rfProcStatus : SHORTCARD;
  163. dummy1 : SHORTCARD;
  164. foreground : CARDINAL;
  165. typeProcess : SHORTCARD;
  166. dummy2 : SHORTCARD;
  167. selEnvironment : CARDINAL;
  168. offCmdLine : CARDINAL;
  169. dataSegment : CARDINAL;
  170. stack : CARDINAL;
  171. cbHeap : CARDINAL;
  172. hmod : CARDINAL;
  173. selDS : CARDINAL;
  174. END;
  175. PLINFOSEG = POINTER TO LINFOSEG;
  176. CONST
  177. (* Values for local typeProcess field *)
  178. PT_FULLSCREEN = 0; (* Full screen app. *)
  179. PT_REALMODE = 1; (* Real mode process *)
  180. PT_WINDOWABLEVIO = 2; (* VIO windowable app. *)
  181. PT_PM = 3; (* Presentation Manager app. *)
  182. PT_DETACHED = 4; (* Detached app. *)
  183. (* Values for local rfProgStatus field *)
  184. PS_EXITLIST = 1; (* Thread is in exitlist routine *)
  185. PROCEDURE GetInfoSeg(VAR global,local:CARDINAL);
  186. (*%E *)
  187. (**)
  188. (*-- File Manager support ------------------------------------------------*)
  189. (**)
  190. (*%T i_FILEMGR *)
  191. CONST
  192. (* DosChgFilePtr() file position codes *)
  193. FILE_BEGIN = 00H; (* Move relative to beginning of file *)
  194. FILE_CURRENT = 01H; (* Move relative to current fptr position *)
  195. FILE_END = 02H; (* Move relative to end of file *)
  196. (* DosFindFirst/Next Directory handle types *)
  197. HDIR_SYSTEM = 1; (* Use system handle (1) *)
  198. HDIR_CREATE = 0FFFFH; (* Allocate a new, unused handle *)
  199. (* DosCopy control bits; may be or'ed together *)
  200. DCPY_EXISTING = 01H; (* Copy even if target exists *)
  201. DCPY_APPEND = 02H; (* Append to existing file, *)
  202. (* do not replace *)
  203. (* Dosopen/DosQFHandState/DosQueryFileInfo et al file attributes; also *)
  204. (* known as Dso File Mode bits... *)
  205. FILE_NORMAL = 00H;
  206. FILE_READONLY = 01H;
  207. FILE_HIDDEN = 02H;
  208. FILE_SYSTEM = 04H;
  209. FILE_DIRECTORY = 010H;
  210. FILE_ARCHIVED = 020H;
  211. (* DosOpen() actions *)
  212. FILE_EXISTED = 01H;
  213. FILE_CREATED = 02H;
  214. FILE_TRUNCATED = 03H;
  215. (* DosOpen() open flags *)
  216. FILE_OPEN = 01H;
  217. FILE_TRUNCATE = 02H;
  218. FILE_CREATE = 010H;
  219. (* this nibble applies if file already exists xxxx *)
  220. OPEN_ACTION_FAIL_IF_EXISTS = 00H; (* ---- ---- ---- 0000 *)
  221. OPEN_ACTION_OPEN_IF_EXISTS = 01H; (* ---- ---- ---- 0001 *)
  222. OPEN_ACTION_REPLACE_IF_EXISTS = 02H; (* ---- ---- ---- 0010 *)
  223. (* this nibble applies if file does not exist xxxx *)
  224. OPEN_ACTION_FAIL_IF_NEW = 00H; (* ---- ---- 0000 ---- *)
  225. OPEN_ACTION_CREATE_IF_NEW = 010H; (* ---- ---- 0001 ---- *)
  226. (* DosOpen/DosSetFHandState flags *)
  227. OPEN_ACCESS_READONLY = 00H; (* ---- ---- ---- -000 *)
  228. OPEN_ACCESS_WRITEONLY = 01H; (* ---- ---- ---- -001 *)
  229. OPEN_ACCESS_READWRITE = 02H; (* ---- ---- ---- -010 *)
  230. OPEN_SHARE_DENYREADWRITE = 010H; (* ---- ---- -001 ---- *)
  231. OPEN_SHARE_DENYWRITE = 020H; (* ---- ---- -010 ---- *)
  232. OPEN_SHARE_DENYREAD = 030H; (* ---- ---- -011 ---- *)
  233. OPEN_SHARE_DENYNONE = 040H; (* ---- ---- -100 ---- *)
  234. OPEN_FLAGS_NOINHERIT = 080H; (* ---- ---- 1--- ---- *)
  235. OPEN_FLAGS_NO_LOCALITY = 000H; (* ---- -000 ---- ---- *)
  236. OPEN_FLAGS_SEQUENTIAL = 0100H; (* ---- -001 ---- ---- *)
  237. OPEN_FLAGS_RANDOM = 0200H; (* ---- -010 ---- ---- *)
  238. OPEN_FLAGS_RANDOMSEQUENTIAL = 0300H; (* ---- -011 ---- ---- *)
  239. OPEN_FLAGS_NO_CACHE = 01000H; (* ---1 ---- ---- ---- *)
  240. OPEN_FLAGS_FAIL_ON_ERROR = 02000H; (* --1- ---- ---- ---- *)
  241. OPEN_FLAGS_WRITE_THROUGH = 04000H; (* -1-- ---- ---- ---- *)
  242. OPEN_FLAGS_DASD = 08000H; (* 1--- ---- ---- ---- *)
  243. (* DosSearchPath() constants *)
  244. SEARCH_PATH = 00H;
  245. SEARCH_CUR_DIRECTORY = 01H;
  246. SEARCH_ENVIRONMENT = 02H;
  247. SEARCH_IGNORENETERRS = 04H;
  248. (* File IO command words *)
  249. FIO_LOCK = 0; (* Lock Files *)
  250. FIO_UNLOCK = 1; (* Unlock Files *)
  251. FIO_SEEK = 2; (* Seek (set file ptr) *)
  252. FIO_READ = 3; (* File Read *)
  253. FIO_WRITE = 4; (* File Write *)
  254. (* Lock Sharing Modes *)
  255. FIO_NOSHARE = 0; (* None *)
  256. FIO_SHAREREAD = 1; (* Read-Only *)
  257. TYPE
  258. FIOLOCKCMD = RECORD (* FLC FileLockCmd prefix *)
  259. Cmd : CARDINAL; (* Cmd = FIO_LOCK *)
  260. LockCnt: CARDINAL; (* Lock records that follow *)
  261. TimeOut: LONGCARD; (* in Msec *)
  262. END;
  263. FIOLOCKREC = RECORD (* FLR FileLockRecord *)
  264. fShare: CARDINAL; (* FIO_NOSHARE or FIO_SHAREREAD *)
  265. Start: LONGCARD; (* Starting offset for lock region *)
  266. Length: LONGCARD; (* Length of lock region *)
  267. END;
  268. FIOUNLOCKCMD = RECORD (* FUC FileUnlockCmd prefix *)
  269. Cmd: CARDINAL; (* Cmd = FIO_UNLOCK *)
  270. UnlockCnt: CARDINAL; (* Unlock records that follow *)
  271. END;
  272. FIOUNLOCKREC = RECORD (* FUR FileUnlockRecord *)
  273. Start: LONGCARD; (* Starting offset for unlock region *)
  274. Length: LONGCARD; (* Length of unlock region *)
  275. END;
  276. FIOSEEKCMD = RECORD (* Seek command structure *)
  277. Cmd: CARDINAL; (* Cmd = FIO_SEEK *)
  278. Method: CARDINAL; (* One of : FPM_BEGINNING, *)
  279. (* FPM_CURRENT,or FPM_END *)
  280. Distance: LONGCARD; (* Byte offset for seek *)
  281. NewPosition: LONGCARD; (* Bytes from start of file after *)
  282. (* seek *)
  283. END;
  284. FIOREADWRITE = RECORD (* RWC Read&Write command structure *)
  285. Cmd: CARDINAL; (* Cmd = FIO_READ or FIO_WRITE *)
  286. pBuffer: FarADDRESS; (* Pointer to data buffer *)
  287. BufferLen: CARDINAL; (* Bytes in buffer or max size *)
  288. ActualLen: CARDINAL; (* Bytes actually read/written *)
  289. END;
  290. (************************************************************
  291. EA Info Levels & Find First/Next
  292. =========================================
  293. API's: DosFindFirst, DosQueryFileInfo, DosQueryPathInfo, DosSetFileInfo,
  294. DosSetPathInfo
  295. ************************************************************)
  296. CONST
  297. (* File info levels: All listed API's *)
  298. FIL_STANDARD = 1; (* Info level 1, standard file info *)
  299. FIL_QUERYEASIZE = 2; (* Level 2, return Full EA size *)
  300. FIL_QUERYEASFROMLIST = 3; (* Level 3, return requested EA's *)
  301. (* File info levels: Dos...PathInfo only *)
  302. FIL_QUERYFULLNAME = 5; (* Level 5, return fully qualified *)
  303. (* name of file *)
  304. FIL_NAMEISVALID = 6; (* Level 6, check validity of file/path
  305. name for this FSD *)
  306. (* DosFindNotifyFirst() *)
  307. FNOTIL_STANDARD = 1; (* Find-Notify Info level 1: Return
  308. standard directory change info *)
  309. (* DosFsAttach() *)
  310. (* Attact or detach *)
  311. FSATTACH = 0; (* Attach file server *)
  312. FSDETACH = 1; (* Detach file server *)
  313. (* DosFsCtl() *)
  314. (* Routing type *)
  315. FSCTL_HANDLE = 1; (* File Handle directs req routing *)
  316. FSCTL_PATHNAME = 2; (* Path Name directs req routing *)
  317. FSCTL_FSDNAME = 3; (* FSD Name directs req routing *)
  318. (* DosQueryFSAttach() *)
  319. (* Information level types (defines method of query) *)
  320. FSAIL_QUERYNAME = 1; (* Return data for a Drive or Device *)
  321. FSAIL_DEVNUMBER = 2; (* Return data for Ordinal Device # *)
  322. FSAIL_DRVNUMBER = 3; (* Return data for Ordinal Drive # *)
  323. (* Item types (from data structure item "iType") *)
  324. FSAT_CHARDEV = 1; (* Resident character device *)
  325. FSAT_PSEUDODEV = 2; (* Pusedu-character device *)
  326. FSAT_LOCALDRV = 3; (* Local drive *)
  327. FSAT_REMOTEDRV = 4; (* Remote drive attached to FSD *)
  328. (***********
  329. File System Drive Information&gml DosQueryFSInfo DosSetFSInfo
  330. ***********)
  331. (* FS Drive Info Levels *)
  332. FSIL_ALLOC = 1; (* Drive allocation info (Query only) *)
  333. FSIL_VOLSER = 2; (* Drive Volum/Serial info *)
  334. (* DosQueryFHType() *)
  335. (* Handle classes (low 8 bits of Handle Type) *)
  336. FHT_DISKFILE = 00H; (* Disk file handle *)
  337. FHT_CHRDEV = 01H; (* Character device handle *)
  338. FHT_PIPE = 02H; (* Pipe handle *)
  339. (* Handle bits (high 8 bits of Handle Type) *)
  340. FHB_DSKREMOTE = 08000H; (* Remote disk *)
  341. FHB_CHRDEVREMOTE = 08000H; (* Remote character device *)
  342. FHB_PIPEREMOTE = 08000H; (* Remote pipe *)
  343. TYPE
  344. HFILE = CARDINAL;
  345. FDATE = CARDINAL;
  346. FTIME = CARDINAL;
  347. FILEFINDBUF = RECORD
  348. fdateCreation : FDATE;
  349. ftimeCreation : FTIME;
  350. fdateLastAccess : FDATE;
  351. ftimeLastAccess : FTIME;
  352. fdateLastWrite : FDATE;
  353. ftimeLastWrite : FTIME;
  354. fileSize : LONGCARD;
  355. fileAlloc : LONGCARD;
  356. attrFile : CARDINAL;
  357. cname : SHORTCARD;
  358. name : ARRAY [0..12] OF CHAR;
  359. END;
  360. FILEFINDBUF2= RECORD
  361. fdateCreation : FDATE;
  362. ftimeCreation : FTIME;
  363. fdateLastAccess : FDATE;
  364. ftimeLastAccess : FTIME;
  365. fdateLastWrite : FDATE;
  366. ftimeLastWrite : FTIME;
  367. fileSize : LONGCARD;
  368. fileAlloc : LONGCARD;
  369. attrFile : CARDINAL;
  370. cbList : LONGCARD;
  371. cname : SHORTCARD;
  372. name : ARRAY [0..12] OF CHAR;
  373. END;
  374. (* extended attribute structures *)
  375. GEA = RECORD
  376. cbName: SHORTCARD; (* name length not including NULL *)
  377. Name: ARRAY [0..0] OF CHAR; (* attribute name *)
  378. END;
  379. GEALIST = RECORD
  380. cbList: LONGCARD; (* total bytes of structure including full list *)
  381. list: ARRAY [0..0] OF GEA; (* variable length GEA structures *)
  382. END;
  383. FEA = RECORD
  384. fea: SHORTCARD; (* flags *)
  385. cbName: SHORTCARD; (* name length not including NULL *)
  386. cbValue: CARDINAL; (* value length *)
  387. END;
  388. (* flags for _FEA.fea *)
  389. CONST
  390. FEA_NEEDEA = 080H; (* need EA bit *)
  391. TYPE
  392. FEALIST = RECORD
  393. cbList: LONGCARD; (* total bytes of structure including full list *)
  394. list: ARRAY [0..0] OF FEA; (* variable length FEA structures *)
  395. END;
  396. EAOP = RECORD
  397. GEAList: FarADDRESS; (* general EA list *)
  398. FEAList: FarADDRESS; (* full EA list *)
  399. Error: LONGCARD;
  400. END;
  401. (*
  402. * Equates for the types of EAs that follow the convention that we have
  403. * established.
  404. *
  405. * Values 0xFFFE thru 0x8000 are reserved.
  406. * Values 00 thru 0x7fff are user definable.
  407. *)
  408. CONST
  409. EAT_BINARY = 0FFFEH; (* length preceeded binary *)
  410. EAT_ASCII = 0FFFDH; (* length preceeded ASCII *)
  411. EAT_BITMAP = 0FFFBH; (* length preceeded bitmap *)
  412. EAT_METAFILE = 0FFFAH; (* length preceeded metafile *)
  413. EAT_ICON = 0FFF9H; (* length preceeded icon *)
  414. EAT_EA = 0FFEEH; (* length preceeded ASCII ext. attr. *)
  415. (* name of associated data (#include) *)
  416. EAT_MVMT = 0FFDFH; (* multi-valued, multi-typed field *)
  417. EAT_MVST = 0FFDEH; (* multi-valued, single-typed field *)
  418. EAT_ASN1 = 0FFDDH; (* ASN.1 field *)
  419. PROCEDURE Open(name:ARRAY OF CHAR; VAR handle:HFILE; VAR action:CARDINAL; size:LONGCARD;
  420. attrib,flag,mode:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  421. PROCEDURE Open2(name:ARRAY OF CHAR; VAR handle:HFILE; VAR action:CARDINAL; size:LONGCARD;
  422. attrib,flag:CARDINAL;mode:LONGCARD; VAR EA: EAOP; rsrvd:LONGCARD) : CARDINAL;
  423. PROCEDURE Close(handle:HFILE) : CARDINAL;
  424. PROCEDURE Read(handle:HFILE; buffer:FarADDRESS; bufflng:CARDINAL; VAR read:CARDINAL) : CARDINAL;
  425. PROCEDURE Write(handle:HFILE;buffer:FarADDRESS; bufflng:CARDINAL; VAR write:CARDINAL) : CARDINAL;
  426. PROCEDURE Shutdown(rsrvd:LONGCARD): CARDINAL;
  427. TYPE
  428. FILESTATUS = RECORD
  429. fdateCreation : FDATE;
  430. ftimeCreation : FTIME;
  431. fdateLastAccess : FDATE;
  432. ftimeLastAccess : FTIME;
  433. fdateLastWrite : FDATE;
  434. ftimeLastWrite : FTIME;
  435. fileSize : LONGCARD;
  436. fileAlloc : LONGCARD;
  437. attrFile : CARDINAL;
  438. END;
  439. FILESTATUS2 = RECORD
  440. fdateCreation : FDATE;
  441. ftimeCreation : FTIME;
  442. fdateLastAccess : FDATE;
  443. ftimeLastAccess : FTIME;
  444. fdateLastWrite : FDATE;
  445. ftimeLastWrite : FTIME;
  446. fileSize : LONGCARD;
  447. fileAlloc : LONGCARD;
  448. attrFile : CARDINAL;
  449. ListSize : LONGCARD;
  450. END;
  451. FSALLOCATE = RECORD
  452. idFileSystem : LONGCARD;
  453. sectorUnit : LONGCARD;
  454. unit : LONGCARD;
  455. unitAvail : LONGCARD;
  456. sector : CARDINAL;
  457. END;
  458. VOLUMELABEL = RECORD
  459. count: SHORTCARD;
  460. VolLabel: ARRAY [0..11] OF CHAR;
  461. END;
  462. FSINFO = RECORD
  463. fdateCreation: FTIME;
  464. ftimeCreation: FTIME;
  465. vol: VOLUMELABEL;
  466. END;
  467. FILELOCK = RECORD
  468. Offset : LONGINT;
  469. Range : LONGINT;
  470. END;
  471. LOCKRANGE = RECORD
  472. pos,len : LONGCARD;
  473. END ;
  474. HDIR = CARDINAL;
  475. CONST
  476. (* HANDTYPE values *)
  477. HANDTYPE_FILE = 00H;
  478. HANDTYPE_DEVICE = 01H;
  479. HANDTYPE_PIPE = 02H;
  480. HANDTYPE_NETWORK = 08000H;
  481. PROCEDURE Delete(path:ARRAY OF CHAR; rsrvd:LONGCARD) : CARDINAL;
  482. PROCEDURE DupHandle(ohandle :HFILE; VAR nhandle:HFILE) : CARDINAL;
  483. PROCEDURE QFHandState(handle :HFILE; VAR state:CARDINAL) : CARDINAL;
  484. PROCEDURE SetFHandState(handle :HFILE; state:CARDINAL) : CARDINAL;
  485. PROCEDURE QHandType(handle :HFILE; VAR type,flag:CARDINAL) : CARDINAL;
  486. PROCEDURE ReadAsync(handle :HFILE; ramsem : HSEM; VAR result:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL;
  487. VAR bytread:CARDINAL) : CARDINAL;
  488. PROCEDURE WriteAsync(handle :HFILE; ramsem : HSEM; VAR result:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL;
  489. VAR bytwrt:CARDINAL) : CARDINAL;
  490. PROCEDURE FindFirst(file:ARRAY OF CHAR; VAR handle:HDIR; attrib:CARDINAL; VAR result:FILEFINDBUF;
  491. reslng:CARDINAL; VAR count:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  492. PROCEDURE FindFirst2(file:ARRAY OF CHAR; VAR handle:HDIR; attrib:CARDINAL; result: FarADDRESS;
  493. reslng:CARDINAL; VAR count:CARDINAL; InfoLevel: CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  494. PROCEDURE FindNext(handle:HDIR; VAR result:FILEFINDBUF; reslng:CARDINAL;
  495. VAR count:CARDINAL) : CARDINAL;
  496. PROCEDURE FindClose(handle:HDIR) : CARDINAL;
  497. PROCEDURE FindNotifyFirst (Path:ARRAY OF CHAR; VAR h:HDIR; Attr:CARDINAL;
  498. Buf:FarADDRESS; BufSize:CARDINAL; VAR Chg:CARDINAL;
  499. InfoLevel:CARDINAL; TimeOut: LONGCARD; resvd: LONGCARD): CARDINAL;
  500. PROCEDURE FindNotifyNext (h:HDIR; Buf:FarADDRESS; BufSize:CARDINAL; VAR Chg:CARDINAL;
  501. TimeOut:LONGCARD): CARDINAL;
  502. PROCEDURE FindNotifyClose (h:HDIR): CARDINAL;
  503. PROCEDURE FSAttach (Dev,FSD:ARRAY OF CHAR; Data:FarADDRESS; Datasize:CARDINAL;
  504. Op:CARDINAL; resvd:LONGCARD): CARDINAL;
  505. PROCEDURE QFSAttach (Dev:ARRAY OF CHAR; ord:CARDINAL; InfoLevel:CARDINAL;
  506. AttBuf:FarADDRESS; VAR BufSize:CARDINAL; resvd:LONGCARD): CARDINAL;
  507. PROCEDURE FSCtl (date:FarADDRESS; Datamax:CARDINAL; VAR datalen:CARDINAL;
  508. Parms:FarADDRESS; Parmmax:CARDINAL; VAR parmlen:CARDINAL;
  509. fcode:CARDINAL; h:HFILE; Route:CARDINAL; resvd:LONGCARD): CARDINAL;
  510. PROCEDURE NewSize(handle:HFILE; size:LONGCARD) : CARDINAL;
  511. PROCEDURE BufReset(handle:HFILE) : CARDINAL;
  512. PROCEDURE ChgFilePtr(handle:HFILE; distance:LONGINT; method:CARDINAL;
  513. VAR newloc:LONGCARD) : CARDINAL;
  514. PROCEDURE FileLocks(handle:HFILE; VAR unlock,lock:LOCKRANGE) : CARDINAL;
  515. PROCEDURE Move(oldnam,newnam:ARRAY OF CHAR; rsrvd:LONGCARD) : CARDINAL;
  516. PROCEDURE Copy(srcnam,dstnam:ARRAY OF CHAR; mode:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  517. PROCEDURE EditName(Level: CARDINAL; Erc,Edit: ARRAY OF CHAR; VAR Dst: ARRAY OF CHAR;
  518. DstSize: CARDINAL): CARDINAL;
  519. PROCEDURE FileIO(h:HFILE; Cmd:FarADDRESS; CmdLen:CARDINAL; VAR error:LONGINT):CARDINAL;
  520. PROCEDURE MkDir(name:ARRAY OF CHAR; rsrvd:LONGCARD) : CARDINAL;
  521. PROCEDURE MkDir2(name:ARRAY OF CHAR; Buf:FarADDRESS; rsrvd:LONGCARD) : CARDINAL;
  522. PROCEDURE RmDir(name:ARRAY OF CHAR; rsrvd:LONGCARD) : CARDINAL;
  523. PROCEDURE SelectDisk(drive:CARDINAL) : CARDINAL;
  524. PROCEDURE QCurDisk(VAR drive:CARDINAL; VAR map:LONGCARD) : CARDINAL;
  525. PROCEDURE ChDir(dirnam:ARRAY OF CHAR; rsrvd:LONGCARD) : CARDINAL;
  526. PROCEDURE QCurDir(drive:CARDINAL; buffer:FarADDRESS; VAR length:CARDINAL) : CARDINAL;
  527. PROCEDURE QFSInfo(drive,level:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL) : CARDINAL;
  528. (* N.B. Misspeled version for compatibility with older programs only *)
  529. PROCEDURE QFsInfo(drive,level:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL) : CARDINAL;
  530. PROCEDURE SetFSInfo(drive,level:CARDINAL; buffer:FarADDRESS; size:CARDINAL) : CARDINAL;
  531. PROCEDURE QVerify(VAR verify:CARDINAL) : CARDINAL;
  532. PROCEDURE SetVerify(verify:CARDINAL) : CARDINAL;
  533. PROCEDURE SetMaxFH(handles:CARDINAL) : CARDINAL;
  534. PROCEDURE QFileInfo(drive,level:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL) : CARDINAL;
  535. PROCEDURE SetFileInfo(drive,level:CARDINAL; buffer:FarADDRESS; bufflng:CARDINAL) : CARDINAL;
  536. PROCEDURE QPathInfo(Path:ARRAY OF CHAR; InfoLevel:CARDINAL; InfoBuf:FarADDRESS;
  537. BufSize:CARDINAL; resvd:LONGCARD):CARDINAL;
  538. PROCEDURE SetPathInfo(Path:ARRAY OF CHAR; InfoLevel:CARDINAL; InfoBuf:FarADDRESS;
  539. BufSize:CARDINAL; Flags:CARDINAL; resvd:LONGCARD):CARDINAL;
  540. PROCEDURE QFileMode(name:ARRAY OF CHAR; VAR attrib:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  541. PROCEDURE SetFileMode(name:ARRAY OF CHAR; attrib:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  542. PROCEDURE EnumAttribute(Type:CARDINAL; buf:FarADDRESS; Start:LONGCARD;
  543. buf1:FarADDRESS; buf1size:LONGCARD; VAR entries:LONGCARD;
  544. infolevel:CARDINAL; resvd:CARDINAL):CARDINAL;
  545. (* level 1 info returned from DosEnumAttribute *)
  546. TYPE
  547. DENA1 = RECORD
  548. reserved: SHORTCARD; (* 0 *)
  549. cbName: SHORTCARD; (* length of name exculding NULL *)
  550. cbValue: CARDINAL; (* length of value *)
  551. Name: ARRAY [0..0] OF CHAR; (* variable length asciiz name *)
  552. END;
  553. (*%E *)
  554. (**)
  555. (*-- Memory Manager support ----------------------------------------------*)
  556. (**)
  557. (*%T i_MEMMGR *)
  558. PROCEDURE AllocSeg(size:CARDINAL; VAR select:CARDINAL; aflag:CARDINAL) : CARDINAL;
  559. PROCEDURE ReallocSeg(size,select:CARDINAL) : CARDINAL;
  560. PROCEDURE FreeSeg(select:CARDINAL) : CARDINAL;
  561. PROCEDURE GiveSeg(handle,procid:CARDINAL; VAR receive:CARDINAL) : CARDINAL;
  562. PROCEDURE GetSeg(select:CARDINAL) : CARDINAL;
  563. PROCEDURE SizeSeg(select:CARDINAL; VAR size:LONGCARD) : CARDINAL;
  564. CONST
  565. (* Segment attribute flags *)
  566. SEG_NONSHARED = 00H;
  567. SEG_GIVEABLE = 01H;
  568. SEG_GETTABLE = 02H;
  569. SEG_DISCARDABLE = 04H;
  570. PROCEDURE AllocHuge(numseg,size:CARDINAL; VAR select:CARDINAL; maxseg,share:CARDINAL) : CARDINAL;
  571. PROCEDURE ReallocHuge(numseg,size,select:CARDINAL) : CARDINAL;
  572. PROCEDURE GetHugeShift(VAR shift:CARDINAL);
  573. PROCEDURE AllocShrSeg(size:CARDINAL; name:ARRAY OF CHAR; VAR select:CARDINAL) : CARDINAL;
  574. PROCEDURE LockSeg(select:CARDINAL) : CARDINAL;
  575. PROCEDURE UnlockSeg(select:CARDINAL) : CARDINAL;
  576. PROCEDURE GetShrSeg(name:ARRAY OF CHAR; VAR select:CARDINAL) : CARDINAL;
  577. PROCEDURE MemAvail(VAR size:LONGCARD) : CARDINAL;
  578. PROCEDURE CreateCSAlias(datasel:CARDINAL; VAR codesel:CARDINAL) : CARDINAL;
  579. PROCEDURE SubAlloc(segment:CARDINAL; VAR block:CARDINAL; size:CARDINAL) : CARDINAL;
  580. PROCEDURE SubFree(segment,block,size:CARDINAL) : CARDINAL;
  581. PROCEDURE SubSet(segment,flag,size:CARDINAL) : CARDINAL;
  582. (*%E *)
  583. (**)
  584. (*-- Semaphore support ----------------------------------------------------*)
  585. (**)
  586. (*%T i_SEMAPHORE *)
  587. CONST
  588. SEM_INDEFINITE_WAIT = -1; SEM_IMMEDIATE_RETURN = 0;
  589. CSEM_PRIVATE = 0; CSEM_PUBLIC = 1;
  590. PROCEDURE SemClear(handle:HSEM) : CARDINAL;
  591. PROCEDURE SemSet(handle:HSEM) : CARDINAL;
  592. PROCEDURE SemWait(handle:HSEM; timeout:LONGINT) : CARDINAL;
  593. PROCEDURE SemSetWait(handle:HSEM; timeout:LONGINT) : CARDINAL;
  594. PROCEDURE SemRequest(handle:HSEM; timeout:LONGINT) : CARDINAL;
  595. PROCEDURE CreateSem(excl:CARDINAL; VAR handle:HSEM; name:ARRAY OF CHAR) : CARDINAL;
  596. PROCEDURE OpenSem(VAR handle:HSEM; name:ARRAY OF CHAR) : CARDINAL;
  597. PROCEDURE CloseSem(handle:HSEM) : CARDINAL;
  598. TYPE
  599. MUXSEM = RECORD
  600. zero : CARDINAL;
  601. sem : HSEM;
  602. END;
  603. MUXSEMLIST = RECORD
  604. cmxs : CARDINAL;
  605. amxs : ARRAY [0..15] OF MUXSEM;
  606. END;
  607. DOSFSRSEM = RECORD
  608. len : CARDINAL;
  609. pid,tid : CARDINAL;
  610. use : CARDINAL;
  611. client : CARDINAL;
  612. ramsem : HSEM;
  613. END;
  614. PROCEDURE MuxSemWait(VAR index:CARDINAL; list:FarADDRESS; timeout:LONGINT) : CARDINAL;
  615. PROCEDURE FSRamSemRequest(VAR s:DOSFSRSEM; to:LONGINT) : CARDINAL;
  616. PROCEDURE FSRamSemClear(VAR s:DOSFSRSEM) : CARDINAL;
  617. (*%E *)
  618. (**)
  619. (*-- Time support ---------------------------------------------------------*)
  620. (**)
  621. (*%T i_DATETIME *)
  622. TYPE
  623. DATETIME = RECORD
  624. hours : SHORTCARD;
  625. minutes : SHORTCARD;
  626. seconds : SHORTCARD;
  627. hundredths : SHORTCARD;
  628. day : SHORTCARD;
  629. month : SHORTCARD;
  630. year : CARDINAL;
  631. timezone : INTEGER;
  632. weekday : SHORTCARD;
  633. END;
  634. PROCEDURE GetDateTime(VAR data:DATETIME) : CARDINAL;
  635. PROCEDURE SetDateTime(VAR data:DATETIME) : CARDINAL;
  636. TYPE
  637. HTIMER = CARDINAL;
  638. PROCEDURE TimerAsync(interval:LONGCARD; semaphore:HSEM; VAR handle:HTIMER) : CARDINAL;
  639. PROCEDURE TimerStart(interval:LONGCARD; semaphore:HSEM; VAR handle:HTIMER) : CARDINAL;
  640. PROCEDURE TimerStop(handle:HTIMER) : CARDINAL;
  641. (*%E *)
  642. (**)
  643. (*-- Module Manager -------------------------------------------------------*)
  644. (**)
  645. (*%T i_MODULEMGR *)
  646. PROCEDURE LoadModule(buffaddr:FarADDRESS; bufflen:CARDINAL; name:ARRAY OF CHAR; VAR handle:CARDINAL) : CARDINAL;
  647. PROCEDURE FreeModule(handle:CARDINAL) : CARDINAL;
  648. PROCEDURE GetProcAddr(handle:CARDINAL; name:ARRAY OF CHAR; VAR addr: Os2ProcType) : CARDINAL;
  649. PROCEDURE GetModHandle(name:ARRAY OF CHAR; VAR handle:CARDINAL) : CARDINAL;
  650. PROCEDURE GetModName(handle,bufflng:CARDINAL; VAR buffer:ARRAY OF CHAR) : CARDINAL;
  651. (*%E *)
  652. (**)
  653. (*-- Resource support -----------------------------------------------------*)
  654. (**)
  655. (*%T i_RESOURCE *)
  656. CONST
  657. RT_POINTER = 1; RT_BITMAP = 2; RT_MENU = 3; RT_DIALOG = 4;
  658. RT_STRING = 5; RT_FONTDIR = 6; RT_FONT = 7; RT_ACCELTABLE = 8;
  659. RT_RCDATA = 9; RT_MESSAGE = 10; RT_DLGINCLUDE = 11; RT_VKEYTBL = 12;
  660. RT_KEYTBL = 13; RT_CHARTBL = 14; RT_DISPLAYINFO = 15; RT_FKASHORT = 16;
  661. RT_FKALONG = 17; RT_HELPTABLE = 18; RT_HELPSUBTABLE = 19; RT_FDDIR = 20;
  662. RT_FD = 21; RT_MAX = 22;
  663. PROCEDURE GetResource(m:CARDINAL; t,n:CARDINAL; VAR sel:CARDINAL):CARDINAL;
  664. PROCEDURE GetResource2(m:CARDINAL; t,n:CARDINAL; VAR data: FarADDRESS):CARDINAL;
  665. PROCEDURE FreeResource(pData: FarADDRESS): CARDINAL;
  666. (*%E*)
  667. (**)
  668. (**--- National Language Support -------------------------------------------*)
  669. (**)
  670. (*%T i_NLS*)
  671. TYPE
  672. COUNTRYCODE = RECORD
  673. country : CARDINAL;
  674. codepage : CARDINAL;
  675. END;
  676. COUNTRYINFO = RECORD
  677. country : CARDINAL;
  678. codepage : CARDINAL;
  679. dateFmt : CARDINAL;
  680. currency : ARRAY [0..4] OF CHAR;
  681. thousandsSeparator : ARRAY [0..1] OF CHAR;
  682. decimal : ARRAY [0..1] OF CHAR;
  683. dateSeparator : ARRAY [0..1] OF CHAR;
  684. timeSeparator : ARRAY [0..1] OF CHAR;
  685. currencyFmt : SHORTCARD;
  686. decimalPlace : SHORTCARD;
  687. timeFmt : SHORTCARD;
  688. reserved1 : ARRAY [0..1] OF CARDINAL;
  689. dataSeparator : ARRAY [0..1] OF CHAR;
  690. reserved2 : ARRAY [0..4] OF CARDINAL;
  691. END;
  692. PROCEDURE GetCtryInfo(length:CARDINAL; VAR cntry:COUNTRYCODE; VAR buffer:COUNTRYINFO; VAR retlngth:CARDINAL) : CARDINAL;
  693. PROCEDURE GetDBCSEv(length:CARDINAL; VAR cntry:COUNTRYCODE; buffer:FarADDRESS) : CARDINAL;
  694. PROCEDURE CaseMap(length:CARDINAL; VAR cntry:COUNTRYCODE; binstrg:FarADDRESS) : CARDINAL;
  695. PROCEDURE GetCollate(length:CARDINAL; VAR cntry:COUNTRYCODE; buffer:FarADDRESS; VAR rlng:CARDINAL) : CARDINAL;
  696. PROCEDURE GetCp(length:CARDINAL; VAR cplist,rlng:CARDINAL) : CARDINAL;
  697. PROCEDURE SetCp(cpage,rsrvd:CARDINAL) : CARDINAL;
  698. PROCEDURE SetProcCp(cpage,rsrvd:CARDINAL) : CARDINAL;
  699. (*%E*)
  700. (**)
  701. (**--- Signal manager -----------------------------------------------------*)
  702. (**)
  703. (*%T i_SIGNAL *)
  704. CONST
  705. (* Signal Numbers for DosSetSigHandler *)
  706. SIG_CTRLC = 1; SIG_BROKENPIPE = 2; SIG_KILLPROCESS = 3;
  707. SIG_CTRLBREAK = 4; SIG_PFLG_A = 5; SIG_PFLG_B = 6;
  708. SIG_PFLG_C = 7; SIG_CSIGNALS = 8;
  709. (* Flag Numbers for DosFlagProcess *)
  710. PFLG_A = 0; PFLG_B = 1; PFLG_C = 2;
  711. (* Signal actions *)
  712. SIGA_KILL = 0; SIGA_IGNORE = 1; SIGA_ACCEPT = 2;
  713. SIGA_ERROR = 3; SIGA_ACKNOWLEDGE = 4;
  714. (* DosHoldSignal constants *)
  715. HLDSIG_ENABLE = 0; HLDSIG_DISABLE = 1;
  716. (* DosFlagProcess codes *)
  717. FLGP_SUBTREE = 0; FLGP_PID = 1;
  718. (*# save *)
  719. (*# call(reg_saved => (ds,si,di,st1,st2),
  720. near_call=>off) *)
  721. TYPE
  722. SIGHANDLER = PROCEDURE (CARDINAL,CARDINAL);
  723. (*# restore *)
  724. PROCEDURE SetSigHandler(raddr:SIGHANDLER; VAR paddr:SIGHANDLER; VAR paction:CARDINAL; action,signbr:CARDINAL) : CARDINAL;
  725. PROCEDURE FlagProcess(procid,action,flagnum,flagarg:CARDINAL) : CARDINAL;
  726. PROCEDURE HoldSignal(action:CARDINAL) : CARDINAL;
  727. PROCEDURE SendSignal(pid,signum:CARDINAL) : CARDINAL;
  728. (*%E*)
  729. (**)
  730. (**--- Device Monitors -----------------------------------------------------*)
  731. (**)
  732. (*%T i_MONITOR*)
  733. TYPE
  734. HMONITOR = CARDINAL;
  735. PROCEDURE MonOpen(name:ARRAY OF CHAR; VAR handle:HMONITOR) : CARDINAL;
  736. PROCEDURE MonClose(handle:HMONITOR) : CARDINAL;
  737. PROCEDURE MonReg(handle:HMONITOR; buffi,buffo : FarADDRESS;flag,indx:CARDINAL) : CARDINAL;
  738. PROCEDURE MonRead(inbuffs :FarADDRESS; wait:CARDINAL; doffs:FarADDRESS; VAR bytcnt:CARDINAL) : CARDINAL;
  739. PROCEDURE MonWrite(inbuffs :FarADDRESS; doffs:FarADDRESS; bytcnt :CARDINAL) : CARDINAL;
  740. (*%E*)
  741. (**)
  742. (**--- Pipe and Queue support ---------------------------------------------*)
  743. (**)
  744. (*%T i_QUEUES *)
  745. TYPE
  746. HQUEUE = CARDINAL;
  747. QINFO = RECORD
  748. pid : CARDINAL;
  749. app : CARDINAL;
  750. END ;
  751. CONST
  752. (* Values for CreateQueue *)
  753. QUE_FIFO = 0; QUE_LIFO = 1; QUE_PRIORITY = 2;
  754. PROCEDURE MakePipe(VAR rhandle,whandle:CARDINAL; size:CARDINAL) : CARDINAL;
  755. PROCEDURE CloseQueue(handle:HQUEUE) : CARDINAL;
  756. PROCEDURE CreateQueue(VAR handle:HQUEUE; priority:CARDINAL; name:ARRAY OF CHAR) : CARDINAL;
  757. PROCEDURE OpenQueue(VAR owner:CARDINAL; VAR handle:HQUEUE; name:ARRAY OF CHAR) : CARDINAL;
  758. PROCEDURE PeekQueue(handle:HQUEUE;VAR rqst:QINFO; VAR lng:CARDINAL; VAR addr:FarADDRESS;
  759. VAR code: CARDINAL; wait :CARDINAL; VAR prty: CARDINAL; sem: HSEM ) : CARDINAL ;
  760. PROCEDURE PurgeQueue(handle:HQUEUE) : CARDINAL;
  761. PROCEDURE QueryQueue(handle:HQUEUE; VAR number:CARDINAL) : CARDINAL;
  762. PROCEDURE ReadQueue(handle:HQUEUE;VAR rqst:QINFO; VAR lng:CARDINAL; VAR addr:FarADDRESS;
  763. code,wait :CARDINAL; VAR prty: CARDINAL; sem: HSEM ) : CARDINAL ;
  764. PROCEDURE WriteQueue(handle:HQUEUE;rqst,length:CARDINAL; data :FarADDRESS;prty:CARDINAL) : CARDINAL ;
  765. (*%E*)
  766. (**)
  767. (**--- Miscellanous Dos services ------------------------------------------*)
  768. (**)
  769. (*%T i_MISC *)
  770. PROCEDURE Error(flag:CARDINAL) : CARDINAL;
  771. PROCEDURE SetVec(vector:CARDINAL; routin: Os2ProcType; VAR prev: Os2ProcType) : CARDINAL;
  772. PROCEDURE GetMessage(vartab:FarADDRESS; varcnt:CARDINAL; VAR data:ARRAY OF CHAR; length:CARDINAL;
  773. msgnbr:CARDINAL; msgfile:ARRAY OF CHAR; VAR msglng:CARDINAL) : CARDINAL;
  774. PROCEDURE ErrClass(ecode:CARDINAL; VAR eclass,action,locus:CARDINAL);
  775. PROCEDURE InsMessage(table:FarADDRESS;count:CARDINAL;input:FarADDRESS;
  776. inlength:CARDINAL; data:FarADDRESS ;
  777. length:CARDINAL; VAR mlength:CARDINAL) : CARDINAL;
  778. PROCEDURE PutMessage(handle:HFILE; length:CARDINAL; buffer:ARRAY OF CHAR) : CARDINAL;
  779. PROCEDURE PTrace(b : FarADDRESS):CARDINAL;
  780. CONST
  781. (* definition for DOSQSYSINFO *)
  782. Q_MAX_PATH_LENGTH = 0; (* index for query max path length *)
  783. PROCEDURE QSysInfo (index:CARDINAL; Buf:FarADDRESS; bufsize:CARDINAL):CARDINAL;
  784. PROCEDURE GetEnv(VAR environ,cmdoff:CARDINAL) : CARDINAL;
  785. PROCEDURE ScanEnv(environ:ARRAY OF CHAR; VAR cmdoff:FarADDRESS) : CARDINAL;
  786. PROCEDURE SearchPath(cntrl:CARDINAL; path:ARRAY OF CHAR;
  787. file:ARRAY OF CHAR; rbuff:FarADDRESS ; buflen:CARDINAL) : CARDINAL;
  788. PROCEDURE GetVersion(VAR vnumber:CARDINAL);
  789. PROCEDURE GetMachineMode(VAR mode:CARDINAL);
  790. (*%E*)
  791. (**)
  792. (**--- Session Manager Routines --------------------------------------------*)
  793. (**)
  794. (*%T i_SESSION*)
  795. TYPE
  796. STARTDATA = RECORD
  797. length : CARDINAL;
  798. related : CARDINAL;
  799. fgBg : CARDINAL;
  800. traceOpt : CARDINAL;
  801. pgmTitle : FarADDRESS;
  802. pgmName : FarADDRESS;
  803. pgmInputs : FarADDRESS;
  804. termQ : FarADDRESS;
  805. env : FarADDRESS;
  806. inherit : CARDINAL;
  807. sesstype : CARDINAL;
  808. iconfile : FarADDRESS;
  809. pgmhandle : FarADDRESS;
  810. pgmcontrol : CARDINAL;
  811. initX,initY : CARDINAL;
  812. initXsize : CARDINAL;
  813. initYsize : CARDINAL;
  814. END;
  815. STATUSDATA = RECORD
  816. length : CARDINAL;
  817. selectInd : CARDINAL;
  818. bondInd : CARDINAL;
  819. END;
  820. REGISTERDATA = RECORD
  821. Length: CARDINAL; (* length of this data structure *)
  822. NotifType: CARDINAL; (* type of notification *)
  823. DDName: FarADDRESS; (* pointer to device driver name *)
  824. END;
  825. CONST
  826. STARTDATASIZE0 = VSIZE(STARTDATA.termQ); (* Size for V1.0 *)
  827. PROCEDURE StartSession(VAR sdata:STARTDATA; VAR sessid,pid:CARDINAL) : CARDINAL;
  828. PROCEDURE SetSession(sessid:CARDINAL; VAR status:STATUSDATA) : CARDINAL;
  829. PROCEDURE SelectSession(sessid:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  830. PROCEDURE StopSession(target,sessid:CARDINAL; rsrvd:LONGCARD) : CARDINAL;
  831. PROCEDURE SmRegisterDD(VAR rdata: REGISTERDATA) : CARDINAL;
  832. PROCEDURE QAppType(n:ARRAY OF CHAR; VAR t:CARDINAL) : CARDINAL;
  833. (*%E*)
  834. (**)
  835. (**--- Device Support -----------------------------------------------------*)
  836. (**)
  837. (*%T i_DEVICE*)
  838. PROCEDURE DevConfig(device:FarADDRESS; item,rsrvd:CARDINAL) : CARDINAL;
  839. PROCEDURE DevIOCtl(data:FarADDRESS; parms:FarADDRESS; functn,categry,device:CARDINAL) : CARDINAL;
  840. PROCEDURE DevIOCtl2(data:FarADDRESS; datalen:CARDINAL;
  841. parms:FarADDRESS; parmlen:CARDINAL; functn,categry,device:CARDINAL) : CARDINAL;
  842. PROCEDURE CLIAccess();
  843. PROCEDURE PortAccess(rsrvd,type,first,last:CARDINAL) : CARDINAL;
  844. PROCEDURE PhysicalDisk(func:CARDINAL; buff:FarADDRESS;blng:CARDINAL; parms:FarADDRESS; plng:CARDINAL) : CARDINAL;
  845. PROCEDURE CallBack (p : Os2ProcType);
  846. PROCEDURE R2StackRealloc(ns:CARDINAL):CARDINAL;
  847. (*%E*)
  848. (**)
  849. (**--- Dos Named Pipes -----------------------------------------------------*)
  850. (**)
  851. (*%T i_NMPIPES*)
  852. TYPE
  853. HPIPE = CARDINAL;
  854. AVAILBUF = RECORD buffered,curmsg : CARDINAL END;
  855. PROCEDURE CallNmPipe(fn:ARRAY OF CHAR; ib:ARRAY OF BYTE; il:CARDINAL; VAR ob:ARRAY OF BYTE; ol:CARDINAL; VAR r:CARDINAL; to:LONGCARD) : CARDINAL;
  856. PROCEDURE ConnectNmPipe(p:HPIPE) : CARDINAL;
  857. PROCEDURE DisConnectNmPipe(p:HPIPE) : CARDINAL;
  858. PROCEDURE MakeNmPipe(fn:ARRAY OF CHAR; VAR p:HPIPE; om,pm,obs,ibs:CARDINAL; to:LONGCARD) : CARDINAL;
  859. PROCEDURE PeekNmPipe(p:HPIPE; VAR ob:ARRAY OF BYTE; bl:CARDINAL; VAR r:CARDINAL; VAR a:AVAILBUF; VAR ps:CARDINAL) : CARDINAL;
  860. PROCEDURE QNmPHandState(p:HPIPE; VAR ps:CARDINAL) : CARDINAL;
  861. PROCEDURE QNmPipeInfo(p:HPIPE; il:CARDINAL; VAR ib:ARRAY OF BYTE; ibs:CARDINAL) : CARDINAL;
  862. PROCEDURE QNmPipeSemState(s:HSEM; VAR ib:ARRAY OF BYTE; ibs:CARDINAL) : CARDINAL;
  863. PROCEDURE SetNmPHandState(p:HPIPE; s:CARDINAL) : CARDINAL;
  864. PROCEDURE SetNmPipeSem(p:HPIPE; s:HSEM; kh:CARDINAL) : CARDINAL;
  865. PROCEDURE TransactNmPipe(p:HPIPE; ib:ARRAY OF BYTE; ibl:CARDINAL; VAR ob:ARRAY OF BYTE; obl:CARDINAL; VAR r:CARDINAL) : CARDINAL;
  866. PROCEDURE WaitNmPipe(n:ARRAY OF CHAR; to:LONGCARD) : CARDINAL;
  867. (* Data structures and constants used with named pipes *)
  868. TYPE
  869. npi_data1 = RECORD (* PipeInfo data block (returned, level 1) *)
  870. npi_obuflen : CARDINAL; (* length of outgoing I/O buffer *)
  871. npi_ibuflen : CARDINAL; (* length of incoming I/O buffer *)
  872. npi_maxicnt : SHORTCARD; (* maximum number of instances *)
  873. npi_curicnt : SHORTCARD; (* current number of instances *)
  874. npi_namlen : SHORTCARD; (* length of pipe name *)
  875. npi_name : ARRAY[0..0] OF CHAR; (* start of name *)
  876. END;
  877. npss = RECORD (* QNmPipeSemState information record *)
  878. npss_status : SHORTCARD; (* type of record, 0=EOI, 1=read ok, 2 = write ok, 3 = pipe closed *)
  879. npss_flag : SHORTCARD; (* additional info, 01=waiting thread *)
  880. npss_key : CARDINAL; (* user's key value *)
  881. npss_avail : CARDINAL; (* available data/space if status=1/2 *)
  882. END;
  883. CONST
  884. (* values in npss_status *)
  885. NPSS_EOI = 0; (* End Of Information *)
  886. NPSS_RDATA = 1; (* read data available *)
  887. NPSS_WSPACE = 2; (* write space available *)
  888. NPSS_CLOSE = 3; (* pipe in CLOSING state *)
  889. (* values in npss_flag *)
  890. NPSS_WAIT = 01H; (* waiting thread on other end of pipe *)
  891. (* defined bits in pipe mode *)
  892. NP_NBLK = 08000H; (* non-blocking read/write *)
  893. NP_SERVER = 04000H; (* set if server end *)
  894. NP_WMESG = 00400H; (* write messages *)
  895. NP_RMESG = 00100H; (* read as messages *)
  896. NP_ICOUNT = 000FFH; (* instance count field *)
  897. (* Values for named pipe state *)
  898. NP_DISCONNECTED = 1; (* after pipe creation or Disconnect *)
  899. NP_LISTENING = 2; (* after DosNmPipeConnect *)
  900. NP_CONNECTED = 3; (* after Client open *)
  901. NP_CLOSING = 4; (* after Client or Server close *)
  902. (*%E*)
  903. (**)
  904. (**--- Dos Font Support ----------------------------------------------------*)
  905. (**)
  906. (*%T i_FONT*)
  907. TYPE
  908. HSPL = FarADDRESS;
  909. PROCEDURE PFSActivate(s:HSPL; VAR w:LONGCARD; n:ARRAY OF CHAR; c,i,f:CARDINAL; z:LONGCARD) : CARDINAL;
  910. PROCEDURE PFSCloseUser(n:ARRAY OF CHAR; f:CARDINAL; z:LONGCARD) : CARDINAL;
  911. PROCEDURE PFSInit(pl:ARRAY OF CARDINAL; fn,pt1,pt2:ARRAY OF CHAR; i:CARDINAL; z:LONGCARD) : CARDINAL;
  912. PROCEDURE PFSQueryAct(n:ARRAY OF CHAR; VAR c,i:CARDINAL; f:CARDINAL; z:LONGCARD) : CARDINAL;
  913. PROCEDURE PFSVerifyFont(n:ARRAY OF CHAR; c,i:CARDINAL; z:LONGCARD) : CARDINAL;
  914. (*%E*)
  915. VAR
  916. NULL [0:0] : BYTE ; (* equivalent of NIL for VAR params *)
  917. END Dos.
  918.