From 24dcb0042dce7b552d53b6013fc9f364cae20501 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 9 Nov 2023 00:22:08 +1000 Subject: [PATCH] initial commite --- .gitmodules | 4 + Shared_Includes | 1 + attrib.asm | 526 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 531 insertions(+) create mode 100644 .gitmodules create mode 160000 Shared_Includes create mode 100644 attrib.asm diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..7355856 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Shared_Includes"] + branch = main + path = Shared_Includes + url = https://github.com/Tolik-Trek/Shared_Includes.git diff --git a/Shared_Includes b/Shared_Includes new file mode 160000 index 0000000..4c835d3 --- /dev/null +++ b/Shared_Includes @@ -0,0 +1 @@ +Subproject commit 4c835d305fd5d1bc296039706d5e163c1f2224ca diff --git a/attrib.asm b/attrib.asm new file mode 100644 index 0000000..53a39f4 --- /dev/null +++ b/attrib.asm @@ -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