[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]
{
National ASCII Resource Converter v1.1
Author: Casey Billett
RR#4,
Prescott, Ontario,
Canada
K0E 1T0
** bassman@recorder.ca **
Date: Monday, August 9, 1997
License: Freeware
Agreement: Header stays intact of source code
Help: This currently has a maximum text file length of 60000 chars.
If anyone develops an adequate method of delineating this
problem, please e-mail me. Possible methods include:
const FAtype = array [1..60000] of char;
var FA: ^FAType;
new(FA);
and referencing it from there. Regardless...
}
program NARC; { National ASCII Resource Converter }
uses
CRT,DOS;
{
-- Line endings of different format text files --
#13,#10 = DOS
#13 = MAC
#10 = UNIX
}
{
-- Assign writemodes to different formats --
writemode == 1; DOS
writemode == 2; MAC
writemode == 3; UNIX
}
type
FAtype = array[0..60000] of char; { Maximum text length = 60000 }
var
f:text; { Assigned paramstr(1) - file to convert }
writemode: integer; { Assigned the format of txt file to read }
readmode: integer; { Assigned the format of txt file to write }
FA: FAtype;
j: integer; { Contains length of file }
const
DOSf=1; { DOS file format }
MACf=2; { Macintosh file format }
UNIXf=3; { Unix file format }
CR=#13; { Carriage return character }
LF=#10; { Line feed character }
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
procedure init; { General initialization & logo }
begin
textcolor(White);
write(' NARC: ');
textcolor(LightGray);
writeln('National ASCII Resource Converter');
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
procedure displayinstructions; { Display if the syntax is not right }
begin
textcolor(White);
write(' **');
textcolor(Red);
write(' NARC');
textcolor(DarkGray);
write(' - usage:');
textcolor(White);
write(' narc');
write(' filename1 filename2');
textcolor(Green);
write(' [udm]');
textcolor(White);
writeln(' **');
textcolor(Green);
write(' u');
textcolor(LightGray);
writeln(': Convert filename1 to unix format and save in filename2');
textcolor(Green);
write(' d');
textcolor(LightGray);
writeln(': Convert filename1 to dos format and save in filename2');
textcolor(Green);
write(' m');
textcolor(LightGray);
writeln(': Convert filename1 to mac format and save in filename2');
writeln(' See READ.ME for examples');
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
function filesOK: boolean; { Make sure file in params exists }
var f:text;
begin
{$I-}
filesOK := TRUE;
assign(f, paramstr(1));
reset(f);
if IOResult <> 0 then begin
textcolor(White);
write(' ** Error: ');
textcolor(LightGray);
writeln('File ', paramstr(1), ' does not exist');
filesOK := FALSE;
end;
close(f);
{$I+}
if (paramcount=1) then begin
textcolor(White);
write(' ** Error: ');
textcolor(LightGray);
writeln('Must specify output file');
filesOK := FALSE;
end;
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
function paramsOK: boolean; { Checks to make sure sytax ok }
var k:integer;
begin
paramsOK := FALSE;
if (ParamCount = 0) then
displayinstructions
else begin
if filesOK then paramsOK := TRUE else displayinstructions;
end;
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
procedure writefile(var f: text); { Write the file in the new format }
var k:integer; temp:char;
begin
assign (f, paramstr(2));
rewrite(f);
for k:= 0 to j do begin
temp:=FA[k];
if (temp <> CR) and (temp <> LF) and (j<>k) then write(f, temp)
else begin
if temp = CR then begin
case writemode of
DOSf: write(f, CR,LF);
MACf: write(f, CR);
UNIXf: write(f, LF);
end; {case}
end;
if (temp = LF) and (readmode = UNIXf) then begin
case writemode of
DOSf: write(f, CR,LF);
MACf: write(f, CR);
UNIXf: write(f, LF);
end; {case}
end;
end;
end;
close(f);
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
procedure readfile(var f:text); { Read the input file charxchar }
begin
j:=0;
while not(EOF(f)) do begin
read(f,FA[j]);
inc(j);
end;
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
function determinetype:integer; { Determines format of input file }
var k,l:integer;
begin
for k:=0 to j do begin
if (FA[k] = CR) and (FA[k+1] = LF) then begin
determinetype := DOSf;
exit;
end
else
if (FA[k] = CR) and (FA[k+1] <> LF) then begin
determinetype := MACf;
exit;
end
else
if (FA[k] = LF) then begin
determinetype := UNIXf;
exit;
end;
end;
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
function determinewrite: integer; { Checks param to determine write format }
var temp:string;
begin
temp:=paramstr(3);
case temp[1] of
'd': determinewrite := DOSf;
'u': determinewrite := UNIXf;
'm': determinewrite := MACf;
else determinewrite := DOSf;
end
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
procedure operation(readf,writef:integer); { Determines conversion operation }
begin
readmode := readf;
writemode := writef;
case readmode of
DOSf: write(' DOS text file - ');
MACf: write(' Mac text file - ');
UNIXf: write(' Unix text file - ');
end; {case};
case writemode of
DOSf: writeln('DOS text file');
MACf: writeln('Mac text file');
UNIXf: writeln('Unix text file');
end; {case}
end;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
begin
init;
if (paramsOK) then begin
assign(f, paramstr(1));
reset(f);
readfile(f);
close(f);
writeln(' Determining file type...');
operation(determinetype,determinewrite);
writefile(f);
writeln(' Complete.');
end;
end.
[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]