mirror of
https://github.com/Tolik-Trek/Attrib.git
synced 2026-06-17 10:20:27 +03:00
initial commite
This commit is contained in:
parent
23222597c9
commit
24dcb0042d
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
[submodule "Shared_Includes"]
|
||||
branch = main
|
||||
path = Shared_Includes
|
||||
url = https://github.com/Tolik-Trek/Shared_Includes.git
|
||||
1
Shared_Includes
Submodule
1
Shared_Includes
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 4c835d305fd5d1bc296039706d5e163c1f2224ca
|
||||
526
attrib.asm
Normal file
526
attrib.asm
Normal file
@ -0,0 +1,526 @@
|
||||
;[BEGIN]
|
||||
;
|
||||
; ATTRIB.EXE [+R|-R] [+A|-A] [+S|-S] [+H|-H][[drive:][path]filename] [/S]
|
||||
;
|
||||
ORG #8100-512
|
||||
INCLUDE "dos_equ.asm"
|
||||
DB "EXE" ;EXE ID
|
||||
DB #00 ;EXE VERSION
|
||||
DW #0200 ;CODE OFFSET LOW
|
||||
DW #0000 ;CODE OFFSET HIGH
|
||||
DW #0000 ;END-BEG ;PRIMARY LOADER
|
||||
DW #0000 ;
|
||||
DW #0000 ;RESERVED
|
||||
DW #0000 ;
|
||||
DW #8100 ;LOAD ADDRESS
|
||||
DW #8100 ;START ADDRESS
|
||||
DW #BFFF ;STACK ADDRESS
|
||||
DS 490
|
||||
|
||||
;SYSTEM ATTRIBUTES
|
||||
READONLY_ATR EQU %00000001
|
||||
HIDDEN_ATR EQU %00000010
|
||||
SYSTEM_ATR EQU %00000100
|
||||
ARCHIVE_ATR EQU %00100000
|
||||
|
||||
USAGE_MSG EQU 1
|
||||
ERRATR_MSG EQU 2
|
||||
ERRKEY_MSG EQU 3
|
||||
|
||||
START PUSH IX
|
||||
CALL INITDATA
|
||||
POP HL
|
||||
INC HL
|
||||
CALL GET_KEY
|
||||
LD B,1
|
||||
LD A,(STOPMODE)
|
||||
OR A
|
||||
JR NZ,QUIT
|
||||
LD A,(MODIFY)
|
||||
BIT 7,A
|
||||
JR NZ,NAME_OK
|
||||
SET 7,A
|
||||
LD (MODIFY),A
|
||||
LD HL,ANYNAME
|
||||
LD DE,FILE_PRM
|
||||
LD BC,EANYNAME-ANYNAME
|
||||
LDIR
|
||||
NAME_OK
|
||||
LD HL,FILE_PRM
|
||||
CHEKNM
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
CP "*"
|
||||
JR Z,CHEKEN
|
||||
CP "?"
|
||||
JR Z,CHEKEN
|
||||
OR A
|
||||
JR NZ,CHEKNM
|
||||
|
||||
LD A,#37
|
||||
LD (ATTR+1),A
|
||||
|
||||
CHEKEN
|
||||
LD HL,FILE_PRM
|
||||
LD DE,FSTRUCT
|
||||
LD BC,#0119 ;FIND FIRST
|
||||
ATTR LD A,#27 ;%00100111
|
||||
RST #10
|
||||
CALL C,DOSERROR
|
||||
JR C,ENDOFDIR
|
||||
LOOP_ATTR
|
||||
CALL CHANGE_ATTRIB
|
||||
LD DE,FSTRUCT
|
||||
LD C,#1A
|
||||
RST #10
|
||||
JR NC,LOOP_ATTR
|
||||
ENDOFDIR
|
||||
CALL CRLF
|
||||
LD B,0
|
||||
QUIT LD C,EXIT
|
||||
RST #10
|
||||
RET
|
||||
|
||||
INITDATA
|
||||
XOR A
|
||||
LD (RESMASK),A
|
||||
LD (SETMASK),A
|
||||
LD (MODIFY),A
|
||||
LD (STOPMODE),A
|
||||
|
||||
RET
|
||||
|
||||
CHANGE_ATTRIB
|
||||
LD A,(MODIFY)
|
||||
OR A
|
||||
RET Z
|
||||
CP #80
|
||||
JR Z,SHOW_ATTRIBS
|
||||
LD A,(RESMASK)
|
||||
CPL
|
||||
LD C,A
|
||||
LD A,(SETMASK)
|
||||
LD B,A
|
||||
PUSH BC
|
||||
LD HL,FILENAME
|
||||
LD BC,#0016
|
||||
RST #10
|
||||
CALL C,DOSERROR
|
||||
POP BC
|
||||
RET C
|
||||
AND C
|
||||
OR B
|
||||
LD HL,FILENAME
|
||||
LD BC,#0116
|
||||
RST #10
|
||||
CALL C,DOSERROR
|
||||
RET
|
||||
|
||||
SHOW_ATTRIBS
|
||||
LD HL,FILENAME
|
||||
LD BC,#0016
|
||||
RST #10
|
||||
CALL C,DOSERROR
|
||||
RET C
|
||||
PRINT_ATTR_STR
|
||||
LD C,A
|
||||
LD B,8
|
||||
LD HL,ATTR_STR
|
||||
ATTR_LP RL C
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
JR C,PSGN_OK
|
||||
LD A," "
|
||||
PSGN_OK PUSH BC
|
||||
LD C,PUTCHAR
|
||||
RST #10
|
||||
POP BC
|
||||
DJNZ ATTR_LP
|
||||
LD A,9
|
||||
LD C,PUTCHAR
|
||||
RST #10
|
||||
LD HL,FILENAME
|
||||
LD C,PCHARS
|
||||
RST #10
|
||||
CALL CRLF
|
||||
RET
|
||||
|
||||
ATTR_STR
|
||||
DB " A SHR"
|
||||
|
||||
PRINT_USAGE
|
||||
LD A,USAGE_MSG
|
||||
CALL MESSAGE
|
||||
LD A,1
|
||||
LD (STOPMODE),A
|
||||
POP HL
|
||||
RET
|
||||
|
||||
GET_KEY
|
||||
LD DE,BUFFER
|
||||
LD C,#43 ;GSWITCH
|
||||
RST #10
|
||||
EX AF,AF'
|
||||
LD A,(BUFFER)
|
||||
OR A
|
||||
RET Z
|
||||
CP "+"
|
||||
JR Z,SETATR
|
||||
CP "-"
|
||||
JR Z,RESATR
|
||||
CP "/"
|
||||
JR Z,SWITCH_KEY
|
||||
;IT PARAMETER IS FILENAME
|
||||
EX AF,AF'
|
||||
PUSH AF
|
||||
PUSH HL
|
||||
LD HL,BUFFER
|
||||
LD DE,FILE_PRM
|
||||
LD C,#43
|
||||
RST #10
|
||||
POP HL
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
LD A,(MODIFY)
|
||||
OR 80h
|
||||
LD (MODIFY),A
|
||||
;
|
||||
GKLOOP EX AF,AF'
|
||||
JR NC,GET_KEY
|
||||
XOR A
|
||||
DEC A ;A=FF, ZF=0 (NO FILENAME)
|
||||
RET
|
||||
|
||||
SWITCH_KEY
|
||||
PUSH HL
|
||||
LD DE,(BUFFER+1)
|
||||
AND A
|
||||
LD HL,"?"
|
||||
SBC HL,DE
|
||||
JR Z,PRINT_USAGE
|
||||
RES 5,E
|
||||
AND A
|
||||
LD HL,"H"
|
||||
SBC HL,DE
|
||||
JR Z,PRINT_USAGE
|
||||
;UNKNOWN KEY
|
||||
LD A,ERRKEY_MSG
|
||||
CALL MESSAGE
|
||||
LD A,1
|
||||
LD (STOPMODE),A
|
||||
POP HL
|
||||
RET
|
||||
|
||||
RESATR
|
||||
LD B,0
|
||||
JR RES_SET_ATR
|
||||
SETATR
|
||||
LD B,1
|
||||
RES_SET_ATR
|
||||
PUSH HL
|
||||
LD DE,(BUFFER+1)
|
||||
AND A
|
||||
LD HL,"?"
|
||||
SBC HL,DE
|
||||
JR Z,PRINT_USAGE
|
||||
RES 5,E ;UPPER "a..z" TO "A..Z"
|
||||
AND A
|
||||
LD HL,"H"
|
||||
LD A,HIDDEN_ATR
|
||||
SBC HL,DE
|
||||
JR Z,ADD_IT
|
||||
AND A
|
||||
LD HL,"S"
|
||||
LD A,SYSTEM_ATR
|
||||
SBC HL,DE
|
||||
JR Z,ADD_IT
|
||||
AND A
|
||||
LD HL,"A"
|
||||
LD A,ARCHIVE_ATR
|
||||
SBC HL,DE
|
||||
JR Z,ADD_IT
|
||||
AND A
|
||||
LD HL,"R"
|
||||
LD A,READONLY_ATR
|
||||
SBC HL,DE
|
||||
JR Z,ADD_IT
|
||||
;UNKNOWN ATTRIB
|
||||
LD A,ERRATR_MSG
|
||||
CALL MESSAGE
|
||||
POP HL
|
||||
RET
|
||||
|
||||
ADD_IT
|
||||
INC B
|
||||
DJNZ SET_MET
|
||||
LD C,A
|
||||
LD A,(RESMASK)
|
||||
OR C
|
||||
LD (RESMASK),A
|
||||
LD A,(MODIFY)
|
||||
OR #01
|
||||
LD (MODIFY),A
|
||||
POP HL
|
||||
JP GKLOOP
|
||||
|
||||
SET_MET
|
||||
LD C,A
|
||||
LD A,(SETMASK)
|
||||
OR C
|
||||
LD (SETMASK),A
|
||||
LD A,(MODIFY)
|
||||
OR #02
|
||||
LD (MODIFY),A
|
||||
POP HL
|
||||
JP GKLOOP
|
||||
|
||||
CR EQU 13
|
||||
LF EQU 10
|
||||
|
||||
CRLF LD A,#0D
|
||||
LD C,PUTCHAR
|
||||
RST #10
|
||||
LD A,#0A
|
||||
LD C,PUTCHAR
|
||||
RST #10
|
||||
RET
|
||||
|
||||
DOSERROR
|
||||
LD E,A
|
||||
LD D,0
|
||||
JP ERR_MSG
|
||||
|
||||
ERR_MSG CALL FMESAGE
|
||||
CALL PRINTZ
|
||||
CALL CRLF
|
||||
CALL CRLF
|
||||
SCF
|
||||
RET
|
||||
|
||||
MESSAGE LD E,A
|
||||
LD D,0
|
||||
CALL MESAGE
|
||||
CALL PRINTZ
|
||||
RET
|
||||
|
||||
MESAGE INC DE
|
||||
LD HL,MSG0
|
||||
LD BC,MSG1-MSG0
|
||||
LCPIR2 XOR A
|
||||
CPIR
|
||||
RET PO
|
||||
RET NZ
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP NZ,LCPIR2
|
||||
RET
|
||||
|
||||
FMESAGE INC DE
|
||||
LD HL,ERR0
|
||||
LD BC,ERR1-ERR0
|
||||
LCPIR XOR A
|
||||
CPIR
|
||||
RET PO
|
||||
RET NZ
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JP NZ,LCPIR
|
||||
RET
|
||||
|
||||
PUTVAR LD DE,PRM1
|
||||
PUTPRM LD BC,15
|
||||
PUTPRMA LD A,(HL)
|
||||
LDI
|
||||
RET PO
|
||||
OR A
|
||||
JR NZ,PUTPRMA
|
||||
RET
|
||||
|
||||
PRINTZ LD A,(HL)
|
||||
INC HL
|
||||
OR A
|
||||
RET Z
|
||||
CP "%"
|
||||
JR NZ,PRINTZ2
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
SUB "1"
|
||||
PUSH HL
|
||||
LD L,A
|
||||
LD H,0
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
LD BC,PRM1
|
||||
ADD HL,BC
|
||||
LD C,PCHARS
|
||||
RST #10
|
||||
POP HL
|
||||
JR PRINTZ
|
||||
PRINTZ2 LD C,PUTCHAR
|
||||
RST #10
|
||||
JP PRINTZ
|
||||
|
||||
PRINT_ LD C,PUTCHAR
|
||||
RST #10
|
||||
RET
|
||||
|
||||
UPPER CP "a"
|
||||
RET C
|
||||
CP "{"
|
||||
RET NC
|
||||
SUB #20
|
||||
RET
|
||||
|
||||
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
MSG0 DB #00
|
||||
DB "ATTRIB",CR,LF,CR,LF,0
|
||||
DB " Usage: ATTRIB.EXE [+R|-R] [+A|-A] [+S|-S] [+H|-H][[drive:][path]filename]",CR,LF,CR,LF
|
||||
DB " Displays or changes file attributes.",CR,LF
|
||||
DB "This command displays, sets, or removes the Read-Only, Archive, System, and",CR,LF
|
||||
DB "Hidden attributes assigned to files or directories.",CR,LF,CR,LF
|
||||
DB "Parameter",CR,LF,CR,LF
|
||||
DB "[drive:][path]filename",CR,LF
|
||||
DB " Specifies the location and name of the file(s) you want to process.",CR,LF,CR,LF
|
||||
DB "Switches",CR,LF,CR,LF
|
||||
DB "+R Sets the Read-Only file attribute.",CR,LF
|
||||
DB "-R Clears the Read-Only file attribute.",CR,LF
|
||||
DB "+A Sets the Archive file attribute.",CR,LF
|
||||
DB "-A Clears the Archive file attribute.",CR,LF
|
||||
DB "+S Sets the file as a System file.",CR,LF
|
||||
DB "-S Clears the System file attribute.",CR,LF
|
||||
DB "+H Sets the file as a Hidden file.",CR,LF
|
||||
DB "-H Clears the Hidden file attribute.",CR,LF
|
||||
DB 0
|
||||
DB 0
|
||||
MSG1
|
||||
|
||||
ERR0 DB #00
|
||||
DB "Unknown error",0
|
||||
DB "Invalid function",0
|
||||
DB "Invalid drive letter",0
|
||||
DB "File not found",0
|
||||
DB "Path not found",0
|
||||
DB "Invalid handle",0
|
||||
DB "Extended error 6",0
|
||||
DB "File exist",0
|
||||
DB "File read only",0
|
||||
DB "Root overflow",0
|
||||
DB "No free space",0
|
||||
DB "Directory not empty",0
|
||||
DB "Can't delete current directory",0
|
||||
DB "Invalid media",0
|
||||
DB "Unknown operation",0
|
||||
DB "Directory exist",0
|
||||
DB "Invalid filename",0
|
||||
DB "Invalid EXE-file",0
|
||||
DB "Not supported EXE-file",0
|
||||
DB "Access denied",0
|
||||
DB "Not ready",0
|
||||
DB "Seek error",0
|
||||
DB "Sector not found",0
|
||||
DB "CRC error",0
|
||||
DB "Write protect",0
|
||||
DB "Read error",0
|
||||
DB "Write error",0
|
||||
DB "Drive failure",0
|
||||
DB "Extended error 28",0
|
||||
DB "Extended error 29",0
|
||||
DB "No free memory",0
|
||||
DB "Invalid memory block",0
|
||||
DB "Extended error 32",0
|
||||
DB "Extended error 33",0
|
||||
DB "Extended error 34",0
|
||||
DB "35",0
|
||||
DB "36",0
|
||||
DB "37",0
|
||||
DB "38",0
|
||||
DB "39",0
|
||||
DB "40",0
|
||||
DB "41",0
|
||||
DB "42",0
|
||||
DB "43",0
|
||||
DB "44",0
|
||||
DB "45",0
|
||||
DB "46",0
|
||||
DB "47",0
|
||||
DB "48",0
|
||||
DB "49",0
|
||||
DB "50"
|
||||
DB 0
|
||||
ERR1
|
||||
|
||||
; PRINT MODULE
|
||||
|
||||
DUMP LD B,2
|
||||
DUMPLP1 PUSH BC
|
||||
PUSH HL
|
||||
CALL CRLF
|
||||
POP HL
|
||||
CALL PHEXSTR
|
||||
POP BC
|
||||
DJNZ DUMPLP1
|
||||
CALL CRLF
|
||||
RET
|
||||
|
||||
PHEX LD E,A
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND #0F
|
||||
ADD A,#30
|
||||
CP #3A
|
||||
JR C,PHEX2
|
||||
ADD A,7
|
||||
PHEX2 CALL PRINT_
|
||||
LD A,E
|
||||
AND #0F
|
||||
ADD A,#30
|
||||
CP #3A
|
||||
JR C,PHEX3
|
||||
ADD A,7
|
||||
PHEX3 CALL PRINT_
|
||||
RET
|
||||
|
||||
PHEXSTR LD B,#10
|
||||
PHS1 PUSH BC
|
||||
LD A,(HL)
|
||||
CALL PHEX
|
||||
LD A,#20
|
||||
CALL PRINT_
|
||||
POP BC
|
||||
INC HL
|
||||
DJNZ PHS1
|
||||
RET
|
||||
|
||||
; .DATA
|
||||
STOPMODE
|
||||
DB #00
|
||||
RESMASK DB #00
|
||||
SETMASK DB #00
|
||||
MODIFY DB #00
|
||||
|
||||
ANYNAME DB "*.*",0
|
||||
EANYNAME
|
||||
|
||||
FSTRUCT DS 256
|
||||
FILENAME EQU FSTRUCT+33
|
||||
|
||||
BUFFER DS 256
|
||||
|
||||
FILE_PRM EQU FILENAME+256
|
||||
|
||||
CUR_DIRECTORY EQU FILE_PRM+256
|
||||
Loading…
Reference in New Issue
Block a user