home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / m2posx02 / oscalls.m2h < prev    next >
Text File  |  1993-10-23  |  18KB  |  898 lines

  1. /* Definitionen fuer "GEMDOS"-``Inline''-Betriebssystemaufrufe.
  2.  *
  3.  * Die Datei ist mit: #include "oscalls.m2h"  noch vor dem eigentlichen
  4.  * Programmcode (z.B. als letzte ``Importdatei'') in die M2-Datei einzuladen.
  5.  * Die Datei kann sowohl im aktuellen Verzeichnis zusammen mit den M2-Dateien
  6.  * stehen, als auch im Verzeichnis, in dem der Praeprozessor nach Include-
  7.  * Dateien sucht; falls der GNU-Praeprozessor (gcc-cpp) benutzt wird, muss
  8.  * hierfuer die Environmentvariable GNUINC gesetzt werden, z.B.:
  9.  *
  10.  *   setenv GNUINC f:\usr\include\m2
  11.  *
  12.  * Die Argumente der Makros sollten nur einfache (nicht Teil eines RECORDs
  13.  * oder eines ARRAYs), lokale (vor allem keine VAR-Parameter) Variablen sein.
  14.  *
  15.  * "GEMDOS": Es wird nur das Datenregister D0 fuer die Parameteruebergabe
  16.  * benoetigt, das "GEMDOS" selbst veraendert die Register D0-D2 und A0-A2.
  17.  */
  18.  
  19. /* "GEMDOS"-Funktionsnummern */
  20.  
  21. #define PTERM0 0
  22. #define CCONIN 1
  23. #define CCONOUT 2
  24. #define CAUXIN 3
  25. #define CAUXOUT 4
  26. #define CPRNOUT 5
  27. #define CRAWIO 6
  28. #define CRAWCIN 7
  29. #define CNECIN 8
  30. #define CCONWS 9
  31. #define CCONRS 10
  32. #define CCONIS 11
  33. #define DSETDRV 14
  34. #define CCONOS 16
  35. #define CPRNOS 17
  36. #define CAUXIS 18
  37. #define CAUXOS 19
  38. #define MADDALT 20
  39. #define DGETDRV 25
  40. #define FSETDTA 26
  41. #define SUPER 32
  42. #define TGETDATE 42
  43. #define TSETDATE 43
  44. #define TGETTIME 44
  45. #define TSETTIME 45
  46. #define FGETDTA 47
  47. #define SVERSION 48
  48. #define PTERMRES 49
  49. #define DFREE 54
  50. #define DCREATE 57
  51. #define DDELETE 58
  52. #define DSETPATH 59
  53. #define FCREATE 60
  54. #define FOPEN 61
  55. #define FCLOSE 62
  56. #define FREAD 63
  57. #define FWRITE 64
  58. #define FDELETE 65
  59. #define FSEEK 66
  60. #define FATTRIB 67
  61. #define MXALLOC 68
  62. #define FDUP 69
  63. #define FFORCE 70
  64. #define DGETPATH 71
  65. #define MALLOC 72
  66. #define MFREE 73
  67. #define MSHRINK 74
  68. #define PEXEC 75
  69. #define PTERM 76
  70. #define FSFIRST 78
  71. #define FSNEXT 79
  72. #define FRENAME 86
  73. #define FDATIME 87
  74. #define FLOCK 92
  75.  
  76. #if MINT /* "MiNT-GEMDOS"-Erweiterungen (bis Version 0.99) */
  77. #define SYIELD 255
  78. #define FPIPE 256
  79. #define FCNTL 260
  80. #define FINSTAT 261
  81. #define FOUTSTAT 262
  82. #define FGETCHAR 263
  83. #define FPUTCHAR 264
  84. #define PWAIT 265
  85. #define PNICE 266
  86. #define PGETPID 267
  87. #define PGETPPID 268
  88. #define PGETPGRP 269
  89. #define PSETPGRP 270
  90. #define PGETUID 271
  91. #define PSETUID 272
  92. #define PKILL 273
  93. #define PSIGNAL 274
  94. #define PVFORK 275
  95. #define PGETGID 276
  96. #define PSETGID 277
  97. #define PSIGBLOCK 278
  98. #define PSIGSETMASK 279
  99. #define PUSRVAL 280
  100. #define PDOMAIN 281
  101. #define PSIGRETURN 282
  102. #define PFORK 283
  103. #define PWAIT3 284
  104. #define FSELECT 285
  105. #define PRUSAGE 286
  106. #define PSETLIMIT 287
  107. #define TALARM 288
  108. #define PAUSE 289
  109. #define SYSCONF 290
  110. #define PSIGPENDING 291
  111. #define DPATHCONF 292
  112. #define PMSG 293
  113. #define FMIDIPIPE 294
  114. #define PRENICE 295
  115. #define DOPENDIR 296
  116. #define DREADDIR 297
  117. #define DREWINDDIR 298
  118. #define DCLOSEDIR 299
  119. #define FXATTR 300
  120. #define FLINK 301
  121. #define FSYMLINK 302
  122. #define FREADLINK 303
  123. #define DCNTL 304
  124. #define FCHOWN 305
  125. #define FCHMOD 306
  126. #define PUMASK 307
  127. #define PSEMAPHORE 308
  128. #define DLOCK 309
  129. #define PSIGPAUSE 310
  130. #define PSIGACTION 311
  131. #define PGETEUID 312
  132. #define PGETEGID 313
  133. #define PWAITPID 314
  134. #define DGETCWD 315
  135. #define SALERT 316
  136. #endif /* MINT */
  137.  
  138. /* "XBIOS" */
  139. #define SUPEXEC 38
  140. /* "BIOS" */
  141. #define SETEXC 5
  142.  
  143.  
  144. #define DTRAP 4E41H
  145. #define BTRAP 4E4DH
  146. #define XTRAP 4E4EH
  147.  
  148. #define PSHW 3F00H /* MOVE.W D0, -(sp) */
  149. #define PSHL 2F00H /* MOVE.L D0, -(sp) */
  150. #define PSHC 3F3CH /* MOVE.W #<const>, -(sp) */
  151. #define ADDQ2 548FH /* ADDQ.l #2, sp */
  152. #define ADDQ4 588FH /* ADDQ.l #4, sp */
  153. #define ADDQ6 5C8FH /* ADDQ.l #6, sp */
  154. #define ADDQ8 508FH /* ADDQ.l #8, sp */
  155. #define LEA 4FEFH /* LEA <const>(sp), sp */
  156.  
  157.  
  158. #if HM2 || TDIM2 || MM2 || LPRM2 || SPCM2 || FTLM2
  159.  
  160. #define DCALL0(f)\
  161.  CODE(PSHC,f,DTRAP,ADDQ2)
  162.  
  163. #define DCALL1w(f,p)\
  164.  SETREG(0,p);CODE(PSHW,PSHC,f,DTRAP,ADDQ4)
  165.  
  166. #define DCALL2w(f,p1,p2)\
  167.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ6)
  168.  
  169. #define DCALL3w(f,p1,p2,p3)\
  170.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  171. CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  172.  
  173. #define DCALL1w1l(f,p1,p2)\
  174.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  175.  
  176. #define DCALL1w2l(f,p1,p2,p3)\
  177.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  178. CODE(PSHW,PSHC,f,DTRAP,LEA,12)
  179.  
  180. #define DCALL1w3l(f,p1,p2,p3,p4)\
  181.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);\
  182. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,16)
  183.  
  184. #define DCALL2w1l(f,p1,p2,p3)\
  185.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  186. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  187.  
  188. #define DCALL2w2l(f,p1,p2,p3,p4)\
  189.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);\
  190. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,14)
  191.  
  192. #define DCALL1w1l1w(f,p1,p2,p3)\
  193.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  194. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  195.  
  196. #define DCALL1l(f,p)\
  197.  SETREG(0,p);CODE(PSHL,PSHC,f,DTRAP,ADDQ6)
  198.  
  199. #define DCALL2l(f,p1,p2)\
  200.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  201.  
  202. #define DCALL1l1w(f,p1,p2)\
  203.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,ADDQ8)
  204.  
  205. #define DCALL1l2w(f,p1,p2,p3)\
  206.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  207. CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  208.  
  209.  
  210. #define XCALL1l(f,p)\
  211.  SETREG(0,p);CODE(PSHL,PSHC,f,XTRAP,ADDQ6)
  212.  
  213. #define BCALL1w1l(f,p1,p2)\
  214.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,BTRAP,ADDQ8)
  215.  
  216. #endif
  217.  
  218.  
  219. /*==========================================================================*/
  220. /*                           "GEMDOS"-Calls                                 */
  221. /*==========================================================================*/
  222.  
  223.  
  224. #define Pterm0()\
  225.  DCALL0(PTERM0)
  226.  
  227. #define Cconin(_KEY)\
  228.  SAVEREGS\
  229.  DCALL0(CCONIN);\
  230.  RESTOREREGS\
  231.  GETLREG(0,_KEY)
  232.  
  233. #define Cconout(_CHAR)\
  234.  SAVEREGS\
  235.  DCALL1w(CCONOUT,_CHAR);\
  236.  RESTOREREGS
  237.  
  238. #define Cauxin(_CHAR)\
  239.  SAVEREGS\
  240.  DCALL0(CAUXIN);\
  241.  RESTOREREGS\
  242.  GETSWREG(0,_CHAR)
  243.  
  244. #define Cauxout(_CHAR)\
  245.  SAVEREGS\
  246.  DCALL1w(CAUXOUT,_CHAR);\
  247.  RESTOREREGS
  248.  
  249. #define Cprnout(_CHAR)\
  250.  SAVEREGS\
  251.  DCALL1w(CPRNOUT,_CHAR);\
  252.  RESTOREREGS
  253.  
  254. #define Crawio(_DAT,_RES)\
  255.  SAVEREGS\
  256.  DCALL1w(CRAWIO,_DAT);\
  257.  RESTOREREGS\
  258.  GETLREG(0,_RES)
  259.  
  260. #define Crawcin(_KEY)\
  261.  SAVEREGS\
  262.  DCALL0(CRAWCIN);\
  263.  RESTOREREGS\
  264.  GETLREG(0,_KEY)
  265.  
  266. #define Cnecin(_KEY)\
  267.  SAVEREGS\
  268.  DCALL0(CNECIN);\
  269.  RESTOREREGS\
  270.  GETLREG(0,_KEY)
  271.  
  272. #define Cconws(_STR)\
  273.  SAVEREGS\
  274.  DCALL1l(CCONWS,_STR);\
  275.  RESTOREREGS
  276.  
  277. #define Cconrs(_BUF)\
  278.  SAVEREGS\
  279.  DCALL1l(CCONRS,_BUF);\
  280.  RESTOREREGS
  281.  
  282. #define Cconis(_STAT)\
  283.  SAVEREGS\
  284.  DCALL0(CCONIS);\
  285.  RESTOREREGS\
  286.  GETSWREG(0,_STAT)
  287.  
  288. #define Dsetdrv(_DRV,_DRIVES)\
  289.  SAVEREGS\
  290.  DCALL1w(DSETDRV,_DRV);\
  291.  RESTOREREGS\
  292.  GETLREG(0,_DRIVES)
  293.  
  294. #define Cconos(_STAT)\
  295.  SAVEREGS\
  296.  DCALL0(CCONOS);\
  297.  RESTOREREGS\
  298.  GETSWREG(0,_STAT)
  299.  
  300. #define Cprnos(_STAT)\
  301.  SAVEREGS\
  302.  DCALL0(CPRNOS);\
  303.  RESTOREREGS\
  304.  GETSWREG(0,_STAT)
  305.  
  306. #define Cauxis(_STAT)\
  307.  SAVEREGS\
  308.  DCALL0(CAUXIS);\
  309.  RESTOREREGS\
  310.  GETSWREG(0,_STAT)
  311.  
  312. #define Cauxos(_STAT)\
  313.  SAVEREGS\
  314.  DCALL0(CAUXOS);\
  315.  RESTOREREGS\
  316.  GETSWREG(0,_STAT)
  317.  
  318. #define Maddalt(_START,_SIZE,_RES)\
  319.  SAVEREGS\
  320.  DCALL2l(MADDALT,_START,_SIZE);\
  321.  RESTOREREGS\
  322.  GETSWREG(0,_RES)
  323.  
  324. #define Dgetdrv(_DRV)\
  325.  SAVEREGS\
  326.  DCALL0(DGETDRV);\
  327.  RESTOREREGS\
  328.  GETUWREG(0,_DRV)
  329.  
  330. #define Fsetdta(_DTA)\
  331.  SAVEREGS\
  332.  DCALL1l(FSETDTA,_DTA);\
  333.  RESTOREREGS
  334.  
  335. #define Super(_DAT,_VAL)\
  336.  SAVEREGS\
  337.  DCALL1l(SUPER,_DAT);\
  338.  RESTOREREGS\
  339.  GETLREG(0,_VAL)
  340.  
  341. #define Tgetdate(_DATE)\
  342.  SAVEREGS\
  343.  DCALL0(TGETDATE);\
  344.  RESTOREREGS\
  345.  GETUWREG(0,_DATE)
  346.  
  347. #define Tsetdate(_DATE,_RES)\
  348.  SAVEREGS\
  349.  DCALL1w(TSETDATE,_DATE);\
  350.  RESTOREREGS\
  351.  GETSWREG(0,_RES)
  352.  
  353. #define Tgettime(_TIME)\
  354.  SAVEREGS\
  355.  DCALL0(TGETTIME);\
  356.  RESTOREREGS\
  357.  GETUWREG(0,_TIME)
  358.  
  359. #define Tsettime(_TIME,_RES)\
  360.  SAVEREGS\
  361.  DCALL1w(TSETTIME,_TIME);\
  362.  RESTOREREGS\
  363.  GETSWREG(0,_RES)
  364.  
  365. #define Fgetdta(_DTA)\
  366.  SAVEREGS\
  367.  DCALL0(FGETDTA);\
  368.  RESTOREREGS\
  369.  GETREGADR(0,_DTA)
  370.  
  371. #define Sversion(_VERS)\
  372.  SAVEREGS\
  373.  DCALL0(SVERSION);\
  374.  RESTOREREGS\
  375.  GETUWREG(0,_VERS)
  376.  
  377. #define Ptermres(_KEEP,_RET)\
  378.  DCALL1l1w(PTERMRES,_KEEP,_RET)
  379.  
  380. #define Dfree(_BUF,_DRV,_RES)\
  381.  SAVEREGS\
  382.  DCALL1l1w(DFREE,_BUF,_DRV);\
  383.  RESTOREREGS\
  384.  GETSWREG(0,_RES)
  385.  
  386. #define Dcreate(_DIR,_RES)\
  387.  SAVEREGS\
  388.  DCALL1l(DCREATE,_DIR);\
  389.  RESTOREREGS\
  390.  GETSWREG(0,_RES)
  391.  
  392. #define Ddelete(_DIR,_RES)\
  393.  SAVEREGS\
  394.  DCALL1l(DDELETE,_DIR);\
  395.  RESTOREREGS\
  396.  GETSWREG(0,_RES)
  397.  
  398. #define Dsetpath(_PATH,_RES)\
  399.  SAVEREGS\
  400.  DCALL1l(DSETPATH,_PATH);\
  401.  RESTOREREGS\
  402.  GETSWREG(0,_RES)
  403.  
  404. #define Fcreate(_FILE,_ATTR,_HNDL)\
  405.  SAVEREGS\
  406.  DCALL1l1w(FCREATE,_FILE,_ATTR);\
  407.  RESTOREREGS\
  408.  GETLREG(0,_HNDL)
  409.  
  410. #define Fopen(_FILE,_MODE,_HNDL)\
  411.  SAVEREGS\
  412.  DCALL1l1w(FOPEN,_FILE,_MODE);\
  413.  RESTOREREGS\
  414.  GETLREG(0,_HNDL)
  415.  
  416. #define Fclose(_HNDL,_RES)\
  417.  SAVEREGS\
  418.  DCALL1w(FCLOSE,_HNDL);\
  419.  RESTOREREGS\
  420.  GETSWREG(0,_RES)
  421.  
  422. #define Fread(_HNDL,_LEN,_BUF,_CNT)\
  423.  SAVEREGS\
  424.  DCALL1w2l(FREAD,_HNDL,_LEN,_BUF);\
  425.  RESTOREREGS\
  426.  GETLREG(0,_CNT)
  427.  
  428. #define Fwrite(_HNDL,_LEN,_BUF,_CNT)\
  429.  SAVEREGS\
  430.  DCALL1w2l(FWRITE,_HNDL,_LEN,_BUF);\
  431.  RESTOREREGS\
  432.  GETLREG(0,_CNT)
  433.  
  434. #define Fdelete(_FILE,_RES)\
  435.  SAVEREGS\
  436.  DCALL1l(FDELETE,_FILE);\
  437.  RESTOREREGS\
  438.  GETSWREG(0,_RES)
  439.  
  440. #define Fseek(_OFF,_HNDL,_MODE,_POS)\
  441.  SAVEREGS\
  442.  DCALL1l2w(FSEEK,_OFF,_HNDL,_MODE);\
  443.  RESTOREREGS\
  444.  GETLREG(0,_POS)
  445.  
  446. #define Fattrib(_FILE,_FLAG,_ATTR,_OLD)\
  447.  SAVEREGS\
  448.  DCALL1l2w(FATTRIB,_FILE,_FLAG,_ATTR);\
  449.  RESTOREREGS\
  450.  GETSWREG(0,_OLD)
  451.  
  452. #define Mxalloc(_SIZE,_MODE,_ADR)\
  453.  SAVEREGS\
  454.  DCALL1l1w(MXALLOC,_SIZE,_MODE);\
  455.  RESTOREREGS\
  456.  GETREGADR(0,_ADR)
  457.  
  458. #define Fdup(_STD,_HNDL)\
  459.  SAVEREGS\
  460.  DCALL1w(FDUP,_STD);\
  461.  RESTOREREGS\
  462.  GETLREG(0,_HNDL)
  463.  
  464. #define Fforce(_STD,_HNDL,_RES)\
  465.  SAVEREGS\
  466.  DCALL2w(FFORCE,_STD,_HNDL);\
  467.  RESTOREREGS\
  468.  GETSWREG(0,_RES)
  469.  
  470. #define Dgetpath(_PATH,_DRV,_RES)\
  471.  SAVEREGS\
  472.  DCALL1l1w(DGETPATH,_PATH,_DRV);\
  473.  RESTOREREGS\
  474.  GETSWREG(0,_RES)
  475.  
  476. #define Malloc(_SIZE,_ADR)\
  477.  SAVEREGS\
  478.  DCALL1l(MALLOC,_SIZE);\
  479.  RESTOREREGS\
  480.  GETREGADR(0,_ADR)
  481.  
  482. #define Mfree(_ADR,_RES)\
  483.  SAVEREGS\
  484.  DCALL1l(MFREE,_ADR);\
  485.  RESTOREREGS\
  486.  GETSWREG(0,_RES)
  487.  
  488. #define Mshrink(_ADR,_SIZE,_RES)\
  489.  SAVEREGS\
  490.  DCALL1w2l(MSHRINK,0,_ADR,_SIZE);\
  491.  RESTOREREGS\
  492.  GETSWREG(0,_RES)
  493.  
  494. #define Pexec(_MODE,_PROG,_TAIL,_ENV,_RES)\
  495.  SAVEREGS\
  496.  DCALL1w3l(PEXEC,_MODE,_PROG,_TAIL,_ENV);\
  497.  RESTOREREGS\
  498.  GETLREG(0,_RES)
  499.  
  500. #define Pterm(_RET)\
  501.  DCALL1w(PTERM,_RET)
  502.  
  503. #define Fsfirst(_FILE,_ATTR,_RES)\
  504.  SAVEREGS\
  505.  DCALL1l1w(FSFIRST,_FILE,_ATTR);\
  506.  RESTOREREGS\
  507.  GETSWREG(0,_RES)
  508.  
  509. #define Fsnext(_RES)\
  510.  SAVEREGS\
  511.  DCALL0(FSNEXT);\
  512.  RESTOREREGS\
  513.  GETSWREG(0,_RES)
  514.  
  515. #define Frename(_OLD,_NEW,_RES)\
  516.  SAVEREGS\
  517.  DCALL1w2l(FRENAME,0,_OLD,_NEW);\
  518.  RESTOREREGS\
  519.  GETSWREG(0,_RES)
  520.  
  521. #define Fdatime(_DATIME,_FILE,_FLAG)\
  522.  SAVEREGS\
  523.  DCALL1l2w(FDATIME,_DATIME,_FILE,_FLAG);\
  524.  RESTOREREGS
  525.  
  526. #define Flock(_HDL,_MODE,_FROM,_LEN,_RES)\
  527.  SAVEREGS\
  528.  DCALL2w2l(FLOCK,_HDL,_MODE,_FROM,_LEN);\
  529.  RESTOREREGS\
  530.  GETSWREG(0,_RES)
  531.  
  532. #define Supexec(_PROC)\
  533.  SAVEREGS\
  534.  XCALL1l(SUPEXEC,_PROC);\
  535.  RESTOREREGS
  536.  
  537. #define Setexc(_VEC,_ADR,_OLD)\
  538.  SAVEREGS\
  539.  BCALL1w1l(SETEXC,_VEC,_ADR);\
  540.  RESTOREREGS\
  541.  GETREGADR(0,_OLD)
  542.  
  543. #if MINT
  544. /*==========================================================================*/
  545. /*                      MiNT-Calls                                          */
  546. /*==========================================================================*/
  547.  
  548. #define Syield()\
  549.  SAVEREGS\
  550.  DCALL0(SYIELD);\
  551.  RESTOREREGS
  552.  
  553. #define Fpipe(_PTR,_RES)\
  554.  SAVEREGS\
  555.  DCALL1l(FPIPE,_PTR);\
  556.  RESTOREREGS\
  557.  GETSWREG(0,_RES)
  558.  
  559. #define Fcntl(_HNDL,_ARG,_CMD,_RES)\
  560.  SAVEREGS\
  561.  DCALL1w1l1w(FCNTL,_HNDL,_ARG,_CMD);\
  562.  RESTOREREGS\
  563.  GETLREG(0,_RES)
  564.  
  565. #define Finstat(_HNDL,_CNT)\
  566.  SAVEREGS\
  567.  DCALL1w(FINSTAT,_HNDL);\
  568.  RESTOREREGS\
  569.  GETLREG(0,_CNT)
  570.  
  571. #define Foutstat(_HNDL,_CNT)\
  572.  SAVEREGS\
  573.  DCALL1w(FOUTSTAT,_HNDL);\
  574.  RESTOREREGS\
  575.  GETLREG(0,_CNT)
  576.  
  577. #define Fgetchar(_HNDL,_MODE,_RES)\
  578.  SAVEREGS\
  579.  DCALL2w(FGETCHAR,_HNDL,_MODE);\
  580.  RESTOREREGS\
  581.  GETLREG(0,_RES)
  582.  
  583. #define Fputchar(_HNDL,_CHAR,_MODE,_RES)\
  584.  SAVEREGS\
  585.  DCALL1w1l1w(FPUTCHAR,_HNDL,_CHAR,_MODE);\
  586.  RESTOREREGS\
  587.  GETLREG(0,_RES)
  588.  
  589. #define Pwait(_RES)\
  590.  SAVEREGS\
  591.  DCALL0(PWAIT);\
  592.  RESTOREREGS\
  593.  GETLREG(0,_RES)
  594.  
  595. #define Pnice(_DELTA,_PRIO)\
  596.  SAVEREGS\
  597.  DCALL1w(PNICE,_DELTA);\
  598.  RESTOREREGS\
  599.  GETLREG(0,_PRIO)
  600.  
  601. #define Pgetpid(_PID)\
  602.  SAVEREGS\
  603.  DCALL0(PGETPID);\
  604.  RESTOREREGS\
  605.  GETUWREG(0,_PID)
  606.  
  607. #define Pgetppid(_PPID)\
  608.  SAVEREGS\
  609.  DCALL0(PGETPPID);\
  610.  RESTOREREGS\
  611.  GETUWREG(0,_PPID)
  612.  
  613. #define Pgetpgrp(_PGRP)\
  614.  SAVEREGS\
  615.  DCALL0(PGETPGRP);\
  616.  RESTOREREGS\
  617.  GETUWREG(0,_PGRP)
  618.  
  619. #define Psetpgrp(_PID,_GRP,_RES)\
  620.  SAVEREGS\
  621.  DCALL2w(PSETPGRP,_PID,_GRP);\
  622.  RESTOREREGS\
  623.  GETSWREG(0,_RES)
  624.  
  625. #define Pgetuid(_UID)\
  626.  SAVEREGS\
  627.  DCALL0(PGETUID);\
  628.  RESTOREREGS\
  629.  GETUWREG(0,_UID)
  630.  
  631. #define Psetuid(_UID,_RES)\
  632.  SAVEREGS\
  633.  DCALL1w(PSETUID,_UID);\
  634.  RESTOREREGS\
  635.  GETSWREG(0,_RES)
  636.  
  637. #define Pkill(_PID,_SIG,_RES)\
  638.  SAVEREGS\
  639.  DCALL2w(PKILL,_PID,_SIG);\
  640.  RESTOREREGS\
  641.  GETSWREG(0,_RES)
  642.  
  643. #define Psignal(_SIG,_HANDLER,_OLD)\
  644.  SAVEREGS\
  645.  DCALL1w1l(PSIGNAL,_SIG,_HANDLER);\
  646.  RESTOREREGS\
  647.  GETREGADR(0,_OLD)
  648.  
  649. #define Pvfork(_RES)\
  650.  SAVEREGS\
  651.  DCALL0(PVFORK);\
  652.  RESTOREREGS\
  653.  GETSWREG(0,_RES)
  654.  
  655. #define Pgetgid(_GID)\
  656.  SAVEREGS\
  657.  DCALL0(PGETGID);\
  658.  RESTOREREGS\
  659.  GETUWREG(0,_GID)
  660.  
  661. #define Psetgid(_GID,_RES)\
  662.  SAVEREGS\
  663.  DCALL1w(PSETGID,_GID);\
  664.  RESTOREREGS\
  665.  GETSWREG(0,_RES)
  666.  
  667. #define Psigblock(_MASK,_OLD)\
  668.  SAVEREGS\
  669.  DCALL1l(PSIGBLOCK,_MASK);\
  670.  RESTOREREGS\
  671.  GETLREG(0,_OLD)
  672.  
  673. #define Psigsetmask(_MASK,_OLD)\
  674.  SAVEREGS\
  675.  DCALL1l(PSIGSETMASK,_MASK);\
  676.  RESTOREREGS\
  677.  GETLREG(0,_OLD)
  678.  
  679. #define Pusrval(_ARG,_VAL)\
  680.  SAVEREGS\
  681.  DCALL1l(PUSRVAL,_ARG);\
  682.  RESTOREREGS\
  683.  GETLREG(0,_VAL)
  684.  
  685. #define Pdomain(_DOM,_OLD)\
  686.  SAVEREGS\
  687.  DCALL1w(PDOMAIN,_DOM);\
  688.  RESTOREREGS\
  689.  GETSWREG(0,_OLD)
  690.  
  691. #define Psigreturn()\
  692.  SAVEREGS\
  693.  DCALL0(PSIGRETURN);\
  694.  RESTOREREGS
  695.  
  696. #define Pfork(_RES)\
  697.  SAVEREGS\
  698.  DCALL0(PFORK);\
  699.  RESTOREREGS\
  700.  GETSWREG(0,_RES)
  701.  
  702. #define Pwait3(_FLAG,_RUSAGE,_RES)\
  703.  SAVEREGS\
  704.  DCALL1w1l(PWAIT3,_FLAG,_RUSAGE);\
  705.  RESTOREREGS\
  706.  GETLREG(0,_RES)
  707.  
  708. #define Fselect(_TIMEOUT,_RFDS,_WFDS,_XFDS,_RES)\
  709.  SAVEREGS\
  710.  DCALL1w3l(FSELECT,_TIMEOUT,_RFDS,_WFDS,_XFDS);\
  711.  RESTOREREGS\
  712.  GETSWREG(0,_RES)
  713.  
  714. #define Prusage(_RSCADR)\
  715.  SAVEREGS\
  716.  DCALL1l(PRUSAGE,_RSCADR);\
  717.  RESTOREREGS
  718.  
  719. #define Psetlimit(_LIM,_VAL,_OLD)\
  720.  SAVEREGS\
  721.  DCALL1w1l(PSETLIMIT,_LIM,_VAL);\
  722.  RESTOREREGS\
  723.  GETLREG(0,_OLD)
  724.  
  725. #define Talarm(_SECS,_OLD)\
  726.  SAVEREGS\
  727.  DCALL1l(TALARM,_SECS);\
  728.  RESTOREREGS\
  729.  GETLREG(0,_OLD)
  730.  
  731. #define Pause()\
  732.  SAVEREGS\
  733.  DCALL0(PAUSE);\
  734.  RESTOREREGS
  735.  
  736. #define Sysconf(_WHICH,_VAL)\
  737.  SAVEREGS\
  738.  DCALL1w(SYSCONF,_WHICH);\
  739.  RESTOREREGS\
  740.  GETLREG(0,_VAL)
  741.  
  742. #define Psigpending(_SIGS)\
  743.  SAVEREGS\
  744.  DCALL0(PSIGPENDING);\
  745.  RESTOREREGS\
  746.  GETLREG(0,_SIGS)
  747.  
  748. #define Dpathconf(_NAME,_WHICH,_VAL)\
  749.  SAVEREGS\
  750.  DCALL1l1w(DPATHCONF,_NAME,_WHICH);\
  751.  RESTOREREGS\
  752.  GETLREG(0,_VAL)
  753.  
  754. #define Pmsg(_MODE,_MBOXID,_MSGPTR,_RES)\
  755.  SAVEREGS\
  756.  DCALL1w2l(PMSG,_MODE,_MBOXID,_MSGPTR);\
  757.  RESTOREREGS\
  758.  GETSWREG(0,_RES)
  759.  
  760. #define Fmidipipe(_PID,_IN,_OUT,_RES)\
  761.  SAVEREGS\
  762.  DCALL3w(FMIDIPIPE,_PID,_IN,_OUT);\
  763.  RESTOREREGS\
  764.  GETSWREG(0,_RES)
  765.  
  766. #define Prenice(_PID,_DELTA,_CURRENT)\
  767.  SAVEREGS\
  768.  DCALL2w(PRENICE,_PID,_DELTA);\
  769.  RESTOREREGS\
  770.  GETLREG(0,_CURRENT)
  771.  
  772. #define Dopendir(_NAME,_FLAG,_DIR)\
  773.  SAVEREGS\
  774.  DCALL1l1w(DOPENDIR,_NAME,_FLAG);\
  775.  RESTOREREGS\
  776.  GETLREG(0,_DIR)
  777.  
  778. #define Dreaddir(_LEN,_DIR,_BUF,_RES)\
  779.  SAVEREGS\
  780.  DCALL1w2l(DREADDIR,_LEN,_DIR,_BUF);\
  781.  RESTOREREGS\
  782.  GETSWREG(0,_RES)
  783.  
  784. #define Drewinddir(_DIR,_RES)\
  785.  SAVEREGS\
  786.  DCALL1l(DREWINDDIR,_DIR);\
  787.  RESTOREREGS\
  788.  GETSWREG(0,_RES)
  789.  
  790. #define Dclosedir(_DIR,_RES)\
  791.  SAVEREGS\
  792.  DCALL1l(DCLOSEDIR,_DIR);\
  793.  RESTOREREGS\
  794.  GETSWREG(0,_RES)
  795.  
  796. #define Fxattr(_FLAG,_NAME,_XATTR,_RES)\
  797.  SAVEREGS\
  798.  DCALL1w2l(FXATTR,_FLAG,_NAME,_XATTR);\
  799.  RESTOREREGS\
  800.  GETLREG(0,_RES)
  801.  
  802. #define Flink(_OLD,_NEW,_RES)\
  803.  SAVEREGS\
  804.  DCALL2l(FLINK,_OLD,_NEW);\
  805.  RESTOREREGS\
  806.  GETSWREG(0,_RES)
  807.  
  808. #define Fsymlink(_OLD,_NEW,_RES)\
  809.  SAVEREGS\
  810.  DCALL2l(FSYMLINK,_OLD,_NEW);\
  811.  RESTOREREGS\
  812.  GETSWREG(0,_RES)
  813.  
  814. #define Freadlink(_BUFSIZ,_BUF,_NAME,_RES)\
  815.  SAVEREGS\
  816.  DCALL1w2l(FREADLINK,_BUFSIZ,_BUF,_NAME);\
  817.  RESTOREREGS\
  818.  GETSWREG(0,_RES)
  819.  
  820. #define Dcntl(_CMD,_NAME,_ARG,_RES)\
  821.  SAVEREGS\
  822.  DCALL1w2l(DCNTL,_CMD,_NAME,_ARG);\
  823.  RESTOREREGS\
  824.  GETLREG(0,_RES)
  825.  
  826. #define Fchown(_FILE,_UID,_GID,_RES)\
  827.  SAVEREGS\
  828.  DCALL1l2w(FCHOWN,_FILE,_UID,_GID);\
  829.  RESTOREREGS\
  830.  GETSWREG(0,_RES)
  831.  
  832. #define Fchmod(_FILE,_MODE,_RES)\
  833.  SAVEREGS\
  834.  DCALL1l1w(FCHMOD,_FILE,_MODE);\
  835.  RESTOREREGS\
  836.  GETSWREG(0,_RES)
  837.  
  838. #define Pumask(_MODE,_OLD)\
  839.  SAVEREGS\
  840.  DCALL1w(PUMASK,_MODE);\
  841.  RESTOREREGS\
  842.  GETUWREG(0,_OLD)
  843.  
  844. #define Psemaphore(_MODE,_ID,_TOUT,_RES)\
  845.  SAVEREGS\
  846.  DCALL1w2l(PSEMAPHORE,_MODE,_ID,_TOUT);\
  847.  RESTOREREGS\
  848.  GETLREG(0,_RES)
  849.  
  850. #define Dlock(_MODE,_DRV,_RES)\
  851.  SAVEREGS\
  852.  DCALL2w(DLOCK,_MODE,_DRV);\
  853.  RESTOREREGS\
  854.  GETSWREG(0,_RES)
  855.  
  856. #define Psigpause(_SIGMASK)\
  857.  SAVEREGS\
  858.  DCALL1l(PSIGPAUSE,_SIGMASK);\
  859.  RESTOREREGS
  860.  
  861. #define Psigaction(_SIG,_ACT,_OACT,_RES)\
  862.  SAVEREGS\
  863.  DCALL1w2l(PSIGACTION,_SIG,_ACT,_OACT);\
  864.  RESTOREREGS\
  865.  GETSWREG(0,_RES)
  866.  
  867. #define Pgeteuid(_EUID)\
  868.  SAVEREGS\
  869.  DCALL0(PGETEUID);\
  870.  RESTOREREGS\
  871.  GETUWREG(0,_EUID)
  872.  
  873. #define Pgetegid(_EGID)\
  874.  SAVEREGS\
  875.  DCALL0(PGETEGID);\
  876.  RESTOREREGS\
  877.  GETUWREG(0,_EGID)
  878.  
  879. #define Pwaitpid(_PID,_FLAG,_RUSAGE,_RES)\
  880.  SAVEREGS\
  881.  DCALL2w1l(PWAITPID,_PID,_FLAG,_RUSAGE);\
  882.  RESTOREREGS\
  883.  GETLREG(0,_RES)
  884.  
  885. #define Dgetcwd(_PATH,_DRV,_SIZE,_RES)\
  886.  SAVEREGS\
  887.  DCALL1l2w(DGETCWD,_PATH,_DRV,_SIZE);\
  888.  RESTOREREGS\
  889.  GETSWREG(0,_RES)
  890.  
  891. #define Salert(_MSG)\
  892.  SAVEREGS\
  893.  DCALL1l(SALERT,_MSG);\
  894.  RESTOREREGS
  895.  
  896. #endif /* MINT */
  897.  
  898.