home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Rising BBS / phoenixrising.zip / phoenixrising / vir-docs / crptlt16.arj / WOLF.LIB < prev   
Text File  |  1993-06-16  |  3KB  |  212 lines

  1. .xlist
  2. .radix 16
  3.  
  4. ;WOLF assembly macro routines by Black Wolf.
  5.  
  6. ;alloc          size[WORD]
  7. ;changealloc    size[WORD], segment[WORD]
  8. ;cls            screen_mode[BYTE]
  9. ;fclose         handle[WORD]
  10. ;fopen          mode[BYTE], filename_off[WORD], filename_seg[WORD] 
  11. ;gets           string_offset[WORD], string_seg[WORD], max_len[BYTE]
  12. ;get_int        int_no[BYTE]
  13. ;set_int        int_no[BYTE], new_offset[WORD], new_segment[WORD]
  14. ;keyhit
  15. ;terminate      error_code[BYTE]
  16.  
  17. alloc   macro   size
  18.     mov     ah,48
  19.     ifdif   <bx>,<size>
  20.     mov     bx,size
  21.     endif
  22.     int     21
  23.     endm
  24.  
  25. changealloc macro size, segment
  26.     mov     ah,4a
  27.     ifdif   <es>,<segment>
  28.     push    bx
  29.     mov     bx,segment
  30.     mov     es,bx
  31.     pop     bx
  32.     endif
  33.     ifdif   <bx>,<size>
  34.     mov     bx,size
  35.     endif
  36.     int     21
  37.     endm
  38.     
  39.  
  40. cls macro screen_mode
  41.     ifnb    <screen_mode>
  42.     mov     al,screen_mode
  43.     else
  44.     mov     al,3
  45.     endif
  46.     xor     ah,ah
  47.     int     10
  48.     endm
  49.  
  50. terminate macro error_code
  51.     ifnb    <error_code>
  52.     mov     al, error_code
  53.     mov     ah,4c
  54.     int     21
  55.     else
  56.     mov     ax,4c00
  57.     int     21
  58.     endif
  59.     endm
  60.  
  61. keyhit macro
  62.     xor     ax,ax
  63.     int     16
  64.     endm
  65.  
  66. gets macro string_offset, string_seg, max_len
  67.     ifdif   <string_seg>,<ds>
  68.     push    ax
  69.     mov     ax,string_seg
  70.     mov     ds,ax
  71.     pop     ax
  72.     endif
  73.     ifdif   <string_offset>,<dx>
  74.     mov     dx,offset string_offset
  75.     endif
  76.     ifdif   <max_len>, <al>
  77.     mov     al,max_len
  78.     endif
  79.     mov     ah,0a
  80.     push    bx
  81.     mov     bx,dx
  82.     mov     byte ptr ds:[bx],al
  83.     int     21
  84.     mov     al, byte ptr ds:[bx+1]
  85.     add     bl, al
  86.     adc     bh,0
  87.     mov     byte ptr ds:[bx+2],0
  88.     pop     bx
  89.     endm
  90.  
  91. fopen   macro  mode, filename_off, filename_seg
  92.     ifdif   <filename_off>, <dx>
  93.     mov     dx,offset filename_off
  94.     endif
  95.     ifdif   <filename_seg>,<ds>
  96.     push    dx
  97.     mov     dx,filename_seg
  98.     mov     ds,dx
  99.     pop     dx
  100.     endif
  101.     mov     al,mode
  102.     mov     ah,3dh
  103.     int     21
  104.     jc      done_fopen
  105.     xchg    bx,ax
  106.     done_fopen:
  107.     endm
  108.  
  109. fclose  macro   handle
  110.     ifdif   <handle>,<bx>
  111.     mov     bx,handle
  112.     endif
  113.     mov     ah,3e
  114.     int     21
  115.     endm
  116.  
  117.  
  118. fread   macro   handle, size, dest_seg, dest_off
  119.     ifdif   <bx>, <handle>
  120.     mov     bx,handle
  121.     endif
  122.     ifdif   <size>,<cx>
  123.     mov     cx,size
  124.     endif
  125.     ifdif   <dest_seg>,<dx>
  126.     mov     dx,offset dest_seg
  127.     endif
  128.     ifdif   <dest_off>, <ds>
  129.     push    dx
  130.     mov     dx,dest_off
  131.     mov     ds,dx
  132.     pop     dx
  133.     endif
  134.     mov     ah,3f
  135.     int     21
  136.     endm
  137.  
  138. printf  macro   string_off, string_seg, length
  139.     ifdif   <string_off>, <dx>
  140.     mov     dx,offset string_off
  141.     endif
  142.     ifdif   <string_seg>, <ds>
  143.     push    dx
  144.     mov     dx,string_seg
  145.     mov     ds,dx
  146.     pop     dx
  147.     endif
  148.     ifnb    <length>
  149.     mov     cx,length
  150.     
  151.     else
  152.     
  153.     push    es di
  154.     push    ds
  155.     pop     es
  156.     mov     di,dx
  157.     mov     cx,0ffff
  158.     cld
  159.     xor     al,al
  160.     repnz   scasb
  161.     mov     cx,di
  162.     sub     cx,dx
  163.     dec     cx
  164.     pop     di es
  165.     endif
  166.  
  167.     mov     ah,40
  168.     xor     bx,bx
  169.     int     21
  170.     endm
  171.  
  172. get_int macro   int_no
  173.     mov     ah,35
  174.     mov     al,int_no
  175.     int     21
  176.     endm
  177.  
  178. set_int macro   int_no, new_offset, new_segment
  179.     ifdif   <new_segment>,<ds>
  180.     mov     ax,new_segment
  181.     mov     ds,ax
  182.     endif
  183.     mov     ah,25
  184.     mov     al,int_no
  185.     mov     dx,offset new_offset
  186.     int     21
  187.     endm
  188. set_trap macro
  189.     push    ax
  190.     pushf
  191.     pop     ax
  192.     or      ax,100
  193.     push    ax
  194.     popf
  195.     pop     ax
  196.     endm
  197.  
  198. clear_trap macro
  199.     push    ax
  200.     pushf
  201.     pop     ax
  202.     and     ax,0feff
  203.     push    ax
  204.     popf
  205.     pop     ax
  206.     endm
  207.  
  208.  
  209.  
  210. .list
  211.  
  212.