DECLARE SUB DriveChange ()
DECLARE SUB WriteAttr (RO%, Hid%, Sys%, Arc%)
DECLARE SUB Attributes ()
DECLARE SUB Rename ()
DECLARE SUB DeleteFiles ()
DECLARE SUB RemoveDir ()
DECLARE FUNCTION GetDirName$ ()
DECLARE SUB MakeDir ()
DECLARE SUB CopyFiles ()
DECLARE SUB PrintDir ()
DECLARE SUB Center (Row%, MSG$)
DECLARE SUB Help ()
DECLARE SUB FunctionKey (KeyPress%)
DECLARE SUB DrawBox (Top%, bottom%, Left%, Right%, Title$)
DECLARE SUB ChoiceMenu (XLoc%, YLoc%, First$, Second$)
DECLARE SUB FillBox (Top%, bottom%, Left%, Right%)
DECLARE SUB ParameterParse (Char$, Scan%)
DECLARE SUB ScrollUp ()
DECLARE SUB GetVol ()
DECLARE SUB ReadDir ()
DECLARE SUB Program ()
DECLARE FUNCTION CurrentPath$ (Drive$)
DECLARE FUNCTION CurrentDrive$ ()
DECLARE SUB FindFirst (Path$, Mask$, Attrib%)
DECLARE SUB SetDTA ()
DECLARE SUB FindNext ()
DECLARE FUNCTION CheckColorMono% ()
DECLARE FUNCTION CheckDos% ()
DECLARE SUB DisplayDir ()
DECLARE SUB ReadDrive ()
DECLARE SUB DispFile (FileNum%, L%)
DECLARE SUB GetKey (Char$, Scan%)
DECLARE SUB ScrollDown ()
DECLARE SUB SortIt ()
DECLARE SUB SoundIt (Noise%)
DECLARE SUB WriteScreen ()
DECLARE SUB ShowDir (FileNum%, Location%)
DECLARE SUB PrintAttr (FileNum%)
DECLARE FUNCTION GetPath$ ()
DECLARE SUB FillIn (Mask$, FileName$)
TYPE RegType
AX AS INTEGER
BX AS INTEGER
CX AS INTEGER
DX AS INTEGER
BP AS INTEGER
SI AS INTEGER
DI AS INTEGER
Flags AS INTEGER
DS AS INTEGER
ES AS INTEGER
END TYPE
TYPE DTAType
DOS AS STRING * 21
Attrib AS STRING * 1
Time AS INTEGER
Date AS INTEGER
Size AS LONG
FileName AS STRING * 13
END TYPE
TYPE FileType
FileName AS STRING * 13
Size AS LONG
Date AS LONG
Time AS LONG
Attrib AS STRING * 1
Selected AS INTEGER
END TYPE
COMMON SHARED Ret$, Mask$, Path$, Struct$, Volume$, Items%, PrevPos%, Exiting%
COMMON SHARED Space&, Total%, Drive$, Parm$, NoVol%, Parameter$, ParamPos%
COMMON SHARED Choice%, Scan%, Char$, ErrorHappened%, Null$, Esc$, FileNum%
COMMON SHARED Location%, SubIn$, FileName$
CONST Left = 75, Right = 77, Up = 72, Down = 80, PgUp = 73, PgDn = 81
CONST Del = 83, PadPlus = 78, PadMinus = 74, Home = 71, EndKey = 79
DIM SHARED InRegs AS RegType, OutRegs AS RegType
DIM SHARED File(1 TO 1000) AS FileType, DTA AS DTAType, Lc(24, 80) AS INTEGER
DIM SHARED MO$(12), Pl$(1)
ON ERROR GOTO ErrorHandle:
IF CheckDos = 0 THEN PRINT "SHELL-TER needs at least DOS 2.x": END
LOCATE , , 0, 12, 13: DEFINT A-Z: SCREEN 0, 0, 0: WIDTH 80: CLS
ParamPos = 1: PrevPos = 1: Pl$(1) = "s": Ret$ = CHR$(13)
Parameter$ = SPACE$(63): Null$ = CHR$(0): Esc$ = CHR$(27)
FOR I = 1 TO 80
FOR J = 1 TO 24
Lc(J, I) = ((I - 1) * 2) + ((J - 1) * 160)
NEXT
NEXT
FOR I = 1 TO 12
READ MO$(I)
NEXT
DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
Program
ErrorHandle:
IF ERR = 7 THEN CLS : PRINT "Out of memory": END
IF ERR = 24 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 4: PRINT "LPT1: timeout"
ChoiceMenu 6, 5, "Retry", "Abort"
IF Choice = 2 THEN ErrorHappened = 1 ELSE ErrorHappened = 2
COLOR 7: FillBox 4, 7, 1, 19: RESUME NEXT
END IF
IF ERR = 53 THEN RESUME NEXT
IF ERR = 58 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 3: PRINT "Duplicate name"
LOCATE 6, 7: COLOR 0, 7: PRINT " Abort ": COLOR 7, 0
DO
GetKey Char$, Scan
IF Char$ = Ret$ THEN EXIT DO
LOOP
FillBox 4, 7, 1, 19
ErrorHappened = 1
RESUME NEXT
END IF
IF ERR = 64 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 4: PRINT "Bad file name"
LOCATE 6, 7: COLOR 0, 7: PRINT " Abort ": COLOR 7, 0
DO
GetKey Char$, Scan
IF Char$ = Ret$ THEN EXIT DO
LOOP
FillBox 4, 7, 1, 19
ErrorHappened = 1
RESUME NEXT
END IF
IF ERR = 71 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 3: PRINT "Drive not ready"
ChoiceMenu 6, 5, "Drive", "Abort"
IF Choice = 1 THEN ErrorHappened = 1: FillBox 4, 7, 1, 19: RESUME NEXT
ErrorHappened = 2: FillBox 4, 7, 1, 19: RESUME NEXT
END IF
IF ERR = 75 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 3: PRINT "Directory error"
LOCATE 6, 7: COLOR 0, 7: PRINT " Abort ": COLOR 7, 0
DO
GetKey Char$, Scan
IF Char$ = Ret$ THEN EXIT DO
LOOP
FillBox 4, 7, 1, 19
ErrorHappened = 1
RESUME NEXT
COLOR 7: FillBox 4, 7, 1, 19
END IF
IF ERR = 76 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 3: PRINT "Path not found"
LOCATE 6, 7: COLOR 0, 7: PRINT " Abort ": COLOR 7, 0
DO
GetKey Char$, Scan
IF Char$ = Ret$ THEN EXIT DO
LOOP
FillBox 4, 7, 1, 19
ErrorHappened = 1
RESUME NEXT
END IF
IF ERR = 68 THEN
SoundIt 3
DrawBox 4, 7, 1, 19, "Error"
LOCATE 5, 4: PRINT "No such drive"
ChoiceMenu 6, 5, "Drive", "Abort"
IF Choice = 1 THEN ErrorHappened = 1: FillBox 4, 7, 1, 19: RESUME NEXT
ErrorHappened = 2: FillBox 4, 7, 1, 19: RESUME NEXT
END IF
PRINT "Error"; ERR; " occured": SoundIt 3: END
RESUME
SUB Attributes STATIC
DrawBox 7, 14, 29, 50, "Set Attributes"
FileName$ = File(FileNum).FileName
FOR I = 1 TO 13
IF MID$(FileName$, I, 1) = Null$ THEN
FileName$ = LEFT$(FileName$, I - 1)
EXIT FOR
END IF
NEXT
Center 8, FileName$
Center 9, "[ ] Read Only"
Center 10, "[ ] Hidden "
Center 11, "[ ] System "
Center 12, "[ ] Archive "
Center 13, "[ Set ] [ Cancel ]"
Attribute = 1
Attr = ASC(File(FileNum).Attrib)
IF Attr AND 1 THEN RO = -1 ELSE RO = 0
IF Attr AND 2 THEN Hid = -1 ELSE Hid = 0
IF Attr AND 4 THEN Sys = -1 ELSE Sys = 0
IF Attr AND 32 THEN Arc = -1 ELSE Arc = 0
DO
LOCATE 9, 34, 0: IF RO THEN PRINT "û" ELSE PRINT " "
LOCATE , 34: IF Hid THEN PRINT "û" ELSE PRINT " "
LOCATE , 34: IF Sys THEN PRINT "û" ELSE PRINT " "
LOCATE , 34: IF Arc THEN PRINT "û" ELSE PRINT " "
SELECT CASE Attribute
CASE 1:
LOCATE 9, 34, 1
GetKey Char$, Scan
IF Char$ = " " THEN RO = NOT RO
IF Char$ = " " OR (Scan = Down AND Char$ = Null$) THEN Attribute = 2
IF Char$ = Ret$ THEN WriteAttr RO, Hid, Sys, Arc: ShowDir FileNum, Location: EXIT SUB
IF Char$ = Null$ AND Scan = 15 OR (Scan = Up AND Char$ = Null$) THEN Attribute = 6
IF Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
CASE 2:
LOCATE 10, 34, 1
GetKey Char$, Scan
IF Char$ = " " THEN Hid = NOT Hid
IF Char$ = " " OR (Scan = Down AND Char$ = Null$) THEN Attribute = 3
IF Char$ = Ret$ THEN WriteAttr RO, Hid, Sys, Arc: ShowDir FileNum, Location: EXIT SUB
IF Char$ = Null$ AND Scan = 15 OR (Scan = Up AND Char$ = Null$) THEN Attribute = 1
IF Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
CASE 3:
LOCATE 11, 34, 1
GetKey Char$, Scan
IF Char$ = " " THEN Sys = NOT Sys
IF Char$ = " " OR (Scan = Down AND Char$ = Null$) THEN Attribute = 4
IF Char$ = Ret$ THEN WriteAttr RO, Hid, Sys, Arc: ShowDir FileNum, Location: EXIT SUB
IF Char$ = Null$ AND Scan = 15 OR (Scan = Up AND Char$ = Null$) THEN Attribute = 2
IF Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
CASE 4:
LOCATE 12, 34, 1
GetKey Char$, Scan
IF Char$ = " " THEN Arc = NOT Arc
IF Char$ = " " OR (Scan = Down AND Char$ = Null$) THEN Attribute = 5
IF Char$ = Ret$ THEN WriteAttr RO, Hid, Sys, Arc: ShowDir FileNum, Location: EXIT SUB
IF Char$ = Null$ AND Scan = 15 OR (Scan = Up AND Char$ = Null$) THEN Attribute = 3
IF Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
CASE 5:
LOCATE 13, 31, 0: COLOR 0, 7: PRINT "[ Set ]": COLOR 7, 0
GetKey Char$, Scan
IF Char$ = " " OR (Scan = Right AND Char$ = Null$) OR (Scan = Left AND Char$ = Null$) THEN Attribute = 6: COLOR 7, 0: LOCATE 13, 31: PRINT "[ Set ]"
IF (Char$ = Null$ AND Scan = 15) OR (Scan = Up AND Char$ = Null$) THEN Attribute = 4: COLOR 7, 0: LOCATE 13, 31: PRINT "[ Set ]"
IF Char$ = Ret$ THEN WriteAttr RO, Hid, Sys, Arc: ShowDir FileNum, Location: EXIT SUB
IF Scan = Down AND Char$ = Null$ THEN Attribute = 1: COLOR 7, 0: LOCATE 13, 31: PRINT "[ Set ]"
IF Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
CASE 6:
LOCATE 13, 39, 0: COLOR 0, 7: PRINT "[ Cancel ]": COLOR 7, 0
GetKey Char$, Scan
IF Char$ = " " OR (Scan = Down AND Char$ = Null$) THEN Attribute = 1: COLOR 7, 0: LOCATE 13, 39: PRINT "[ Cancel ]"
IF (Char$ = Null$ AND Scan = 15) OR (Scan = Left AND Char$ = Null$) OR (Scan = Right AND Char$ = Null$) THEN Attribute = 5: COLOR 7, 0: LOCATE 13, 39: PRINT "[ Cancel ]"
IF Char$ = Ret$ OR Char$ = Esc$ THEN ShowDir FileNum, Location: EXIT SUB
END SELECT
LOOP
END SUB
SUB Center (Row, MSG$) STATIC
LOCATE Row, (80 - LEN(MSG$)) / 2: PRINT MSG$
END SUB
FUNCTION CheckColorMono STATIC
DEF SEG = &H40
A = PEEK(&H10) AND 48
IF A = 32 THEN
DEF SEG = &HB800
A = 1
ELSE
DEF SEG = &HB000
A = 0
END IF
END FUNCTION
FUNCTION CheckDos STATIC
InRegs.AX = &H3000
CALL INTERRUPT(&H21, InRegs, OutRegs)
DOS = OutRegs.AX \ 255
CheckDos = ((OutRegs.AX - DOS) MOD 255)
END FUNCTION
SUB ChoiceMenu (XLoc, YLoc, First$, Second$) STATIC
First$ = " " + First$ + " ": Second$ = " " + Second$ + " "
YLoc = YLoc - 1: LOCATE XLoc, YLoc: PRINT First$; " "; Second$
Choice = 1
DO
Moved = 0
IF Choice = 1 THEN
LOCATE XLoc, YLoc: COLOR 0, 7: PRINT First$; : COLOR 7, 0: PRINT Second$
ELSE
LOCATE XLoc, YLoc: PRINT First$; : COLOR 0, 7: PRINT Second$
END IF
DO
COLOR 7
GetKey Char$, Scan
IF Scan = Left OR Scan = Right THEN Choice = 2 + (Choice = 2): Moved = 1
IF Char$ = Ret$ THEN EXIT SUB
IF Char$ = Esc$ THEN Choice = 2: EXIT SUB
IF Moved THEN EXIT DO
LOOP
LOOP
END SUB
SUB CopyFiles STATIC
DrawBox 10, 13, 7, 74, "Copy"
LOCATE 11, 9: PRINT "Copy to:"
Exiting = 0
NewName$ = GetPath$
IF Exiting THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
PathName$ = File(FileNum).FileName
DO
NoSpace = 0
FOR I = 1 TO 12
IF MID$(PathName$, I, 1) = Null$ THEN
PathName$ = LEFT$(PathName$, I - 1) + MID$(PathName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
DO
PrevSlash = Slash: Slash = INSTR(NewName$, "\")
IF Slash = 0 THEN EXIT DO
LOOP
IF PrevSlash = 0 THEN PrevSlash = 1
FileName$ = MID$(PathName$, PrevSlash)
FindFirst "", PathName$, 55
IF OutRegs.AX = 3 THEN ERROR 64: WriteScreen: ShowDir FileNum, Location: EXIT SUB
SHELL "COPY " + PathName$ + NewName$ + " > NUL"
ReadDrive
ShowDir FileNum, Location: EXIT SUB
END SUB
FUNCTION CurrentDrive$ STATIC
InRegs.AX = &H1900
CALL InterruptX(&H21, InRegs, OutRegs)
CurrentDrive$ = CHR$(65 + (OutRegs.AX - (OutRegs.AX \ 255)) MOD 255) + ":"
END FUNCTION
FUNCTION CurrentPath$ (Drive$) STATIC
DIM CurrentDir AS STRING * 64
InRegs.AX = &H4700
InRegs.DX = ASC(LEFT$(Drive$, 1)) - 64
InRegs.SI = VARPTR(CurrentDir)
InRegs.DS = VARSEG(CurrentDir)
CALL InterruptX(&H21, InRegs, OutRegs)
Path$ = "\" + LEFT$(CurrentDir, INSTR(CurrentDir, Null$) - 1)
IF Path$ <> "\" THEN Path$ = Path$ + "\"
CurrentPath$ = Path$
END FUNCTION
SUB DeleteFiles STATIC
Num = 0
FOR I = 1 TO Items
IF File(I).Selected THEN Num = Num + 1
NEXT
IF Num = 0 THEN
DrawBox 10, 13, 31, 47, "Delete"
LOCATE 11, 33: PRINT "Are you sure?"
ChoiceMenu 12, 36, "Yes", "No"
IF Choice = 2 THEN
ShowDir FileNum, Location: EXIT SUB
ELSE
FileName$ = File(FileNum).FileName
DO
NoSpace = 0
FOR I = 1 TO 12
IF MID$(FileName$, I, 1) = Null$ THEN
FileName$ = LEFT$(FileName$, I - 1) + MID$(FileName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
IF LEN(FileName$) = 0 THEN FileName$ = LEFT$(File(FileNum).FileName, 12)
KILL FileName$
ReadDrive
ShowDir FileNum, Location
FileNum = 1: Location = 5
END IF
ELSE
DrawBox 8, 11, 29, 52, "Delete"
Center 9, " Delete" + STR$(Num) + " file" + Pl$(ABS(Num <> 1)) + "?"
ChoiceMenu 10, 36, "Ok", "Cancel"
IF Choice = 2 THEN ShowDir FileNum, Location: EXIT SUB
DrawBox 10, 13, 32, 48, "Delete"
LOCATE 11, 34: PRINT "Are you sure?"
ChoiceMenu 12, 37, "Yes", "No"
IF Choice = 2 THEN ShowDir FileNum, Location: EXIT SUB
ShowDir FileNum, Location
DrawBox 11, 14, 32, 47, "Deleting"
FileDone = 1
FOR I = 1 TO Items
IF File(I).Selected THEN
FOR J = 1 TO 13
IF MID$(File(I).FileName, J, 1) = Null$ THEN
FileName$ = LEFT$(File(I).FileName, J - 1)
EXIT FOR
END IF
NEXT
IF LEN(FileName$) = 0 THEN FileName$ = LEFT$(File(FileNum).FileName, 12)
LOCATE 12, 34: PRINT SPACE$(13);
Center 12, FileName$
Center 13, " " + STR$((100 * FileDone) \ Num) + "%" + " "
KILL FileName$
FileDone = FileDone + 1
END IF
NEXT
ReadDrive
ShowDir FileNum, Location
FileNum = 1: Location = 5
END IF
END SUB
SUB DispFile (FileNum, L) STATIC
IF FileNum > Items% THEN
LOCATE L, 21
PRINT SPACE$(38);
ELSE
IF File(FileNum).Selected THEN COLOR 1
LOCATE L, 21
FileName$ = File(FileNum).FileName
IF LEFT$(FileName$, 1) <> CHR$(1) THEN
Dot = INSTR(FileName$, ".")
IF Dot = 0 THEN Dot = 9
Attrib = ASC(File(FileNum).Attrib)
IF (Attrib AND 2) OR (Attrib AND 4) THEN COLOR 10 - (File(FileNum).Selected)
PRINT LEFT$(FileName$, Dot - 1); TAB(31); RTRIM$(MID$(FileName$, Dot + 1));
PRINT TAB(35); USING "########"; File(FileNum).Size;
ELSE
IF (ASC(File(FileNum).Attrib) AND 2) OR (ASC(File(FileNum).Attrib) AND 4) THEN COLOR 10
Dot = INSTR(FileName$, ".")
IF Dot = 0 THEN Dot = 9
IF LEFT$(FileName$, 3) <> ".." THEN PRINT MID$(FileName$, 2, Dot - 1); TAB(31); RTRIM$(MID$(FileName$, Dot + 1)); ELSE PRINT "..";
PRINT TAB(35); "
";
END IF
Month$ = LTRIM$(STR$((File(FileNum).Date MOD 512) \ 32))
Day$ = LTRIM$(STR$(File(FileNum).Date MOD 512 MOD 32))
Dat$ = Month$ + "-" + STRING$(2 - LEN(Day$), 48) + Day$ + "-" + RIGHT$(STR$(1980 + File(FileNum).Date \ 512), 2)
PRINT TAB(52 - LEN(Dat$)); Dat$;
Hours = File(FileNum).Time \ 2048: AP$ = "a"
IF Hours > 12 THEN
Hours = Hours - 12
AP$ = "p"
END IF
IF Hours = 0 THEN Hours = 12
Tim$ = LTRIM$(STR$((File(FileNum).Time MOD 2048) \ 32))
Tim$ = LTRIM$(STR$(Hours)) + ":" + STRING$(2 - LEN(Tim$), 48) + Tim$ + AP$
PRINT TAB(59 - LEN(Tim$)); RTRIM$(Tim$);
END IF
COLOR 7, 0
END SUB
SUB DisplayDir STATIC
SP$ = SPACE$(18)
FileNum = 1
Location = 5
FOR FileNumber = 1 TO 19
DispFile FileNumber, FileNumber + 4
NEXT
DO
IF Items > 0 THEN
LOCATE Location, 21
COLOR 0, 7: DispFile FileNum, Location
LOCATE 25, 2
IF ASC(File(FileNum).Attrib) AND 16 THEN
PRINT RIGHT$(File(FileNum).FileName, 12); : COLOR 7
ELSE
IF ASC(File(FileNum).Attrib) AND 2 OR ASC(File(FileNum).Attrib) AND 4 THEN COLOR 10
PRINT File(FileNum).FileName; : COLOR 7
END IF
PrintAttr FileNum
END IF
GetKey Char$, Scan
DO
IF Items > 0 THEN
IF Scan = Up AND Char$ = Null$ THEN
FileNum = FileNum - 1: Location = Location - 1
IF FileNum > 0 THEN COLOR 7, 0: DispFile FileNum + 1, Location + 1
IF FileNum = 0 THEN FileNum = 1: Location = Location + 1
IF Location = 4 THEN Location = 5: ScrollDown
END IF
IF Scan = Down AND Char$ = Null$ THEN
FileNum = FileNum + 1: Location = Location + 1
IF FileNum < Items% + 1 THEN COLOR 7, 0: DispFile FileNum - 1, Location - 1
IF FileNum = Items% + 1 THEN FileNum = Items%: Location = Location - 1
IF Location = 24 THEN ScrollUp: Location = 23
END IF
IF Scan = PgUp AND Char$ = Null$ THEN
Show = -1
PrevFile = FileNum
PrevLoc = Location
FileNum = FileNum - 18: Location = 5
IF FileNum < 1 THEN FileNum = 1: Show = 0
IF PrevLoc = Location AND PrevFile <> FileNum THEN Show = -1
IF PrevFile <> FileNum THEN DispFile PrevFile, PrevLoc
IF PrevFile < 18 AND PrevLoc <> PrevFile + 4 THEN Show = -1
IF Show AND PrevLoc <> 23 THEN ShowDir FileNum, Location
END IF
IF Scan = PgDn AND Char$ = Null$ THEN
Show = -1
PrevFile = FileNum
PrevLoc = Location
FileNum = FileNum + 18: Location = 23
IF Items% < 18 THEN Location = Items% + 4
IF FileNum > Items% THEN FileNum = Items%: Show = 0
IF PrevLoc = Location AND PrevFile <> FileNum THEN Show = -1
IF PrevFile <> FileNum THEN DispFile PrevFile, PrevLoc
IF PrevFile > Items - 18 AND Items > 18 AND (Location - PrevLoc) <> (FileNum - PrevFile) THEN Show = -1
IF Show AND PrevLoc <> 5 THEN ShowDir FileNum, Location
END IF
IF Scan = Home AND Char$ = Null$ THEN
Show = -1
PrevFile = FileNum
PrevLoc = Location
FileNum = 1: Location = 5
IF PrevFile = FileNum AND PrevLoc = Location THEN Show = 0
IF PrevLoc = Location AND PrevFile <> FileNum THEN Show = -1
IF PrevFile <> FileNum THEN DispFile PrevFile, PrevLoc
IF PrevLoc - Location = PrevFile - FileNum THEN Show = 0
IF Show THEN ShowDir FileNum, Location
END IF
IF Scan = EndKey AND Char$ = Null$ THEN
Show = -1
PrevFile = FileNum
PrevLoc = Location
FileNum = Items%: Location = 23
IF Items% < 18 THEN Location = Items% + 4: Show = 0
IF PrevLoc = Location AND PrevFile <> FileNum THEN Show = -1
IF PrevFile <> FileNum THEN DispFile PrevFile, PrevLoc
IF Location - PrevLoc = FileNum - PrevFile THEN Show = 0
IF Show THEN ShowDir FileNum, Location
END IF
IF Scan = PadPlus THEN
Skip = 0
IF ASC(File(FileNum).Attrib) AND 16 THEN Skip = 1
IF Skip = 0 THEN
File(FileNum).Selected = 1
COLOR 0, 7: DispFile FileNum, Location
END IF
FileNum = FileNum + 1: Location = Location + 1
IF FileNum < Items% + 1 THEN COLOR 7, 0: DispFile FileNum - 1, Location - 1
IF FileNum = Items% + 1 THEN FileNum = Items%: Location = Location - 1
IF Location = 24 THEN ScrollUp: Location = 23
Char$ = ""
END IF
IF Scan = PadMinus THEN
Skip = 0
IF ASC(File(FileNum).Attrib) AND 16 THEN Skip = 1
IF Skip = 0 THEN
File(FileNum).Selected = 0
COLOR 0, 7: DispFile FileNum, Location
END IF
FileNum = FileNum + 1: Location = Location + 1
IF FileNum < Items% + 1 THEN COLOR 7, 0: DispFile FileNum - 1, Location - 1
IF FileNum = Items% + 1 THEN FileNum = Items%: Location = Location - 1
IF Location = 24 THEN ScrollUp: Location = 23
Char$ = ""
END IF
IF Char$ = Ret$ AND Scan = 28 THEN
Ok = 0: I = 0
DO
I = I + 1
Equal = INSTR(ENVIRON$(I), "=")
IF Equal = 0 THEN EXIT DO
IF LEFT$(ENVIRON$(I), 7) = "COMSPEC" AND Equal THEN Ok = 1
LOOP WHILE Ok = 0
DO
ExitIt = 0
IF Ok = 0 THEN
FindFirst CurrentPath$(CurrentDrive$), "COMMAND.COM", 55
IF OutRegs.AX <> 18 THEN EXIT DO
PRINT "COMSPEC variable not present."
LOCATE 25, 1: PRINT "Press a key to return...";
A$ = INPUT$(1)
WriteScreen
ShowDir FileNum, Location
ExitIt = 1
END IF
EXIT DO
LOOP
Dot = INSTR(File(FileNum).FileName, ".")
Ext$ = MID$(File(FileNum).FileName, Dot + 1, 3)
ErrorHappened = 0
IF LEFT$(File(FileNum).FileName, 1) = CHR$(1) THEN CHDIR RIGHT$(File(FileNum).FileName, LEN(File(FileNum).FileName) - 1): ERASE File: EXIT SUB
IF ErrorHappened = 1 THEN EXIT DO
IF Dot = 0 OR (Ext$ <> "EXE" AND Ext$ <> "COM" AND Ext$ <> "BAT") THEN
SoundIt 1
ELSE
COLOR 7, 0: CLS
LOCATE 1, 1: PRINT CurrentDrive$; LEFT$(Path$, LEN(Path$) - 1); ">"; RTRIM$(File(FileNum).FileName); RTRIM$(LTRIM$(Parameter$))
DO
PrevVol$ = Volume$
BadVol = 0
GetVol
IF PrevVol$ <> Volume$ THEN
COLOR 18: LOCATE 4, 3: PRINT PrevVol$: COLOR 7
GetKey Char$, Scan
BadVol = 1
END IF
LOOP UNTIL BadVol = 0
Parameter$ = LTRIM$(RTRIM$(Parameter$))
FileShell$ = RTRIM$(File(FileNum).FileName) + " " + Parameter$
SHELL FileShell$
LOCATE 25, 1: PRINT "Press a key to return..."; SPACE$(56);
A$ = INPUT$(1)
Parameter$ = SPACE$(63): ParamPos = 1
CLS
GetVol
WriteScreen
ERASE File: EXIT SUB
END IF
END IF
END IF
IF Scan = Left OR Scan = Right OR Scan = Del THEN
ParameterParse "", Scan
EXIT DO
END IF
IF Scan > 58 AND Scan < 69 THEN
FunctionKey Scan
END IF
IF Char$ = "" OR (Scan = 45 AND Char$ = Null$) THEN
DrawBox 10, 13, 7, 74, "DOS Command"
LOCATE 11, 9: PRINT "Enter a DOS command:"
SubIn$ = "command"
DOSCommand$ = GetPath$
Ok = 0: I = 0
DO
I = I + 1
Equal = INSTR(ENVIRON$(I), "=")
IF Equal = 0 THEN EXIT DO
IF LEFT$(ENVIRON$(I), 7) = "COMSPEC" AND Equal THEN Ok = 1
LOOP WHILE Ok = 0
DO
ExitIt = 0
IF Ok = 0 THEN
FindFirst CurrentPath$(CurrentDrive$), "COMMAND.COM", 55
IF OutRegs.AX <> 18 THEN EXIT DO
PRINT "COMSPEC variable not present."
LOCATE 25, 1: PRINT "Press a key to return...";
A$ = INPUT$(1)
WriteScreen
ShowDir FileNum, Location
ExitIt = 1
END IF
EXIT DO
LOOP
IF ExitIt OR Exiting THEN EXIT DO
CLS : PRINT Drive$; LEFT$(Path$, LEN(Path$) - ABS(RIGHT$(Path$, 1) = "\" AND LEN(Path$) <> 1)); ">"; DOSCommand$
SHELL DOSCommand$
LOCATE 25, 1: PRINT "Press a key to return..."; SPACE$(56);
A$ = INPUT$(1)
CLS
WriteScreen
ERASE File: EXIT SUB
END IF
IF Char$ = "" THEN
Parameter$ = SPACE$(63)
ParamPos = 1
LOCATE 25, 17: PRINT "Û"; SPACE$(62);
END IF
IF Char$ = "" OR (Scan = 16 AND Char$ = Null$) THEN
DrawBox 4, 7, 1, 19, "Quit"
LOCATE 5, 2: PRINT " Are you sure? "
ChoiceMenu 6, 7, "Yes", "No"
IF Choice = 1 THEN CLS : END
COLOR 7, 0
FillBox 4, 7, 1, 19
END IF
IF Char$ = "" OR (Scan = 32 AND Char$ = Null$) THEN
COLOR 7, 0: CLS
Ok = 0: I = 0
DO
I = I + 1
Equal = INSTR(ENVIRON$(I), "=")
IF Equal = 0 THEN EXIT DO
IF LEFT$(ENVIRON$(I), 7) = "COMSPEC" AND Equal THEN Ok = 1
LOOP WHILE Ok = 0
DO
ExitIt = 0
IF Ok = 0 THEN
FindFirst CurrentPath$(CurrentDrive$), "COMMAND.COM", 55
IF OutRegs.AX <> 18 THEN EXIT DO
PRINT "COMSPEC variable not present."
LOCATE 25, 1: PRINT "Press a key to return...";
A$ = INPUT$(1)
WriteScreen
ShowDir FileNum, Location
ExitIt = 1
END IF
EXIT DO
LOOP
IF ExitIt THEN EXIT DO
PRINT "Type EXIT to return to Shellter"
SHELL
LOCATE 25, 1: PRINT "Press a key to return..."; SPACE$(56);
A$ = INPUT$(1)
CLS
WriteScreen
ERASE File: EXIT SUB
END IF
IF (Char$ > "" AND Char$ < "~") OR Char$ = "" THEN
ParameterParse Char$, 0
EXIT DO
END IF
EXIT DO
LOOP
LOOP
END SUB
SUB DrawBox (Top, bottom, Left, Right, Title$) STATIC
Title$ = " " + Title$ + " "
A = CheckColorMono: COLOR 7, 0
Length = Right - Left + 1
LOCATE Top, Left: PRINT "Ö"; STRING$(CINT((Length - LEN(Title$)) \ 2) - 1, 196); Title$; STRING$(CINT(Length - ((Length - LEN(Title$)) \ 2)) - 7 + (6 - LEN(Title$)), 196); "·"
FOR I = Top + 1 TO bottom - 1
POKE Lc(I, Left), 186: POKE Lc(I, Left) + 1, 7
POKE Lc(I, Right), 186: POKE Lc(I, Right) + 1, 7
NEXT
FOR I = Left + 1 TO Right - 1
POKE Lc(bottom, I), 196: POKE Lc(bottom, I) + 1, 7
NEXT
POKE Lc(bottom, Left), 211: POKE Lc(bottom, Left) + 1, 7
POKE Lc(bottom, Right), 189: POKE Lc(bottom, Right) + 1, 7
FOR I = Top + 1 TO bottom - 1: LOCATE I, Left + 1: PRINT SPACE$(Right - Left - 1); : NEXT
END SUB
SUB DrawWindow (Top, bottom, Left, Right) STATIC
LOCATE Top, Left: PRINT STRING$(Right - Left + 1, "Ü")
LOCATE bottom, Left: PRINT STRING$(Right - Left + 1, "ß")
FOR I = Top + 1 TO bottom - 1
LOCATE I, Left: PRINT "Û"; : LOCATE I, Right: PRINT "Û"
NEXT
END SUB
SUB DriveChange STATIC
DrawBox 10, 13, 29, 51, "Drive"
LOCATE 11, 31: PRINT "Type a drive letter"
COLOR 0, 7: Center 12, " ": COLOR 7, 0
Start:
DO
GetKey Char$, Scan
Char$ = UCASE$(Char$)
IF Char$ > "@" AND Char$ < "[" THEN
COLOR 0, 7: Center 12, Char$: Drive$ = Char$: COLOR 7, 0
END IF
IF Scan = Del THEN
COLOR 0, 7: Center 12, " ": Drive$ = " ": COLOR 7, 0
END IF
IF Char$ = Esc$ THEN
ShowDir File, Location: EXIT SUB
END IF
IF Char$ = Ret$ THEN EXIT DO
LOOP
ErrorHappened = 0
DO
OPEN Drive$ + ":SHELLTER.TST" FOR INPUT AS #1
IF ErrorHappened = 0 THEN EXIT DO
IF ErrorHappened = 2 THEN ShowDir FileNum, Location: EXIT SUB
GOTO Start:
LOOP
SHELL Drive$ + ": > NUL"
ReadDrive
ShowDir FileNum, Location
END SUB
SUB FillBox (Top, bottom, Left, Right)
FOR I = Top TO bottom
LOCATE I, Left: PRINT STRING$(Right - Left + 1, 177);
NEXT
END SUB
SUB FindFirst (Path$, Mask$, Attrib) STATIC
Search$ = Path$ + Mask$ + Null$
InRegs.AX = &H4E00
InRegs.CX = Attrib
InRegs.DX = SADD(Search$)
InRegs.DS = VARSEG(Search$)
CALL InterruptX(&H21, InRegs, OutRegs)
IF OutRegs.AX = 12 THEN
LOCATE 4, 1: PRINT "ÖÄÄÄÄÄ Error ÄÄÄÄÄ·";
LOCATE 5, 1: PRINT "º Drive not ready º";
LOCATE 6, 1: PRINT "º Retry Drive º";
LOCATE 6, 1: PRINT "ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ";
END IF
END SUB
SUB FindNext STATIC
InRegs.AX = &H4F00
CALL INTERRUPT(&H21, InRegs, OutRegs)
END SUB
SUB FunctionKey (KeyPress) STATIC
SELECT CASE KeyPress - 58
CASE 1: Help
CASE 2: IF Items > 0 THEN IF ASC(File(FileNum).Attrib) AND 16 AND LEFT$(File(FileNum).FileName, 3) <> ".." THEN RemoveDir ELSE DeleteFiles
CASE 3: PrintDir
CASE 4: Scan = 0: Char$ = "": EXIT SUB
CASE 5: Scan = 0: Char$ = "": EXIT SUB
CASE 6: MakeDir
CASE 7: IF Items > 0 THEN Rename
CASE 8: IF Items > 0 THEN CopyFiles
CASE 9: DriveChange
CASE 10: Scan = 0: Char$ = "": EXIT SUB
END SELECT
END SUB
FUNCTION GetDirName$
NotAccepted$ = " <>?|*[]\/+.,:;=" + CHR$(34) + CHR$(10) + Null$ + Esc$
COLOR 0, 7: Center 12, " . ": COLOR 7, 0
LOCATE 12, 34, 1
DirName$ = SPACE$(11): DirLoc = 1
DO
GetKey Char$, Scan: KeyPress = 0: Moved = 1: PLoc = DirLoc
Char$ = UCASE$(Char$)
IF Char$ = Ret$ THEN
EXIT DO
END IF
IF Char$ = Esc$ THEN
LOCATE , , 0
ShowDir FileNum, Location: Exiting = 1: WriteScreen
EXIT FUNCTION
END IF
IF Scan = Left THEN
DirLoc = DirLoc - 1: IF DirLoc < 1 THEN DirLoc = 1: Moved = 0
KeyPressed = 1: Char$ = Esc$
END IF
IF Scan = Right THEN
DirLoc = DirLoc + 1: IF DirLoc > 11 THEN DirLoc = 11: Moved = 0
KeyPressed = 1: Char$ = Esc$
END IF
IF Char$ = "" AND DirLoc <> 1 THEN
DirName$ = LEFT$(DirName$, DirLoc - 2) + RIGHT$(DirName$, 11 - (DirLoc - 1)) + " "
DirLoc = DirLoc - 1
FOR I = 1 TO 11: POKE Lc(12, 33 + I - (I > 8)), ASC(MID$(DirName$, I, 1)): NEXT
END IF
IF Scan = Del THEN
DirName$ = LEFT$(DirName$, DirLoc - 1) + RIGHT$(DirName$, 11 - (DirLoc)) + " "
FOR I = 1 TO 11: POKE Lc(12, 33 + I - (I > 8)), ASC(MID$(DirName$, I, 1)): NEXT
END IF
IF INSTR(NotAccepted$, Char$) = 0 THEN
MID$(DirName$, DirLoc) = Char$
DirLoc = DirLoc + 1: IF DirLoc > 11 THEN DirLoc = 11
POKE Lc(12, 33 + PLoc - (PLoc > 8)), ASC(MID$(DirName$, PLoc, 1))
KeyPressed = 1
END IF
IF KeyPressed AND Moved THEN
LOCATE 12, 33 + DirLoc - (DirLoc > 8)
END IF
LOOP
DirName$ = LEFT$(DirName$, 8) + "." + RIGHT$(DirName$, 3)
DO
NoSpace = 0
FOR I = 1 TO INSTR(DirName$, ".") - 1
IF MID$(DirName$, I, 1) = " " THEN
DirName$ = LEFT$(DirName$, I - 1) + MID$(DirName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
DO
NoSpace = 0
FOR I = INSTR(DirName$, ".") + 1 TO LEN(DirName$)
IF MID$(DirName$, I, 1) = " " THEN
DirName$ = LEFT$(DirName$, I - 1) + MID$(DirName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
LOCATE , , 0
GetDirName$ = DirName$
END FUNCTION
SUB GetKey (Char$, Scan) STATIC
InRegs.AX = &H0
CALL INTERRUPT(&H16, InRegs, OutRegs)
Scan = OutRegs.AX \ 255
Char$ = CHR$((OutRegs.AX - Scan) MOD 255)
END SUB
FUNCTION GetPath$ STATIC
IF SubIn$ <> "command" THEN NotAccepted$ = " <>|[]+,:;=" + CHR$(34) + CHR$(10) + Null$ + Esc$ ELSE NotAccepted$ = "" + Esc$ + Ret$
IF SubIn$ <> "command" AND SubIn$ <> "*?" THEN NotAccepted$ = NotAccepted$ + "*?"
COLOR 0, 7: LOCATE 12, 9: PRINT SPACE$(64): COLOR 7, 0
LOCATE 12, 9, 1
PathName$ = SPACE$(64): PathLoc = 1
DO
GetKey Char$, Scan: KeyPress = 0: Moved = 1: PLoc = PathLoc
IF SubIn$ <> "command" THEN Char$ = UCASE$(Char$)
IF Char$ = "" AND SubIn$ = "command" THEN
PathName$ = SPACE$(64): PathLoc = 1: COLOR 0, 7: LOCATE 12, 9: PRINT SPACE$(64): COLOR 7, 0
END IF
IF Char$ = Ret$ THEN
EXIT DO
END IF
IF Char$ = Esc$ THEN
LOCATE , , 0
Exiting = 1: WriteScreen: ShowDir FileNum, Location: EXIT FUNCTION
END IF
IF Scan = Left THEN
PathLoc = PathLoc - 1: IF PathLoc < 1 THEN PathLoc = 1: Moved = 0
KeyPressed = 1: Char$ = Esc$
END IF
IF Scan = Right THEN
PathLoc = PathLoc + 1: IF PathLoc > 64 THEN PathLoc = 64: Moved = 0
KeyPressed = 1: Char$ = Esc$
END IF
IF Char$ = "" AND PathLoc <> 1 THEN
PathName$ = LEFT$(PathName$, PathLoc - 2) + RIGHT$(PathName$, 64 - (PathLoc - 1)) + " "
PathLoc = PathLoc - 1
FOR I = 1 TO 64: POKE Lc(12, 8 + I), ASC(MID$(PathName$, I, 1)): NEXT
END IF
IF Scan = Del THEN
PathName$ = LEFT$(PathName$, PathLoc - 1) + RIGHT$(PathName$, 64 - (PathLoc)) + " "
FOR I = 1 TO 64: POKE Lc(12, 8 + I), ASC(MID$(PathName$, I, 1)): NEXT
Char$ = ""
END IF
IF SubIn$ <> "command" THEN IF Char$ = "/" THEN Char$ = "\"
IF INSTR(NotAccepted$, Char$) = 0 THEN
MID$(PathName$, PathLoc) = Char$
PathLoc = PathLoc + 1: IF PathLoc > 64 THEN PathLoc = 64
POKE Lc(12, 8 + PLoc), ASC(MID$(PathName$, PLoc, 1))
KeyPressed = 1
END IF
IF KeyPressed AND Moved THEN
LOCATE 12, 8 + PathLoc
END IF
LOOP
IF SubIn$ <> "command" THEN
DO
NoSpace = 0
FOR I = 1 TO 64
IF MID$(PathName$, I, 1) = " " THEN
PathName$ = LEFT$(PathName$, I - 1) + MID$(PathName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
LOCATE , , 0
GetPath$ = PathName$
END IF
END FUNCTION
SUB GetVol STATIC
NoVol = 0
FindFirst Drive$ + "\", "*.*", 8
Volume$ = DTA.FileName
Volume$ = RTRIM$(LEFT$(Volume$, 8) + MID$(Volume$, 10, 3))
IF Volume$ = "" THEN
Volume$ = "has no label"
NoVol = 1
ELSE
Volume$ = "is " + Volume$
END IF
END SUB
SUB Help STATIC
Screen1:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Control Keys": COLOR 7
LOCATE 6, 3: PRINT "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂ"; STRING$(58, 196); "¶"
COLOR 10: LOCATE , 10: PRINT "Key"; : COLOR 7: PRINT " ³ "; : COLOR 10: PRINT TAB(42); "Description"
COLOR 7
LOCATE , 3: PRINT "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅ"; STRING$(58, 196); "¶"
LOCATE , 4: PRINT " CTRL-C ALT-C ³ Copy selected files"
LOCATE , 4: PRINT " CTRL-D ALT-D ³ DOS shell"
LOCATE , 4: PRINT " CTRL-N ALT-N ³ Rename selected files"
LOCATE , 4: PRINT " CTRL-P ALT-P ³ Send directory to line printer #1"
LOCATE , 4: PRINT " CTRL-Q ALT-Q ³ Return to DOS"
LOCATE , 4: PRINT " CTRL-R ALT-R ³ Clear parameter\command entry"
LOCATE , 4: PRINT " CTRL-X ALT-X ³ Execute DOS command"
LOCATE , 3: PRINT "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁ"; STRING$(58, 196); "¶";
LOCATE 20, 5: PRINT " Page 1"
DO
GetKey Char$, Scan: IF Scan = PgDn THEN GOTO Screen2
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
LOOP
Screen2:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Numeric Keypad": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶"
LOCATE , 5: PRINT " Moves the file bar down"
LOCATE , 5: PRINT " ³"
LOCATE , 5: PRINT " Moves to the beginning ÚÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄ¿ Moves the file bar up"
LOCATE , 5: PRINT " of the directory ÀÄÄÄÄ ³Home³ ³PgUp³ ÄÄÄÄÙ one screen"
LOCATE , 5: PRINT " ÃÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄ´"
LOCATE , 5: PRINT " Moves left in the ÄÄÄÄ ³ ³ 5 ³ "; CHR$(26); " ³ ÄÄÄÄ Moves right in the"
LOCATE , 5: PRINT " parameter\command box ÃÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄ´ parameter\command box"
LOCATE , 5: PRINT " ÚÄÄÄÄ ³End ³ ³PgDn³ ÄÄÄÄ¿"
LOCATE , 5: PRINT " Moves to the end ÀÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÙ Moves the file bar down"
LOCATE , 5: PRINT " of the directory ³ one screen"
LOCATE , 5: PRINT " Moves the file bar up"
COLOR 10: LOCATE 20, 39: PRINT "NUM LOCK reverts keys back to numbers": COLOR 7
LOCATE 20, 5: PRINT " Page 2"
DO
GetKey Char$, Scan: IF Scan = PgDn THEN GOTO Screen3
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen1
LOOP
Screen3:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Program Control Keys": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶"
LOCATE , 5: PRINT " ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿"
LOCATE , 5: PRINT " ³ ³ Executes EXE, COM and BAT ³ BackSp ³ ³ Del ³"
LOCATE , 5: PRINT " ÚÄÄÄÄÙ ³ files. Changes directories ÀÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÙ"
LOCATE , 5: PRINT " ³ Enter ³ Editing keys"
LOCATE , 5: PRINT " ÀÄÄÄÄÄÄÄÄÄÙ for the parameter\"
LOCATE , 5: PRINT " command box"
LOCATE , 5: PRINT " ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿ "
LOCATE , 5: PRINT " ³ + ³ ³ - ³ "
LOCATE , 5: PRINT " ÀÄÄÄÄÄÙ ÀÄÄÄÄÄÙ "
LOCATE , 5: PRINT " Select\deselect files "
LOCATE , 5: PRINT " (Numeric keypad only) "
LOCATE 20, 5: PRINT " Page 3"
DO
GetKey Char$, Scan: IF Scan = PgDn THEN GOTO Screen4
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen2
LOOP
Screen4:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Function keys": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶"
LOCATE , 5: PRINT " ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿"
LOCATE , 5: PRINT " ³ F-1 ³³ F-2 ³³ F-3 ³³ F-4 ³³ F-5 ³"
LOCATE , 5: PRINT " ³ Help ³³ Delete ³³ Print dir ³³DOS command³³ DOS shell ³"
LOCATE , 5: PRINT " ³ ³³ ³³ ³³ ³³ ³"
LOCATE , 5: PRINT " ÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙ"
LOCATE , 5: PRINT " ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄ¿"
LOCATE , 5: PRINT "ÚÄÄÄÄ ³ F-6 ³³ F-7 ³³ F-8 ³³ F-9 ³³ F-10 ³"
LOCATE , 5: PRINT "³ ÚÄÄ ³ Make dir ³³ Rename ³³ Copy ³³ Drive ³³ Quit ³"
LOCATE , 5: PRINT "³ ³ ³ ³³ ³³ ³³ ³³ ³"
LOCATE , 5: PRINT "³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÙ"
LOCATE , 5: PRINT "³ ³ "
LOCATE , 5: PRINT "³ Function Key Action"
LOCATE , 5: PRINT "Function Key"
LOCATE 20, 5: PRINT " Page 4"
DO
GetKey Char$, Scan: IF Scan = PgDn THEN GOTO Screen5
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen3
LOOP
Screen5:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Directory Listing": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶"
LOCATE 8, 5: PRINT " Current path ÄÄÄÄ¿ ÚÄÄÄÄ Mask"
LOCATE , 5: PRINT " ³ ³"
LOCATE , 5: PRINT " ÍÍÍÍÍÍÍÍÍÍÍÍ͵ C:\*.* ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
COLOR 10: LOCATE , 5: PRINT " File Ext Size Date Time";
COLOR 7: PRINT " ÄÄÄÄ¿"
LOCATE , 5: PRINT " Current file ÄÄÄÄ "; : COLOR 0, 7: PRINT "SHELLTER 12-12-80 12:01a"; : COLOR 7, 0: PRINT " Directory"
LOCATE , 5: PRINT "is highlighted AUTOEXEC BAT 114 4-11-91 4:06p entries"
COLOR 10
LOCATE , 5: PRINT " CONFIG SYS 56 4-11-91 7:08a": COLOR 7
LOCATE , 5: PRINT " ³"
LOCATE , 20: PRINT "Hidden files are"
LOCATE , 25: PRINT "bold"
LOCATE 17, 39: PRINT "ÚÄÄÄÄ Parameter box"
LOCATE , 19: PRINT "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
LOCATE , 4: PRINT " File name ÄÄÄÄ SHELLTER.EXE º /C /OÛ ÄÄÄÄ Parameters"
LOCATE 20, 5: PRINT " Page 5"
DO
GetKey Char$, Scan: IF Scan = PgDn THEN GOTO Screen6
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen4
LOOP
Screen6:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Windows": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶";
LOCATE 8, 30: PRINT "ÚÄÄÄÄ"
LOCATE , 21: PRINT "The Attributes"
LOCATE , 21: PRINT "window shows a"
LOCATE , 20: PRINT "file's attributes"
LOCATE 12, 9: PRINT "Title ÄÄÄÄ¿"
LOCATE 14, 7: PRINT "ÚÄ"
LOCATE 15, 7: PRINT "ÃÄ"
LOCATE 16, 7: PRINT "³"
LOCATE 17, 7: PRINT "Messages"
DrawBox 7, 9, 36, 56, "Attributes": DrawBox 11, 17, 39, 57, "Indicators"
LOCATE 8, 37: PRINT "R/O Hid Sys Dir Arc"
LOCATE 12, 41: PRINT "R/O - Read Only"
LOCATE , 41: PRINT "Hid - Hidden"
LOCATE , 41: PRINT "Sys - System"
LOCATE , 41: PRINT "Dir - Directory"
LOCATE , 41: PRINT "Arc - Archive"
DrawBox 13, 16, 10, 29, "Error"
LOCATE 14, 12: PRINT "An error occured"
LOCATE 15, 14: PRINT "Retry "; : COLOR 0, 7: PRINT " Abort "; : COLOR 7, 0
LOCATE 20, 5: PRINT " Page 6"
DO
GetKey Char$, Scan
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen5
IF Scan = PgDn THEN GOTO Screen7
LOOP
Screen7:
DrawBox 4, 21, 3, 77, "Help"
COLOR 10: Center 5, "Sounds": COLOR 7
LOCATE 6, 3: PRINT "Ç"; STRING$(73, 196); "¶"
Center 7, "SHELL-TER has sounds to tell you what is happening"
LOCATE 9, 5: PRINT " Speaker ¿ "
LOCATE , 5: PRINT " ÚÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
LOCATE , 5: PRINT " ÉÍÍ ³³³³³ ³ Press 1 to hear the sound when you try ³"
LOCATE , 5: PRINT " º ÀÄÄÄÙ ³ to run a file that isn't a EXE, COM ³"
LOCATE , 5: PRINT " ³ or BAT. ³"
LOCATE , 5: PRINT " ³ ³"
LOCATE , 5: PRINT " ³ Press 2 to hear the sound to alert you ³"
LOCATE , 5: PRINT " ³ of something. ³"
LOCATE , 5: PRINT " ³ ³"
LOCATE , 5: PRINT " ³ Press 3 to hear the error sound. ³"
LOCATE , 5: PRINT " ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
LOCATE 20, 5: PRINT " Page 7"
DrawBox 13, 16, 8, 27, "Error"
LOCATE 14, 10: PRINT "An error occured"
LOCATE , 12: PRINT "Retry "; : COLOR 0, 7: PRINT " Abort "; : COLOR 7, 0
DO
GetKey Char$, Scan
IF Char$ = Esc$ THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
IF Scan = PgUp THEN GOTO Screen6
SoundIt VAL(Char$)
LOOP
END SUB
SUB MakeDir STATIC
DrawBox 10, 13, 24, 56, "Make Dir"
SubIn$ = "create": LOCATE 11, 26: PRINT "Enter the new directory name:"
DO
Exiting = 0: Added = 0
Directory$ = GetDirName$
IF Exiting = 1 THEN EXIT SUB
ErrorHappened = 0
MKDIR Directory$
IF ErrorHappened = 1 THEN EXIT DO
LOOP
ReadDrive
ShowDir FileNum, Location
END SUB
SUB ParameterParse (Char$, Scan) STATIC
PrevPos = ParamPos
DO
IF Char$ = "" THEN
IF Scan = Del THEN
Char$ = "Del"
Parameter$ = LEFT$(Parameter$, ParamPos - 1) + RIGHT$(Parameter$, 63 - ParamPos) + " "
END IF
ParamPos = ParamPos - (Scan = Right) + (Scan = Left)
IF ParamPos < 1 OR ParamPos > 63 THEN ParamPos = PrevPos: EXIT SUB
ELSE
IF Char$ = "" THEN
IF ParamPos = 1 THEN EXIT SUB
Parameter$ = LEFT$(Parameter$, ParamPos - 2) + RIGHT$(Parameter$, 63 - (ParamPos - 1)) + " "
ParamPos = ParamPos - 1
ELSE
DEF SEG = 0
IF PEEK(&H417) AND 128 THEN
Parameter$ = LEFT$(Parameter$, ParamPos - 1) + Char$ + MID$(Parameter$, ParamPos, 63 - (ParamPos)): ParamPos = ParamPos + 1
IF ParamPos > 63 THEN ParamPos = 63
EXIT DO
END IF
A = CheckColorMono
IF ParamPos = 64 THEN EXIT SUB
MID$(Parameter$, ParamPos, 1) = Char$: ParamPos = ParamPos + 1
IF ParamPos > 63 THEN ParamPos = 63
END IF
END IF
EXIT DO
LOOP
IF Char$ = "" THEN
COLOR 7, 0
LOCATE 25, PrevPos + 16: PRINT MID$(Parameter$, PrevPos, 1);
COLOR 0, 7: LOCATE 25, ParamPos + 16: PRINT MID$(Parameter$, ParamPos, 1); : COLOR 7, 0
ELSE
COLOR 7, 0
LOCATE 25, PrevPos + 16: PRINT MID$(Parameter$, PrevPos, 1);
LOCATE 25, 17: PRINT Parameter$;
COLOR 0, 7: LOCATE 25, ParamPos + 16: PRINT MID$(Parameter$, ParamPos, 1);
END IF
END SUB
SUB PrintAttr (FileNum) STATIC
Attr = ASC(File(FileNum).Attrib)
LOCATE 5, 61: IF Attr AND 1 THEN PRINT "R/O"; ELSE PRINT " ";
LOCATE , 65: IF Attr AND 2 THEN PRINT "Hid"; ELSE PRINT " ";
LOCATE , 69: IF Attr AND 4 THEN PRINT "Sys"; ELSE PRINT " ";
LOCATE , 73: IF Attr AND 16 THEN PRINT "Dir"; ELSE PRINT " ";
LOCATE , 77: IF Attr AND 32 THEN PRINT "Arc"; ELSE PRINT " ";
END SUB
SUB PrintDir STATIC
OPEN "LPT1:" FOR OUTPUT AS #1
ErrorHappened = 0
A: PRINT #1, " Volume on drive "; CurrentDrive$; " "; Volume$
IF ErrorHappened = 2 THEN GOTO A:
IF ErrorHappened = 1 THEN ErrorHappened = 0: CLOSE : EXIT SUB
PRINT #1, " Directory of "; Drive$; CurrentPath$(Drive$); "*.*"
PRINT #1, ""
FOR File = 1 TO Items
DO
FileName$ = File(File).FileName
IF LEFT$(FileName$, 1) <> CHR$(1) THEN
Dot = INSTR(FileName$, ".")
IF Dot = 0 THEN Dot = 9
Attrib = ASC(File(File).Attrib)
PRINT #1, TAB(2); LEFT$(FileName$, Dot - 1); TAB(11); RTRIM$(MID$(FileName$, Dot + 1));
PRINT #1, TAB(14); USING "########"; File(File).Size;
ELSE
PRINT #1, TAB(2); MID$(FileName$, 2); TAB(14); "";
END IF
Month$ = LTRIM$(STR$((File(File).Date MOD 512) \ 32))
Day$ = LTRIM$(STR$(File(File).Date MOD 512 MOD 32))
Dat$ = Month$ + "-" + STRING$(2 - LEN(Day$), 48) + Day$ + "-" + RIGHT$(STR$(1980 + File(File).Date \ 512), 2)
PRINT #1, TAB(31 - LEN(Dat$)); Dat$;
Hours = File(File).Time \ 2048: AP$ = "a"
IF Hours > 12 THEN
Hours = Hours - 12
AP$ = "p"
END IF
IF Hours = 0 THEN Hours = 12
Tim$ = LTRIM$(STR$((File(File).Time MOD 2048) \ 32))
Tim$ = LTRIM$(STR$(Hours)) + ":" + STRING$(2 - LEN(Tim$), 48) + Tim$ + AP$
PRINT #1, TAB(38 - LEN(Tim$)); RTRIM$(Tim$);
EXIT DO
LOOP
NEXT
PRINT #1, TAB(10 - LEN(LTRIM$(STR$(Total)))); LTRIM$(STR$(Total)); " File"; Pl$(ABS(Total <> 1)); " using"; STR$(Space&); "Kb"
CLOSE
END SUB
SUB Program STATIC
CLS
Mask$ = "*.*"
DO
Drive$ = CurrentDrive$
Path$ = CurrentPath$(Drive$)
Struct$ = Drive$ + Path$ + Mask$
ReadDrive
DisplayDir
LOOP
END SUB
SUB ReadDir STATIC
DTA.FileName = ""
Total% = 0
Space& = 0
Items% = 0
LOCATE 2, 64: PRINT "Reading drive "; LEFT$(CurrentDrive$, 1)
FindFirst CurrentDrive$ + CurrentPath$(CurrentDrive$), Mask$, 55
DO
IF OutRegs.AX <> 18 AND LEFT$(DTA.FileName, 2) <> "." + Null$ THEN
Items = Items + 1
File(Items).FileName = DTA.FileName
File(Items).Size = DTA.Size
File(Items).Date = DTA.Date - (65536 * (DTA.Date < 0))
File(Items).Time = DTA.Time - (65536 * (DTA.Time < 0))
File(Items).Attrib = DTA.Attrib
File(Items).Selected = 0
Space& = Space& + DTA.Size
IF ASC(DTA.Attrib) AND 16 THEN
File(Items).FileName = "" + File(Items).FileName
ELSE
Total% = Total% + 1
END IF
END IF
DTA.FileName = ""
FindNext
LOOP UNTIL OutRegs.AX = 18
END SUB
SUB ReadDrive STATIC
SetDTA
LOCATE 2, 35: PRINT SPACE$(43)
ReadDir
SortIt
GetVol
WriteScreen
END SUB
SUB RemoveDir STATIC
DrawBox 10, 14, 23, 56, "Remove Dir"
Center 11, "Are you sure you want "
Center 12, "to remove this directory? "
ChoiceMenu 13, 36, "Yes", "No"
IF Choice = 2 THEN ShowDir FileNum, Location: EXIT SUB
DirName$ = MID$(File(FileNum).FileName, 2)
DO
NoSpace = 0
FOR I = 1 TO INSTR(DirName$, ".") - 1
IF MID$(DirName$, I, 1) = Null$ THEN
DirName$ = LEFT$(DirName$, I - 1) + MID$(DirName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
DO
NoSpace = 0
FOR I = INSTR(DirName$, ".") + 1 TO LEN(DirName$)
IF MID$(DirName$, I, 1) = Null$ THEN
DirName$ = LEFT$(DirName$, I - 1) + MID$(DirName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
ErrorHappened = 0
RMDIR DirName$
IF ErrorHappened = 1 THEN EXIT SUB
ReadDrive
FileNum = 1: Location = 5
ShowDir FileNum, Location
END SUB
SUB Rename STATIC
IF ASC(File(FileNum).Attrib) AND 16 THEN EXIT SUB
SubIn$ = ""
DrawBox 10, 13, 7, 74, "Rename/Move"
LOCATE 11, 9: PRINT "Rename/Move to:"
NewName$ = GetPath$
PathName$ = File(FileNum).FileName
DO
NoSpace = 0
FOR I = 1 TO 12
IF MID$(PathName$, I, 1) = Null$ THEN
PathName$ = LEFT$(PathName$, I - 1) + MID$(PathName$, I + 1)
NoSpace = 1
END IF
NEXT
LOOP WHILE NoSpace = 1
ErrorHappened = 0
IF Exiting = 1 THEN EXIT SUB
NAME PathName$ AS NewName$
IF ErrorHappened = 1 THEN WriteScreen: ShowDir FileNum, Location: EXIT SUB
ReadDrive
ShowDir FileNum, Location
END SUB
SUB ScrollDown STATIC
InRegs.AX = &H701
InRegs.BX = &H700
InRegs.CX = &H414
InRegs.DX = &H1639
CALL INTERRUPT(&H10, InRegs, OutRegs)
END SUB
SUB ScrollUp STATIC
InRegs.AX = &H601
InRegs.BX = &H700
InRegs.CX = &H414
InRegs.DX = &H1639
CALL INTERRUPT(&H10, InRegs, OutRegs)
END SUB
SUB SetDTA STATIC
InRegs.AX = &H1A00
InRegs.DS = VARSEG(DTA)
InRegs.DX = VARPTR(DTA)
CALL InterruptX(&H21, InRegs, OutRegs)
END SUB
SUB ShowDir (FileNum, Location) STATIC
LOCATE , , 0
Temp = FileNum - (Location - 5)
FOR I = Temp TO Temp + 18
DispFile I, I - Temp + 5
NEXT
END SUB
SUB SortIt STATIC
LOCATE 2, 64: PRINT SPACE$(7); "Thinking";
Offset = Items% \ 2
DO WHILE Offset > 0
Limit = Items% - Offset
DO
Switch = 0
FOR Row = 1 TO Limit
IF File(Row).FileName > File(Row + Offset).FileName THEN
SWAP File(Row), File(Row + Offset)
Switch = Row
END IF
NEXT Row
Limit = Switch - Offset
LOOP WHILE Switch
Offset = Offset \ 2
LOOP
END SUB
SUB SoundIt (Noise) STATIC
SELECT CASE Noise
CASE 1: SOUND 200, 2: SOUND 100, 2
CASE 2: BEEP
CASE 3: SOUND 800, 2: SOUND 32767, 1: SOUND 600, 2: SOUND 32767, 1: SOUND 400, 2
END SELECT
END SUB
SUB WriteAttr (RO, Hid, Sys, Arc) STATIC
LOCATE , , 0
FileName$ = File(FileNum).FileName
FOR I = 1 TO 13
IF MID$(FileName$, I, 1) = Null$ THEN
FileName$ = LEFT$(FileName$, I - 1)
EXIT FOR
END IF
NEXT
Attr = 1 * ABS(RO)
Attr = Attr + 2 * ABS(Hid)
Attr = Attr + 4 * ABS(Sys)
Attr = Attr + 32 * ABS(Arc)
InRegs.AX = &H4301
InRegs.CX = Attr
InRegs.DS = VARSEG(FileName$)
InRegs.DX = VARPTR(FileName$)
CALL InterruptX(&H21, InRegs, OutRegs)
PRINT OutRegs.AX
END SUB
SUB WriteScreen STATIC
LOCATE 1, 1: PRINT "É"; STRING$(78, 205); "»";
GetVol
LOCATE 2, 1: PRINT "º"; " Volume on drive "; LEFT$(CurrentDrive$, 1); " "; Volume$
NumFile$ = STR$(Total) + " file" + Pl$(ABS(Total <> 1)) + " found º"
LOCATE 2, 83 - LEN(NumFile$) - 2: PRINT NumFile$
LOCATE 3, 1: PRINT "È"; STRING$(18, 205); "Ë"; : LOCATE , 59: PRINT "Ë"; STRING$(20, 205); "¼"
Struct$ = CurrentDrive$ + CurrentPath$(CurrentDrive$) + Mask$
IF LEN(Struct$) > 34 THEN Struct$ = Drive$ + "\..." + RIGHT$(Struct$, 28)
All$ = "µ " + Struct$ + " Æ"
All$ = STRING$(CINT((40 - LEN(All$)) \ 2) - 1, 205) + All$ + STRING$(CINT(40 - ((40 - LEN(All$)) \ 2)) - 7 + (6 - LEN(All$)), 205)
LOCATE 3, 21: PRINT All$;
LOCATE 4, 20: COLOR 10
PRINT " File Ext Size Date Time "; : COLOR 7
FOR I = 4 TO 23
LOCATE I, 20: PRINT "º";
LOCATE I, 59: PRINT "º";
NEXT
COLOR 7, 0
FillBox 4, 23, 1, 19
FillBox 4, 23, 60, 80
DrawBox 4, 6, 60, 80, "Attributes"
LOCATE 24, 1: PRINT STRING$(14, 205); "ËÍÍÍÍÊ"; STRING$(38, 205); "Ê"; STRING$(21, 205);
LOCATE 25, 1: PRINT " º "; Parameter$;
LOCATE 25, ParamPos + 16: COLOR 0, 7: PRINT MID$(Parameter$, ParamPos, 1); : COLOR 7, 0
END SUB