Category : File Managers
Archive   : DDEL124.ZIP
Filename : ALTFIO.MOD
IMPORT SYSTEM, FIO, IO, Lib, Str;
FROM SYSTEM IMPORT CarryFlag;
PROCEDURE WrErr(name, msg: ARRAY OF CHAR);
CONST bel = CHR(7);
BEGIN
IO.WrChar(bel);
IO.WrStr(name);
IO.WrStr(": ");
IO.WrStr(msg);
IO.WrLn
END WrErr;
PROCEDURE Fatal(pathname: ARRAY OF CHAR; errCode: CARDINAL); (* private *)
BEGIN
CASE errCode OF
1: WrErr(pathname, "Invalid function number")
| 2: WrErr(pathname, "File not found")
| 3: WrErr(pathname, "Path not found")
| 5: WrErr(pathname, "Access denied")
|15: WrErr(pathname, "Invalid drive specification")
|16: WrErr(pathname, "Attempt to remove the current directory")
END;
HALT
END Fatal;
PROCEDURE SetAttr(pathname: ARRAY OF CHAR; attr: FIO.FileAttr);
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 43H; (* Get or Set File Attributes (CHMOD) *)
AL := 01H; (* Set attributes *)
CH := 0H; (* Clear upper byte of CX *)
CL := SHORTCARD(attr); (* Desired attributes *)
DS := SYSTEM.Seg(pathname);
DX := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN Fatal(pathname, AX) END
END
END SetAttr;
PROCEDURE ReadFirstEntry(pathname: ARRAY OF CHAR;
attr: FIO.FileAttr;
VAR D: FIO.DirEntry): BOOLEAN;
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 1AH; (* Set DTA *)
DS := SYSTEM.Seg(D);
DX := SYSTEM.Ofs(D);
Lib.Dos(r); (* INT 21H Function Call *)
AH := 4EH; (* FIND FIRST *)
CL := SHORTCARD(attr); (* File attribute *)
DS := SYSTEM.Seg(pathname);(* Pointer to filespec *)
DX := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN
IF AX = 18 THEN RETURN FALSE
ELSE Fatal(pathname, AX)
END
ELSE RETURN TRUE
END
END
END ReadFirstEntry;
PROCEDURE ReadNextEntry(VAR D: FIO.DirEntry): BOOLEAN;
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 1AH; (* Set DTA *)
DS := SYSTEM.Seg(D);
DX := SYSTEM.Ofs(D);
Lib.Dos(r); (* INT 21H Function Call *)
AH := 4FH; (* FIND NEXT *)
Lib.Dos(r); (* INT 21H Function Call *)
IF (CarryFlag IN Flags) OR (AX = 18) THEN
RETURN FALSE
ELSE RETURN TRUE
END
END
END ReadNextEntry;
PROCEDURE ChDir(pathname: ARRAY OF CHAR);
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 3BH; (* CHDIR *)
DS := SYSTEM.Seg(pathname);(* Pointer to new default directory name *)
DX := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN Fatal(pathname, AX) END
END
END ChDir;
PROCEDURE RmDir(pathname: ARRAY OF CHAR);
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 3AH; (* RMDIR *)
DS := SYSTEM.Seg(pathname);(* Pointer to directory name to remove *)
DX := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN Fatal(pathname, AX) END
END
END RmDir;
PROCEDURE Erase(pathname: ARRAY OF CHAR);
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 41H; (* Delete File (UNLINK) *)
DS := SYSTEM.Seg(pathname);(* Pointer to directory name to remove *)
DX := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN Fatal(pathname, AX) END
END
END Erase;
PROCEDURE AddDrive(drive: SHORTCARD; VAR pathname: ARRAY OF CHAR);
BEGIN
Str.Insert(pathname, " :", 0);
pathname[0] := CHR( CARDINAL(drive) + ORD('A') )
END AddDrive;
PROCEDURE GetDir(drive: SHORTCARD; (* private procedure *)
VAR pathname: ARRAY OF CHAR);
VAR r: SYSTEM.Registers;
BEGIN
WITH r DO
AH := 47H; (* Get Current Directory *)
DL := drive; (* Drive number (0=default, 1=A, etc.) *)
DS := SYSTEM.Seg(pathname);(* Pointer to 64-byte buffer *)
SI := SYSTEM.Ofs(pathname);
Lib.Dos(r); (* INT 21H Function Call *)
IF CarryFlag IN Flags THEN Fatal(pathname, AX) END
END
END GetDir;
PROCEDURE GetDrive(): SHORTCARD; (* private procedure *)
VAR r: SYSTEM.Registers;
BEGIN
r.AH := 19H; (* Get Current Disk *)
Lib.Dos(r); (* INT 21H Function Call *)
RETURN r.AL
END GetDrive;
PROCEDURE FormName(VAR pathname: ARRAY OF CHAR;
VAR drive: SHORTCARD;
VAR currDir: ARRAY OF CHAR);
BEGIN
IF Str.Pos(pathname, ":") = MAX(CARDINAL) THEN (* if no drive indicated *)
drive := GetDrive(); (* then insert current *)
AddDrive(drive, pathname) (* drive designation *)
ELSE
drive := SHORTCARD( ORD( CAP(pathname[0]) ) - ORD('A') )
END;
GetDir(drive+1, currDir);
Str.Insert(currDir, "\", 0);
IF pathname[2] # '\' THEN
Str.Insert( pathname, "\", 2 );
IF Str.Length(currDir) > 1 THEN Str.Insert(pathname, currDir, 2) END
END
END FormName;
END AltFIO.
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/