home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
BEEHIVE
/
UTILITYS
/
PUDD.ARC
/
FILETOOL.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-08-11
|
7KB
|
256 lines
{...................do these declarations in the main file............
type filename = string[8] ;
filetype = string[3] ;
fullname = string[14] ;
var name : filename ;
ftype : filetype ;
UseFile : fullname ;
drive : char ;
X,Y : integer ;}
function Exist(name:fullname):boolean; {....if file exists returns true }
var
fil:file;
begin
Assign(fil,name);
{$I-}
Reset(fil);
{$I+}
Exist := (IOresult = 0)
end;
function CurrDrive:char; { ...returns the current drive as a single charactor}
var DriveNum:integer;
begin
DriveNum := Bdos(25);
case DriveNum of
0:CurrDrive := 'A';
1:CurrDrive := 'B';
2:CurrDrive := 'C';
3:CurrDrive := 'D';
4:CurrDrive := 'E';
5:CurrDrive := 'F';
6:CurrDrive := 'G'; {..I could go on but who has more than 6 drives ?}
end; {............case }
end;
procedure NewDrive(Drive:char); {..changes current logged drive}
var DriveNum:integer;
begin
DriveNum := 0;
case UpCase(Drive) of
'A':DriveNum := 0;
'B':DriveNum := 1;
else
begin
write('Error....illegal drive designation Drive will default to A:');
write(^G);
delay(1500);
end;
end; {........case}
Bdos(14,DriveNum);
end;
procedure GetDrive(var UseFile:fullname;var drive:char);
{ .......................set drive from file specified, if
none stated drive is set to default }
begin
if copy(UseFile,2,1) = ':' then {..check for drive designation}
begin
drive := UpCase(copy(UseFile,1,1));
UseFile := copy(UseFile,3,12);
end
else {......else use current drive }
begin
drive := CurrDrive;
end;
end;
function CheckString(UseFile:filename):boolean; {..check for valid name}
begin
if pos('*',UseFile) { .....checks common illegal charactors }
+pos('.BAK',UseFile) {......and dis-allows .bak types }
+pos('?',UseFile)
+pos(';',UseFile) {.......dis-allows common errors }
+pos('C:',UseFile) {...... dis-allows non-existant drives }
+pos('D:',UseFile)
+pos(' ',UseFile)
+pos('!',UseFile) <> 0 then
CheckString := false
else
CheckString := true;
end;
procedure UpCaseString(var name:fullname); {....change string to upper case}
var i : integer ;
byte : char ;
begin
for i := 1 to length(name) do
begin
byte := copy(name,i,1);
delete(name,i,1);
insert(UpCase(byte),name,i);
end;
end;
procedure GetType(var UseFile:fullname;var ftype:filetype);
{.......... sets type and strips type from name
if no type present a default is set }
const DefaultType : string[3] = 'SCR';
var i : integer;
begin
if pos('.',UseFile) <> 0 then {....strip off the file type}
begin
i := pos('.',UseFile);
ftype := copy(UseFile,(i+1),3);
UseFile := copy(UseFile,1,(i-1));
end
else
ftype := DefaultType;
end;
procedure FetchName(var drive: char; {...gets a legal name }
var name: filename;
var ftype: filetype;
X,Y : integer );
var UseFile:fullname;
begin
UseFile := '?'; {.....initalize name}
while not CheckString(UseFile) do
begin
GotoXY(X,Y);
ClrEol;
write('Enter a file name ');
read(UseFile);
UpCaseString(UseFile);
if not CheckString(UseFile) then
begin
GotoXY(X,Y);
ClrEol;
write('illegal file name!');
Delay(1500);
end;
end;
GetDrive(UseFile,drive);
GetType(UseFile,ftype);
name := copy(UseFile,1,8);
end;
procedure BackFile(drive: char ; {..........backup a file}
name : filename;
ftype: filetype );
var old : file ;
UseFile : fullname ;
begin
UseFile := drive+':'+name+'.'+'bak'; {...erase any old *.bak file}
if Exist(UseFile) then
begin
assign(old,UseFile);
Erase(old);
end;
assign(old,drive+':'+name+'.'+ftype); {.....rename *.* to *.bak }
UseFile := drive+':'+name+'.'+'bak';
Rename(old,UseFile);
end;
procedure NewFileName(var drive : char ;
var name : filename;
var ftype : filetype;
X,Y : integer);
var UseFile : fullname ;
byte : char ;
i : integer ;
done : boolean ;
begin
done := false;
while not done do
begin
FetchName(drive,name,ftype,X,Y); {...get a legal name}
if Exist(drive+':'+name+'.'+ftype) then {...check previous existance}
begin
GotoXY(X,Y);
ClrEol;
write('File exists................ ');
Delay(1500);
GotoXY(X,Y);
ClrEol;
write('(B)ackup, (C)hange name, (O)verwrite ..... ');
begin
repeat
read(kbd,byte);
byte := UpCase(byte)
until ((byte = 'B') or
(byte = 'C') or
(byte = 'O') );
case byte of
'B':begin {.......(B)ackup existing }
BackFile(drive,name,ftype);
done := true;
end;
'O':begin {.......(O)verwrite }
done := true;
end;
'C':begin {....get a different name }
end;
end; {......case}
end;
end {.....existance question}
else
done := true;
end;
end; {......file drive, name, and type found}
procedure OldFileName(var drive : char ;
var name : filename;
var ftype : filetype;
X,Y : integer);
var UseFile : fullname ;
byte : char ;
i : integer ;
done : boolean ;
begin
done := false;
while not done do
begin
FetchName(drive,name,ftype,X,Y); {...get a legal name}
if not(Exist(drive+':'+name+'.'+ftype)) then {...check previous existance}
begin
GotoXY(X,Y);
ClrEol;
write('No such file exists................ ');
Delay(1500);
GotoXY(X,Y);
ClrEol;
write('(C)hange name or (Q)uit ..... ');
begin
repeat
read(kbd,byte);
byte := UpCase(byte)
until ((byte = 'Q') or
(byte = 'C') );
case byte of
'Q':begin {.......Quit }
done := true;
name := '';
ftype := '';
end;
'C':begin {....get a different name }
end;
end; {......case}
end;
end {.....existance question}
else
done := true;
end;
end; {......file drive, name, and type found}