home *** CD-ROM | disk | FTP | other *** search
- { MS-DOS file attribute editor version 1.00A by Bela Lubkin 1/10/85
- Send suggestions via Borland SIG on CompuServe - GO BOR }
-
- Program Attributes;
-
- Const
- AN: Array [0..7] Of String[13]=
- ('Read only','Hidden','System','Volume name','Directory',
- 'Not archived','Unknown ($40)','Unknown ($80)');
- NA: Array [0..7] Of String[12]=
- ('Read only','Read/write','Hidden','Visible',
- 'System','Non-system','Not archived','Archived');
-
- Type
- FileName=String[65];
- DTA=Record
- Junk: Array [0..20] Of Byte;
- Attrib: Byte;
- Time: Integer;
- Date: Integer;
- LSize: Integer;
- HSize: Integer;
- FN: Array [0..12] Of Char;
- End;
- RegisterSet=Record Case Integer Of
- 1: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags: Integer);
- 2: (AL,AH,BL,BH,CL,CH,DL,DH: Byte);
- End;
-
- Var
- Path,FName,Found: FileName;
- CurDTA: ^DTA;
- Regs: RegisterSet;
- Done,None,Changed,Prev: Boolean;
- C,I,J: Integer;
- CommandLine: String[127] Absolute CSEG:$0080;
-
- Begin
- FName:=Copy(CommandLine,2,127);
- If FName='' Then
- Begin
- Write('Enter file name: ');
- ReadLn(FName);
- End;
- For I:=1 To Length(FName) Do FName[I]:=UpCase(FName[I]);
- I:=Pos('\',FName);
- If Pos(':',FName)<>0 Then I:=Pos(':',FName);
- If I<>0 Then
- Repeat
- J:=Pos('\',Copy(FName,I+1,64));
- I:=I+J;
- Until J=0;
- Path:=Copy(FName,1,I);
- If Path=FName Then FName:=FName+'*.*';
- FName[Length(FName)+1]:=Chr(0);
- With Regs Do
- Begin
- AH:=$2F;
- MsDos(Regs);
- CurDTA:=Ptr(ES,BX);
- AH:=$4E;
- DS:=Seg(FName[1]);
- DX:=Ofs(FName[1]);
- CX:=$17;
- MsDos(Regs);
- Done:=False;
- None:=True;
- Repeat
- If (Flags And 1)<>0 Then
- Begin
- Case AX Of
- 3: Write('Path not found');
- 15: Write('Invalid drive');
- 18: If None Then Write('File not found');
- else Write('Unknown error #',AX);
- End;
- WriteLn;
- Done:=True;
- End
- Else
- Begin
- None:=False;
- Found:=Path+Copy(CurDTA^.FN,1,Pos(#0,CurDTA^.FN));
- Write(Copy(Found,1,Length(Found)-1));
- AX:=$4300;
- DS:=Seg(Found[1]);
- DX:=Ofs(Found[1]);
- MsDos(Regs);
- Write('(':Length(Path)-Length(Found)+15);
- Prev:=False;
- For I:=0 To 7 Do
- If CX And (1 Shl I)<>0 Then
- Begin
- If Prev Then Write(',');
- Write(AN[I]);
- Prev:=True;
- End;
- WriteLn(')');
- Changed:=False;
- Repeat
- Write('Change which attribute (0 for next file, -1 for list)? ');
- C:=0;
- ReadLn(C);
- Case C Of
- -1: WriteLn('#:Change to 1:',NA[CX And 1],' 2:',NA[(CX And 2) Shr 1+2],
- ' 3:',NA[(CX And 4) Shr 2+4],
- ' 4:',NA[(CX And 32) Shr 5+6]);
- 1: CX:=CX Xor 1;
- 2: CX:=CX Xor 2;
- 3: CX:=CX Xor 4;
- 4: CX:=CX Xor 32;
- End;
- If C In [1..4] Then Changed:=True;
- Until C=0;
- If Changed Then
- Begin
- AX:=$4301;
- DS:=Seg(Found[1]);
- DX:=Ofs(Found[1]);
- CX:=CX And $FFE7;
- MsDos(Regs);
- End;
- AH:=$4F;
- MsDos(Regs);
- End;
- Until Done;
- End;
- End.