home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / UTILITY / KEYBOARD / CMDED2E5.ZIP / DOS.INC < prev    next >
Encoding:
Text File  |  1988-02-01  |  9.6 KB  |  525 lines

  1. ; DOS Interface Macros - Version 1.0 - for Microsoft Macro Assembler 5.0
  2. ; (C) Copyright Microsoft Corporation, 1987, 1988.
  3.  
  4. .XCREF
  5. .XLIST
  6. IF1
  7. ; Internal
  8. __LdAdr MACRO reg, adr
  9.     IF (.TYPE (adr)) AND 00010000b     ;; Register
  10.         mov     reg, adr
  11.     ELSEIF (.TYPE (adr)) AND 00000100b ;; Constant
  12.         mov     reg, adr
  13.     ELSEIF TYPE (adr) EQ 1             ;; Bytes
  14.         mov    reg, OFFSET adr
  15.     ELSEIF TYPE (adr) EQ 2             ;; Near pointer
  16.         mov    reg, adr
  17.     ELSEIF TYPE (adr) EQ 4             ;; Far pointer
  18.         lds    reg, adr
  19.     ELSE
  20.         .ERR
  21.         %OUT Illegal argument
  22.     ENDIF
  23. ENDM
  24.  
  25. ; Internal
  26. __LdSeg MACRO dest, src
  27.     IFIDNI <src>, <es>                 ;; Segment register
  28.         mov     ax, src
  29.         mov     dest, ax
  30.     ELSEIFIDNI <src>, <ss>
  31.         mov     ax, src
  32.         mov     dest, ax
  33.     ELSEIFIDNI <src>, <ds>
  34.         mov     ax, src
  35.         mov     dest, ax
  36.     ELSEIFIDNI <src>, <ds>
  37.         mov     ax, src
  38.         mov     dest, ax
  39.     ELSEIF (.TYPE (src)) AND 00000100b ;; Constant
  40.         mov     ax, src
  41.         mov     dest, ax
  42.     ELSE                               ;; Memory or general register 
  43.         mov     dest, src
  44.     ENDIF
  45. ENDM
  46.  
  47. ; 01h, 07h, 08h, 0Ch
  48. @GetKey MACRO echo, cc, clear
  49.     LOCAL   funct, disp
  50.     IFDIF   <echo>, <0>
  51.         IFDIF   <cc>, <0>
  52.             funct   = 01h
  53.         ELSE
  54.             funct   = 07h
  55.             disp    = 02h
  56.         ENDIF
  57.     ELSE
  58.         IFDIF   <cc>, <0>
  59.             funct   = 08h
  60.         ELSE
  61.             funct   = 07h
  62.         ENDIF
  63.     ENDIF
  64.     IFB     <clear>
  65.         mov     ah, funct
  66.     ELSE
  67.         IFIDN   <clear>, <0>
  68.             mov     ah, funct
  69.         ELSE
  70.             mov     ah, 0Ch
  71.             mov     al, funct
  72.         ENDIF
  73.     ENDIF
  74.     int     21h
  75.     IFDEF   disp
  76.         mov     dl, al
  77.         mov     ah, disp
  78.         int     21h
  79.     ENDIF
  80. ENDM
  81.  
  82. ; 0Ah
  83. @GetStr MACRO ofset, terminator, limit, segmnt
  84.     __LdAdr dx, <ofset>
  85.     IFNB    <segmnt>
  86.         __LdSeg ds, <segmnt>
  87.     ENDIF
  88.     mov     ah, 0Ah
  89.     mov     si, dx
  90.     IFNB    <limit>
  91.         mov     BYTE PTR [si], limit
  92.     ENDIF
  93.     int     21h
  94.     inc     si
  95.     mov     bl, [si]
  96.     sub     bh, bh
  97.     inc     si
  98.     IFNB    <terminator>
  99.         mov     BYTE PTR [bx+si], terminator
  100.     ENDIF
  101. ENDM
  102.  
  103. ; 02h
  104. @DispCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10
  105.     mov     ah, 02h
  106.     IRP     char, <ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10>
  107.         IFB     <char>
  108.             EXITM
  109.         ENDIF
  110.         mov     dl, char
  111.         int     21h
  112.     ENDM
  113. ENDM
  114.  
  115. ; 05h
  116. @PrtCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10
  117.     mov     ah, 05h
  118.     IRP     char, <ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10>
  119.         IFB     <char>
  120.             EXITM
  121.         ENDIF
  122.         mov     dl, char
  123.         int     21h
  124.     ENDM
  125. ENDM
  126.  
  127. ; 09h
  128. @DispStr MACRO ofset, segmnt
  129.     __LdAdr dx, <ofset>
  130.     IFNB    <segmnt>
  131.         __LdSeg ds, <segmnt>
  132.     ENDIF
  133.     mov     ah, 9
  134.     int     21h
  135. ENDM
  136.  
  137. ; 3Fh
  138. @Read MACRO ofset, bytes, handle, segmnt
  139.     IFNB    <handle>
  140.         mov     bx, handle
  141.     ELSE
  142.         sub     bx, bx
  143.     ENDIF
  144.     mov     cx, bytes
  145.     __LdAdr dx, <ofset>
  146.     IFNB    <segmnt>
  147.         __LdSeg ds, <segmnt>
  148.     ENDIF
  149.     mov     ah, 3Fh
  150.     int     21h
  151. ENDM
  152.  
  153. ; 40h
  154. @Write MACRO ofset, bytes, handle, segmnt
  155.     IFNB    <handle>
  156.         mov     bx, handle
  157.     ELSE
  158.         mov     bx, 1
  159.     ENDIF
  160.     mov     cx, bytes
  161.     __LdAdr dx, <ofset>
  162.     IFNB    <segmnt>
  163.         __LdSeg ds, <segmnt>
  164.     ENDIF
  165.     mov     ah, 40h
  166.     int     21h
  167. ENDM
  168.  
  169. ; 3Ch
  170. @MakFil MACRO path, atrib, segmnt, kind
  171.     IFB     <atrib>
  172.         sub     cx, cx
  173.     ELSE
  174.         mov     cx, atrib
  175.     ENDIF
  176.     __LdAdr dx, <path>
  177.     IFNB    <segmnt>
  178.         __LdSeg ds, <segmnt>
  179.     ENDIF
  180.     IFIDNI  <kind>, <tmp>
  181.         mov     ah, 5Ah
  182.     ELSEIFIDNI <kind>, <new>
  183.         mov    ah, 5Bh
  184.     ELSE
  185.         mov    ah, 3Ch
  186.     ENDIF
  187.     int     21h
  188. ENDM
  189.  
  190. ; 3Dh
  191. @OpenFil MACRO path, access, segmnt
  192.     __LdAdr dx, <path>
  193.     IFNB    <segmnt>
  194.         __LdSeg ds, <segmnt>
  195.     ENDIF
  196.     mov     ax, 3D00h + (access AND 0FFh)
  197.     int     21h
  198. ENDM
  199.  
  200. ; 3Eh
  201. @ClosFil MACRO handle
  202.     mov     bx, handle
  203.     mov     ah, 3Eh
  204.     int     21h
  205. ENDM
  206.  
  207. ; 41h
  208. @DelFil MACRO path, segmnt
  209.     __LdAdr dx, <path>
  210.     IFNB    <segmnt>
  211.         __LdSeg ds, <segmnt>
  212.     ENDIF
  213.     mov     ah, 41h
  214.     int     21h
  215. ENDM
  216.  
  217. ; 56h
  218. @MoveFil MACRO old, new, segold, segnew
  219.     __LdAdr dx, <old>
  220.     __LdAdr di, <new>
  221.     IFNB    <segold>
  222.         __LdSeg ds, <segold>
  223.     ENDIF
  224.     IFNB    <segnew>
  225.         __LdSeg es, <segnew>
  226.     ENDIF
  227.     mov     ah, 56h
  228.     int     21h
  229. ENDM
  230.  
  231. ; 4Eh
  232. @GetFirst MACRO path, atrib, segmnt
  233.     IFNB    <atrib>
  234.         mov     cx, atrib
  235.     ELSE
  236.         sub     cx, cx
  237.     ENDIF
  238.     __LdAdr dx, <path>
  239.     IFNB    <segmnt>
  240.         __LdSeg ds, <segmnt>
  241.     ENDIF
  242.     mov     ah, 4Eh
  243.     int     21h
  244. ENDM
  245.  
  246. ; 4Fh
  247. @GetNext MACRO
  248.     mov     ah, 4Fh
  249.     int     21h
  250. ENDM
  251.  
  252. ; 2Fh
  253. @GetDTA MACRO
  254.     mov     ah, 2Fh
  255.     int     21h
  256. ENDM
  257.  
  258. ; 1Ah
  259. @SetDTA MACRO buffer, segmnt
  260.     __LdAdr dx, <buffer>
  261.     IFNB    <segmnt>
  262.         __LdSeg ds, <segmnt>
  263.     ENDIF
  264.     mov     ah, 1Ah
  265.     int     21h
  266. ENDM
  267.  
  268. ; Internal
  269. __LdDub MACRO dub
  270.     IF   TYPE (dub) EQ 2
  271.         sub  cx, cx
  272.         mov  dx, dub
  273.     ELSEIF TYPE (dub) EQ 4
  274.         mov  cx, dub[2]
  275.         mov  dx, dub[0]
  276.     ELSEIF TYPE (dub) EQ 0
  277.         sub     cx, cx
  278.         mov     dx, dub
  279.     ELSE
  280.         .ERR
  281.         %OUT Illegal argument
  282.     ENDIF
  283. ENDM
  284.  
  285. ; 42h
  286. @GetFilSz MACRO handle
  287.     mov     bx, handle
  288.     sub     cx, cx
  289.     sub     dx, dx
  290.     mov     ax, 4202h
  291.     int     21h
  292.     push    dx
  293.     push    ax
  294.     sub     dx, dx
  295.     mov     ax, 4200h
  296.     int     21h
  297.     pop     ax
  298.     pop     dx
  299. ENDM
  300.  
  301. ; 42h
  302. @MovePtrAbs MACRO handle, distance
  303.     IFNB    <distance>
  304.         __LdDub <distance>
  305.     ENDIF
  306.     mov     bx, handle
  307.     mov     ax, 4200h
  308.     int     21h
  309. ENDM
  310.  
  311. ; 42h
  312. @MovePtrRel MACRO handle, distance
  313.     IFNB    <distance>
  314.         __LdDub <distance>
  315.     ENDIF
  316.     mov     bx, handle
  317.     mov     ax, 4201h
  318.     int     21h
  319. ENDM
  320.  
  321. ; 39h
  322. @MkDir MACRO path, segmnt
  323.     __LdAdr dx, <path>
  324.     IFNB    <segmnt>
  325.         __LdSeg ds, <segmnt>
  326.     ENDIF
  327.     mov     ah, 39h
  328.     int     21h
  329. ENDM
  330.  
  331. ; 3Ah
  332. @RmDir MACRO path, segmnt
  333.     __LdAdr dx, <path>
  334.     IFNB    <segmnt>
  335.         __LdSeg ds, <segmnt>
  336.     ENDIF
  337.     mov     ah, 3Ah
  338.     int     21h
  339. ENDM
  340.  
  341. ; 3Bh
  342. @ChDir MACRO path, segmnt
  343.     __LdAdr dx, <path>
  344.     IFNB    <segmnt>
  345.         __LdSeg ds, <segmnt>
  346.     ENDIF
  347.     mov     ah, 3Bh
  348.     int     21h
  349. ENDM
  350.  
  351. ; 47h
  352. @GetDir MACRO buffer, drive, segmnt
  353.     IFNB    <drive>
  354.         mov     dl, drive
  355.     ELSE
  356.         sub     dl, dl
  357.     ENDIF
  358.     __LdAdr si, <buffer>
  359.     IFNB    <segmnt>
  360.         __LdSeg ds, <segmnt>
  361.     ENDIF
  362.     mov     ah, 47h
  363.     int     21h
  364. ENDM
  365.  
  366. ; 19h
  367. @GetDrv MACRO
  368.     mov     ah, 19h
  369.     int     21h
  370. ENDM
  371.  
  372. ; 0Eh
  373. @SetDrv MACRO drive
  374.     mov     dl, drive
  375.     mov     ah, 0Eh
  376.     int     21h
  377. ENDM
  378.  
  379. ; 36h
  380. @ChkDrv MACRO drive
  381.     IFNB    <drive>
  382.         mov     dl, drive
  383.     ELSE
  384.         sub     dl, dl
  385.     ENDIF
  386.     mov     ah, 36h
  387.     int     21h
  388. ENDM
  389.  
  390. ; 4Ch
  391. @Exit MACRO return
  392.     IFB     <return>
  393.         mov     ah, 4Ch
  394.     ELSE
  395.         mov     ax, 4C00h + (return AND 0FFh)
  396.     ENDIF
  397.     int     21h
  398. ENDM
  399.  
  400. ; 4Bh
  401. @Exec MACRO path, parms, segpath, segparms, overlay
  402.     __LdAdr dx, <path>
  403.     __LdAdr bx, <parms>
  404.     IFNB    <segpath>
  405.         __LdSeg ds, <segpath>
  406.     ENDIF
  407.     IFNB    <segparms>
  408.         __LdSeg es, <segparms>
  409.     ENDIF
  410.     IFB     <overlay>
  411.         mov     ax, 4B00h
  412.     ELSE
  413.         mov     ax, 4B03h
  414.     ENDIF
  415.     int     21h
  416. ENDM
  417.  
  418. ; 4Dh
  419. @GetRet MACRO
  420.     mov     ah, 4Dh
  421.     int     21h
  422. ENDM
  423.  
  424. ; 31h
  425. @TSR MACRO paragraphs, return
  426.     mov     dx, paragraphs
  427.     IFB     <return>
  428.         mov     ah, 31h
  429.     ELSE
  430.         mov     ax, 3100h + (return AND 0FFh)
  431.     ENDIF
  432.     int     21h
  433. ENDM
  434.  
  435. ; 49h
  436. @FreeBlok MACRO segmnt
  437.     IFNB    <segmnt>
  438.         __LdSeg es, <segmnt>
  439.     ENDIF
  440.     mov     ah, 49h
  441.     int     21h
  442. ENDM
  443.  
  444. ; 48h
  445. @GetBlok MACRO graphs
  446.     LOCAL   tryit
  447.     mov     bx, graphs
  448.     tryit:  mov     ah, 48h
  449.     int     21h
  450.     jc      tryit
  451. ENDM
  452.  
  453. ; 4Ah
  454. @ModBlok MACRO graphs, segmnt
  455.     IFNB    <segmnt>
  456.         __LdSeg es, <segmnt>
  457.     ENDIF
  458.     mov     bx, graphs
  459.     mov     ah, 4Ah
  460.     int     21h
  461. ENDM
  462.  
  463. ; 2Ah
  464. @GetDate MACRO
  465.     mov     ah, 2Ah
  466.     int     21h
  467. ENDM
  468.  
  469. ; 2Bh
  470. @SetDate MACRO month, day, year
  471.     mov     cx, year
  472.     mov     dh, month
  473.     mov     dl, day
  474.     mov     ah, 2Bh
  475.     int     21h
  476. ENDM
  477.  
  478. ; 2Ch
  479. @GetTime MACRO
  480.     mov     ah, 2Ch
  481.     int     21h
  482. ENDM
  483.  
  484. ; 2Dh
  485. @SetTime MACRO hour, minutes, seconds, hundredths
  486.     mov     ch, hour
  487.     mov     cl, minutes
  488.     mov     dh, seconds
  489.     mov     dl, hundredths
  490.     mov     ah, 2Dh
  491.     int     21h
  492. ENDM
  493.  
  494. ; 30h
  495. @GetVer MACRO
  496.     mov     ah, 30h
  497.     int     21h
  498. ENDM
  499.  
  500. ; 35h
  501. @GetInt MACRO   interrupt
  502.     mov     ax, 3500h + (interrupt AND 0FFh)
  503.     int     21h
  504. ENDM
  505.  
  506. ; 25h
  507. @SetInt MACRO interrupt, vector, segmnt
  508.     IF      TYPE (vector) GE 0FFFEh
  509.         mov     dx, OFFSET vector
  510.         mov     ax, SEG vector
  511.         mov     ds, ax
  512.     ELSE
  513.         __LdAdr dx, <vector>
  514.         IFNB    <segmnt>
  515.             __LdSeg ds, <segmnt>
  516.         ENDIF
  517.     ENDIF
  518.     mov     ax, 2500h + (interrupt AND 0FFh)
  519.     int     21h
  520. ENDM
  521.  
  522. ENDIF ; Pass 1
  523. .CREF
  524. .LIST
  525.