home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / EXTRA-ST / CPM-80-E / CPM-0.2 / CPM-0 / cpm-0.2 / z80-sources / mlb / fileio.mlb < prev    next >
Encoding:
Text File  |  1994-06-06  |  6.5 KB  |  248 lines

  1.         .z80            ;
  2.         public fcbbas        ;
  3.  
  4. fcb        macro nr        ; ein File-Control-Block
  5.           db 0            ; Byte count (0-127)
  6.           dw defdma        ; Buffer
  7.           db 0            ;
  8. fcb_&nr:      ds 36            ; Platz f}r den FCB
  9.         endm            ;
  10.  
  11.         dseg            ;
  12. fcbnr        defl 1            ;
  13. fcbbas        equ $            ;
  14.         rept files        ;
  15.           fcb %fcbnr        ;
  16. fcbnr          defl fcbnr+1        ;
  17.         endm            ;
  18.         db 255            ; letzter FCB
  19.         cseg            ;
  20.  
  21. ;************************************************************************
  22. ;*                                    *
  23. ;*        Dateibefehle                        *
  24. ;*                                    *
  25. ;************************************************************************
  26. ;*                                    *
  27. ;*        OPEN fcbnr,"dateiname"                    *
  28. ;*        |ffnet Datei mit angeg. Namen                *
  29. ;*        OPEN fcbnr                        *
  30. ;*        |ffnet Datei, HL zeigt auf Namen.            *
  31. ;*        returns NZ, wenn Fehler aufgetreten            *
  32. ;*                                    *
  33. ;************************************************************************
  34.  
  35. open        macro fcbnr,name    ; \ffne Datei (name)
  36.           local fname_addr,weiter
  37.  
  38.           ifnb <name>        ;
  39.             dseg        ;
  40. fname_addr:        db name,0        ;
  41.             cseg        ;
  42.           endif            ;
  43.  
  44.           ifnb <name>        ;
  45.             ld hl,fname_addr    ;
  46.           endif            ;
  47.           ld de,fcb_&fcbnr-1    ;
  48.           call _setfcb##    ;
  49.           bdos open_file,fcb_&fcbnr
  50.           cp 4            ;
  51.           jr nc,weiter        ;
  52.           xor a            ; Byte count
  53.           ld (fcb_&fcbnr-4),a    ; auf 0 setzen
  54.           inc a            ; File open
  55.           ld (fcb_&fcbnr-1),a    ;
  56. weiter:          dec a            ; jetzt Zero-Flag richtig
  57.         endm            ;
  58.  
  59. ;************************************************************************
  60. ;*                                    *
  61. ;*        CREATE fcbnr,"filename"                    *
  62. ;*        kreiert Datei mit angeg. Namen                *
  63. ;*        CREATE fcbnr                        *
  64. ;*        kreiert Datei, HL zeigt auf Namen            *
  65. ;*                                    *
  66. ;************************************************************************
  67.  
  68. create        macro fcbnr,name    ;
  69.           local fname_addr,weiter
  70.  
  71.           ifnb <name>        ;
  72.             dseg        ;
  73. fname_addr:        db name,0        ;
  74.             cseg        ;
  75.           endif            ;
  76.  
  77.           ifnb <name>        ;
  78.             ld hl,fname_addr    ;
  79.           endif            ;
  80.           ld de,fcb_&fcbnr-1    ;
  81.           call _setfcb##    ;
  82.           bdos delete_file,fcb_&fcbnr
  83.           bdos make_file,fcb_&fcbnr
  84.           cp 4            ;
  85.           jr nc,weiter        ;
  86.           xor a            ; Byte count
  87.           ld (fcb_&fcbnr-4),a    ; auf 0 setzen
  88.           inc a            ; File open
  89.           ld (fcb_&fcbnr-1),a    ;
  90. weiter:          dec a            ; jetzt Zero-Flag richtig
  91.         endm            ;
  92.  
  93. ;************************************************************************
  94. ;*                                    *
  95. ;*        KILL fcbnr,"filename"                    *
  96. ;*        l|scht Datei mit angeg. Namen                *
  97. ;*        KILL fcbnr                        *
  98. ;*        l|scht Datei, HL zeigt auf Namen            *
  99. ;*                                    *
  100. ;************************************************************************
  101.  
  102. kill        macro fcbnr,name    ;
  103.           local fname_addr,weiter
  104.  
  105.           ifnb <name>        ;
  106.             dseg        ;
  107. fname_addr:        db name,0        ;
  108.             cseg        ;
  109.           endif            ;
  110.  
  111.           ifnb <name>        ;
  112.             ld hl,fname_addr    ;
  113.           endif            ;
  114.           ld de,fcb_&fcbnr-1    ;
  115.           call _setfcb##    ;
  116.           bdos delete_file,fcb_&fcbnr
  117.           cp 4            ;
  118.           jr nc,weiter        ;
  119.           xor a            ;
  120. weiter:          or a            ; jetzt Zero-Flag richtig
  121.         endm            ;
  122.  
  123. ;************************************************************************
  124. ;*                                    *
  125. ;*        CLOSE fcbnr                        *
  126. ;*        schlie~t Datei fcbnr, falls offen            *
  127. ;*        CLOSE                            *
  128. ;*        schlie~t alle Dateien                    *
  129. ;*                                    *
  130. ;************************************************************************
  131.  
  132. close        macro fcbnr        ; schlie~e Datei oder alle
  133.           local weiter        ;
  134.           ifnb <fcbnr>        ;
  135.             ld de,fcb_&fcbnr-1    ;
  136.             call _close##    ;
  137.           else            ;
  138.             call _clsal##    ;
  139.           endif            ;
  140.         endm            ;
  141.  
  142. ;************************************************************************
  143. ;*                                    *
  144. ;*        READ fcbnr                        *
  145. ;*        liest sequentiell einen                    *
  146. ;*        Record ein.                        *
  147. ;*                                    *
  148. ;************************************************************************
  149.  
  150. read        macro fcbnr        ;
  151.           ld de,fcb_&fcbnr-1    ; pointet auf Statusbyte
  152.           call _seqrd##        ;
  153.         endm            ;
  154.  
  155. ;************************************************************************
  156. ;*                                    *
  157. ;*        WRITE fcbnr                        *
  158. ;*        schreibt sequentiell einen                *
  159. ;*        Record auf Disk                        *
  160. ;*                                    *
  161. ;************************************************************************
  162.  
  163. write        macro fcbnr        ;
  164.           ld de,fcb_&fcbnr-1    ; pointet auf Statusbyte
  165.           call _seqwr##        ;
  166.         endm            ;
  167.  
  168. ;************************************************************************
  169. ;*                                    *
  170. ;*        READC fcbnr                        *
  171. ;*        liest sequentiell ein                    *
  172. ;*        Zeichen ein (wird im Akku }bergeben).            *
  173. ;*                                    *
  174. ;************************************************************************
  175.  
  176. readc        macro fcbnr        ;
  177.           ld de,fcb_&fcbnr-1    ; pointet auf Statusbyte
  178.           call _chrrd##        ;
  179.         endm            ;
  180.  
  181. ;************************************************************************
  182. ;*                                    *
  183. ;*        WRITEC fcbnr                        *
  184. ;*        schreibt sequentiell ein                *
  185. ;*        Zeichen (C) auf Disk                    *
  186. ;*                                    *
  187. ;************************************************************************
  188.  
  189. writec        macro fcbnr        ;
  190.           ld de,fcb_&fcbnr-1    ; pointet auf Statusbyte
  191.           call _chrwr##        ;
  192.         endm            ;
  193.  
  194. ;************************************************************************
  195. ;*                                    *
  196. ;*        DMA fcbnr,dmaaddress                    *
  197. ;*        setzt DMA-Adresse f}r fcbnr auf                *
  198. ;*        angegebenen Wert, wenn dmaaddress nicht angegeben,    *
  199. ;*        wird sie um 80h erh|ht                    *
  200. ;*                                    *
  201. ;************************************************************************
  202.  
  203. dma        macro fcbnr,dmaad    ;
  204.           ifnb <dmaad>        ;
  205.             ld hl,dmaad        ;
  206.             ld (fcb_&fcbnr-3),hl;
  207.           else            ;
  208.             ld hl,(fcb_&fcbnr-3);
  209.             ld de,80h        ;
  210.             add hl,de        ;
  211.             ld (fcb_&fcbnr-3),hl;
  212.           endif            ;
  213.         endm            ;
  214.  
  215. ;************************************************************************
  216. ;*                                    *
  217. ;*        RNDREAD fcbnr,recordnr                    *
  218. ;*        liest einen Randomrecord ein                *
  219. ;*        wenn recordnr nicht angegeben,                *
  220. ;*        wird Record HL gelesen                    *
  221. ;*                                    *
  222. ;************************************************************************
  223.  
  224. rndread        macro fcbnr,recnr    ;
  225.           ifnb <recnr>        ;
  226.             ld hl,recnr        ;
  227.           endif            ;
  228.           ld de,fcb_&fcbnr-1    ;
  229.           call _rndrd##        ;
  230.         endm            ;
  231.  
  232. ;************************************************************************
  233. ;*                                    *
  234. ;*        RNDWRITE fcbnr,recordnr                    *
  235. ;*        schreibt einen Randomrecord                *
  236. ;*        wenn recordnr nicht angegeben,                *
  237. ;*        wird Record HL geschrieben                *
  238. ;*                                    *
  239. ;************************************************************************
  240.  
  241. rndwrite    macro fcbnr,recnr    ;
  242.           ifnb <recnr>        ;
  243.             ld hl,recnr        ;
  244.           endif            ;
  245.           ld de,fcb_&fcbnr-1    ;
  246.           call _rndwr##        ;
  247.         endm            ;
  248.