mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
2.9 KiB
130 lines
2.9 KiB
page
|
|
|
|
; Library: RCPPROT for Z34RCP
|
|
; Author: Carson Wilson
|
|
; Version: 1.1
|
|
; Date: August 12, 1989
|
|
; Changes: Now responds dynamically to QUIET flag, eliminating "noise."
|
|
|
|
; Author: Carson Wilson
|
|
; Version: 1.0
|
|
; Date: June 15, 1988
|
|
;
|
|
; Command: PROT
|
|
; Function: To set the attributes of a file (R/O, SYS, and ARC)
|
|
; Form: PROT afn RSAI
|
|
; Comments: If R, S, or A are omitted, the file is made R/W, DIR, or
|
|
; modified, respectively. R, S, A, and I may be in any order.
|
|
; If I is present, Inspection is enabled.
|
|
|
|
att:
|
|
call retsave
|
|
call dirchek ; Test bad directory
|
|
xor a ; Set no inspect
|
|
ld (inspect),a
|
|
ld hl,0 ; Set r/o and sys attributes off
|
|
ld c,0 ; Set Arc attribute off
|
|
ld de,fcb2+1 ; Pt to attributes
|
|
ld b,4 ; 4 chars max
|
|
att1:
|
|
ld a,(de) ; Get char
|
|
inc de ; Pt to next
|
|
cp 'I' ; Inspect?
|
|
jr z,atti
|
|
cp 'R' ; Set r/o?
|
|
jr z,attr
|
|
cp 'S' ; Set sys?
|
|
jr z,atts
|
|
cp 'A'
|
|
jr z,atta
|
|
att2:
|
|
djnz att1
|
|
jr att3
|
|
atti:
|
|
ld (inspect),a ; Set flag
|
|
jr att2
|
|
attr:
|
|
ld h,a ; Save R/O flag
|
|
jr att2
|
|
atts:
|
|
ld l,a ; Save SYS flag
|
|
jr att2
|
|
atta:
|
|
ld c,a ; Save ARC
|
|
jr att2
|
|
att3:
|
|
ld (fatt2),hl ; Save file attributes
|
|
ld a,c
|
|
ld (fatt1),a ; Save Arc attribute
|
|
ld a,1 ; Select dir and sys files
|
|
call getdir ; Load directory
|
|
jp z,noflerr ; Tell error handler no file
|
|
jr att5
|
|
att4:
|
|
ld hl,(nxtfile) ; Pt to next file
|
|
ld a,(hl) ; End of list?
|
|
or a
|
|
jp z,exit
|
|
call crlf ; New line
|
|
att5: call break ; Check for possible abort
|
|
call qplug ; Turn off output if quiet
|
|
push hl ; Save ptr to current file
|
|
call prfn ; Print its name
|
|
ld (nxtfile),hl ; Save ptr to next file
|
|
call print
|
|
db ' Set to R','/'+80h
|
|
ld hl,(fatt2) ; Get attributes
|
|
ld c,'W' ; Assume r/w
|
|
ld a,h ; Get r/o bit
|
|
or a
|
|
jr z,att6
|
|
ld c,'O' ; Set r/o
|
|
att6: ld a,c ; Get char
|
|
call conout
|
|
ld a,l ; Get sys flag
|
|
or a ; Set flag
|
|
jr z,att7
|
|
call print
|
|
db ', SY','S'+80h
|
|
att7: ld a,(fatt1)
|
|
or a
|
|
jr z,att7a
|
|
call print
|
|
db ', AR','C'+80h
|
|
att7a: call unplug ; Turn output on
|
|
inspect equ $+1 ; Ptr for in-the-code modification
|
|
ld a,0 ; Get inspect flag
|
|
or a ; Z=no
|
|
pop hl ; Get ptr to current file
|
|
jr z,att8
|
|
call eraq1 ; Ask for y/n
|
|
jr nz,att4 ; Advance to next file if not y
|
|
att8: ld de,fcb1+1 ; Copy into fcb1
|
|
ld b,11 ; 11 bytes
|
|
call blkmov
|
|
ex de,hl
|
|
dec hl ; Pt to archive byte
|
|
fatt1 equ $+1
|
|
ld a,0
|
|
call attset
|
|
dec hl ; Pt to sys byte
|
|
fatt2 equ $+1 ; Ptr for in-the-code modification
|
|
ld de,0 ; Get attributes
|
|
ld a,e ; Get sys flag
|
|
call attset ; Set attribute correctly
|
|
dec hl ; Pt to r/o byte
|
|
ld a,d ; Get r/o flag
|
|
call attset
|
|
ld de,fcb1 ; Pt to fcb
|
|
ld c,30 ; Set attributes
|
|
call bdos
|
|
jp att4
|
|
attset:
|
|
res 7,(hl) ; Clear attribute
|
|
or a
|
|
ret z ; 0=clear attribute
|
|
set 7,(hl) ; Set attribute
|
|
ret
|
|
|
|
; End RCPPROT.LIB
|
|
|