home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / asmutil / usoftpd.zip / DOS.INC < prev    next >
Text File  |  1987-07-31  |  8KB  |  481 lines

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