home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 287_01 / dosread.asm < prev    next >
Assembly Source File  |  1989-05-25  |  3KB  |  114 lines

  1.         TITLE   DOSREAD  of GDS
  2.         page    60,132
  3.         .SFCOND
  4. ;
  5. IFDEF   COLOR
  6.   IFDEF HERC
  7.    .err both display type defined
  8.   ENDIF
  9. else
  10.   IFNDEF HERC
  11.     HERC equ 0
  12.   ENDIF
  13. ENDIF
  14.  
  15. smo     equ     4       ; small model offset value
  16.  
  17. DGROUP  group   _DATA
  18. _DATA   segment word public 'DATA'
  19.         assume  ds:DGROUP
  20. tmp     dw      ?
  21.         dw      ?
  22. _DATA   ends
  23.  
  24. _TEXT   segment byte public 'CODE'
  25.         assume  cs:_TEXT,ds:DGROUP
  26.         public  _dosread,_dosopen,_dosseek,_dosclose
  27.  
  28. _dosopen proc   near    ; public to c
  29.         push    bp
  30.         mov     bp,sp
  31.         mov     dx,[bp+smo]
  32.         mov     ax,3d00h
  33.         int     21h
  34.         jnc     dso010
  35.         mov     ax,0ffffh
  36. dso010: pop     bp
  37.         ret
  38. _dosopen endp
  39.  
  40. _dosseek proc near      ; public to c
  41.         push    bp
  42.         mov     bp,sp
  43.         mov     bx,[bp+smo]
  44.         mov     ax,4200h
  45.         mov     dx,[bp+smo+2]
  46.         xor     cx,cx
  47.         int     21h
  48.         jnc     dss010
  49.         mov     bx,0ffffh
  50. dss010: mov     ax,bx
  51.         pop     bp
  52.         ret
  53. _dosseek endp
  54.  
  55. _dosread proc near      ; public to c
  56.         assume  es:DGROUP
  57.         push    bp
  58.         mov     bp,sp
  59.         push    si
  60.         push    di
  61.         push    ds
  62.         push    ds
  63.         pop     es
  64.         mov     es:tmp,0
  65.         mov     es:tmp+2,0
  66.         mov     bx,[bp+smo]
  67. dsr005: mov     ax,3f00h
  68.         lds     dx,[bp+smo+2]
  69.         mov     cx,[bp+smo+8]
  70.         test    cx,cx
  71.         jnz     dsr010
  72.         mov     cx,[bp+smo+6]
  73.         cmp     cx,8000h
  74.         jb      dsr020
  75. dsr010: sub     word ptr [bp+smo+6],08000h
  76.         sbb     word ptr [bp+smo+8],0
  77.         mov     cx,8000h
  78.         add     [bp+smo+4],0800h
  79. dsr020: int     21h
  80.         jc      dsrerr
  81.         add     es:tmp,ax
  82.         adc     es:tmp+2,0
  83.         cmp     ax,08000h
  84.         je      dsr005
  85.         mov     ax,es:tmp
  86.         mov     dx,es:tmp+2
  87.         jmp     dsr030
  88. dsrerr: mov     ax,0ffffh
  89.         mov     dx,ax
  90. dsr030: pop     ds
  91.         pop     di
  92.         pop     si
  93.         pop     bp
  94.         ret
  95.         assume  es:nothing
  96. _dosread endp
  97.  
  98. _dosclose proc near
  99.         push    bp
  100.         mov     bp,sp
  101.         mov     bx,[bp+smo]
  102.         mov     ax,3e00h
  103.         int     21h
  104.         jnc     dsc010
  105.         mov     bx,0ffffh
  106. dsc010: mov     ax,bx
  107.         pop     bp
  108.         ret
  109. _dosclose endp       
  110.  
  111. _TEXT   ends
  112.         end
  113.  
  114.