home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / sfopen.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.2 KB  |  65 lines

  1. ;
  2. ; SYSLIB Module Name:  SFOPEN
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    F$MOPEN        F$OPEN
  8. ; Module External References:
  9. ;    BDOS
  10. ;
  11.  
  12. ;
  13. ;  F$OPEN -- OPEN FILE SPECIFIED BY FCB PTED TO BY DE
  14. ;    RETURN W/A=0 AND ZERO FLAG SET (Z) IF NO ERROR
  15. ;    RETURN W/A=0FFH AND NZ IF FILE NOT FOUND OR NO ROOM IN DIRECTORY
  16. ;  F$MOPEN -- OPEN AND MAKE FILE SPECIFIED BY FCB PTED TO BY DE
  17. ;    IF FILE DOES NOT EXIST, CREATE IT FIRST
  18. ;    SAME RETURN CODES
  19. ;
  20.     EXT    BDOS
  21.  
  22. PUTRG    MACRO
  23.     PUSH    B    ; SAVE BC, DE, HL
  24.     PUSH    D
  25.     PUSH    H
  26.     ENDM
  27. GETRG    MACRO
  28.     POP    H    ; RESTORE HL, DE, BC
  29.     POP    D
  30.     POP    B
  31.     ENDM
  32.  
  33. F$OPEN::
  34.     PUTRG        ; SAVE REGISTERS
  35.     MVI    C,B$OPEN    ; OPEN FILE
  36.     CALL    BDOS    ; OPEN FILE
  37.     CPI    255    ; NOT PRESENT
  38.     JNZ    OPENOK    ; OK
  39. OPENERR:
  40.     MVI    A,0FFH    ; ERROR FLAG
  41.     ORA    A    ; SET FLAGS
  42.     JMP    OPENDN
  43. OPENOK:
  44.     XRA    A    ; OK FLAG
  45. OPENDN:
  46.     GETRG        ; RESTORE REGISTERS
  47.     RET
  48.  
  49. F$MOPEN::
  50.     PUTRG        ; SAVE REGISTERS
  51.     MVI    C,B$OPEN    ; TRY TO OPEN FILE
  52.     CALL    BDOS
  53.     CPI    0FFH    ; NOT PRESENT?
  54.     JNZ    OPENOK    ; OK
  55.     MVI    C,B$CREAT    ; TRY TO CREATE FILE
  56.     CALL    BDOS
  57.     CPI    0FFH    ; NOT ENOUGH ROOM?
  58.     JNZ    OPENOK    ; OK
  59.     JMP    OPENERR    ; ERROR RETURN
  60.  
  61. B$OPEN    EQU    15    ; OPEN FILE
  62. B$CREAT    EQU    22    ; CREATE FILE
  63.  
  64.     END
  65.