home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / SYSLIB / SLIB3.LBR / SSFA.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  115 lines

  1. ;
  2. ; SYSLIB Module Name:  SSFA
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    sfa
  8.  
  9. ;
  10. ;  Externals
  11. ;
  12.     ext    initfcb
  13.  
  14. ;
  15. ;  Equates
  16. ;
  17. bdos    equ    5    ; base address of BDOS
  18. bsfa    equ    30    ; set file attributes function code
  19.  
  20. ;
  21. ;  Macros
  22. ;
  23. putrg    macro
  24.     push    hl    ; save regs
  25.     push    de
  26.     push    bc
  27.     endm
  28. getrg    macro
  29.     pop    bc    ; restore regs
  30.     pop    de
  31.     pop    hl
  32.     endm
  33.  
  34. ;
  35. ;  SFA sets the unambiguous file whose FCB is pted to by DE
  36. ;    to the attributes coded in A, where A0 is the R/O bit and
  37. ;    A7 is the SYS bit; all other file attributes reflected in
  38. ;    this FCB are retained
  39. ;  On exit, A=0FFH and NZ if file not found or ambigous file reference
  40. ;    A=0 and Z if OK
  41. ;    All FCB fields are cleared except for file name and type
  42. ;
  43. sfa:
  44.     putrg        ; save registers
  45.     ld    c,a    ; save file attributes in C
  46. ;
  47. ;  Check for ambiguous file name
  48. ;
  49.     push    de    ; save ptr to FCB
  50.     inc    de    ; pt to first char
  51.     ld    b,11    ; check 11 bytes
  52. amb:
  53.     ld    a,(de)    ; get char
  54.     and    7fh    ; mask MSB
  55.     cp    '?'
  56.     jp    z,amb1
  57.     inc    de
  58.     dec    b
  59.     jp    nz,amb
  60.     inc    b    ; make NZ
  61. amb1:
  62.     pop    de
  63.     jp    z,error
  64.     push    de    ; save ptr to FCB
  65.     ld    hl,9    ; offset to R/O attribute
  66.     add    hl,de    ; pt to R/O byte
  67. ;
  68. ;  Set R/O Bit
  69. ;
  70.     ld    a,c    ; get file attributes
  71.     rrca        ; set new MSB
  72.     call    attset
  73.     inc    hl    ; pt to SYS attribute
  74. ;
  75. ;  Set SYS Bit
  76. ;
  77.     ld    a,c    ; get attribute
  78.     call    attset
  79. ;
  80. ;  Change attributes on disk
  81. ;
  82.     pop    de    ; pt to FCB
  83.     call    initfcb
  84.     ld    c,bsfa    ; use BDOS function
  85.     call    bdos
  86.     cp    0ffh    ; error?
  87.     jp    z,error
  88.     xor    a    ; OK
  89.     getrg        ; restore registers
  90.     ret
  91. ;
  92. ;  Error Return
  93. ;
  94. error:
  95.     ld    a,0ffh    ; set code
  96.     or    a    ; set flags
  97.     getrg        ; restore registers
  98.     ret
  99.  
  100. ;
  101. ;  Set attribute in A (MSB)
  102. ;
  103. attset:
  104.     push    af    ; save A
  105.     ld    a,(hl)    ; get byte
  106.     and    7fh    ; mask out MSB
  107.     ld    b,a    ; save in B
  108.     pop    af    ; get A
  109.     and    80h    ; check SYS bit
  110.     or    b    ; OR in SYS byte
  111.     ld    (hl),a    ; put SYS byte
  112.     ret
  113.  
  114.     end
  115.