telegard/conv18a.pas

1720 lines
53 KiB
ObjectPascal
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{$A+,B+,E+,F+,I+,L+,N-,O+,R-,S+,V-}
{$M 50000,0,1024}
uses crt,dos,
myio;
const
needconv = 'S23568CD';
standard_conversion = TRUE;
{$I rcc17a.pas}
{$I rec18a.pas}
var
a,b,lastss,mp,gp,sp:astr;
h,i,j,k,savx,savy:integer;
c:char;
aw:boolean; { author working }
back:boolean; { converting BACK TO PREVIOUS VERSION ! .. }
found:boolean;
dirinfo:searchrec;
ptsforisrequest,ptsfornotval:integer;
wind:windowrec;
didit:boolean;
needs:longint;
artable:astr;
{ systatf17a4:file of systatrec17a4;}
{ systat17a4:systatrec17a4;}
systatf1:file of systatrec1;
systat1:systatrec1;
systatf0:file of systatrec;
systat0:systatrec;
systatf:file of systatrec;
systat:systatrec;
modemrf:file of modemrec;
modemr:modemrec;
fstringf:file of fstringrec;
fstring:fstringrec;
sf1:file of smalrec1;
sr1:smalrec1;
sf:file of smalrec;
sr:smalrec;
uf1:file of userrec1;
user1:userrec1; {**}
uf0:file of userrec;
user0:userrec;
uf:file of userrec;
user:userrec; {**}
bf1:file of boardrec1;
brd1:boardrec1;
{ bf17a5:file of boardrec17a5;}
{ brd17a5:boardrec17a5;}
bf:file of boardrec;
brd:boardrec;
mailfile1:file of mailrec1;
mail1:mailrec1; {**}
mailfile:file of mailrec;
mail:mailrec; {**}
ulf1:file of ulrec1;
ubrd1:ulrec1;
{ ulf17a2:file of ulrec17a2;}
{ ubrd17a2:ulrec17a2;}
ulf0:file of ulrec;
ubrd0:ulrec;
ulf:file of ulrec;
ubrd:ulrec;
ulff1:file of ulfrec1;
uld1:ulfrec1;
ulff:file of ulfrec;
uld:ulfrec;
{ slf1:file of slr1;
seclev1:array[0..255] of slr1;
slf:file of seclevrec;
seclev:seclevrec;}
gfilef1:file of gft1; {**}
gfile1:gft1; {**}
gfilef:file of tfilerec;{**}
gfile:tfilerec; {**}
smf1:file of smr1;
sm1:smr1;
smf:file of smr;
sm:smr;
ztf1:file of zlogt1; {**}
zt1:zlogt1; {**}
ztf:file of zlogrec; {**}
zt:zlogrec; {**}
vdf1:file of vdatar1; {**}
vd1:vdatar1; {**}
vdf:file of vdatar; {**}
vd:vdatar; {**}
macrf:file of macrorec;
macr:macrorec;
xp1:file of protrec1;
xpr1:protrec1;
xp0:file of protrec;
xpr0:protrec;
xp:file of protrec;
xpr:protrec;
mbasef1:file of messagerec1;
mbase1:messagerec1;
mbasef:file of messagerec;
mbase:messagerec;
ff:file;
{**} (* NOT defined globally in COMMON.PAS .... *)
function value(I:astr):integer;
var n,n1:integer;
begin
val(i,n,n1);
if n1<>0 then begin
i:=copy(i,1,n1-1);
val(i,n,n1)
end;
value:=n;
if i='' then value:=0;
end;
function cstrl(li:longint):astr;
var c:astr;
begin
str(li,c);
cstrl:=c;
end;
function cstr(i:integer):astr;
var c:astr;
begin
str(i,c);
cstr:=c;
end;
function tch(i:astr):astr;
begin
if length(i)>2 then i:=copy(i,length(i)-1,2) else
if length(i)=1 then i:='0'+i;
tch:=i;
end;
{rcg11272000 dunno if this is even used, but it won't fly under Linux.}
{ below is a working implementation.}
{
function time:astr;
var reg:registers;
h,m,s:string[4];
begin
reg.ax:=$2c00; intr($21,Dos.Registers(reg));
str(reg.cx shr 8,h); str(reg.cx mod 256,m); str(reg.dx shr 8,s);
time:=tch(h)+':'+tch(m)+':'+tch(s);
end;
}
function time:string;
var h,m,s:string[3];
hh,mm,ss,ss100:word;
begin
gettime(hh,mm,ss,ss100);
str(hh,h); str(mm,m); str(ss,s);
time:=tch(h)+':'+tch(m)+':'+tch(s);
end;
{rcg11272000 dunno if this is even used, but it won't fly under Linux.}
{ below is a working implementation, Y2K fixes included.}
{
function date:astr;
var reg:registers;
m,d,y:string[4];
begin
reg.ax:=$2a00; msdos(Dos.Registers(reg)); str(reg.cx,y); str(reg.dx mod 256,d);
str(reg.dx shr 8,m);
date:=tch(m)+'/'+tch(d)+'/'+tch(y);
end;
}
function date:string;
var
{rcg11272000 unused variable.}
{r:registers;}
{rcg11272000 Y2K-proofing.}
{y,m,d:string[3];}
m,d:string[3];
y:string[5];
yy,mm,dd,dow:word;
begin
getdate(yy,mm,dd,dow);
{rcg11272000 Y2K-proofing.}
{str(yy-1900,y); str(mm,m); str(dd,d);}
str(yy,y); str(mm,m); str(dd,d);
date:=tch(m)+'/'+tch(d)+'/'+y;
end;
function leapyear(yr:integer):boolean;
begin
leapyear:=(yr mod 4=0) and ((yr mod 100<>0) or (yr mod 400=0));
end;
function days(mo,yr:integer):integer;
var d:integer;
begin
d:=value(copy('312831303130313130313031',1+(mo-1)*2,2));
if (mo=2) and leapyear(yr) then d:=d+1;
days:=d;
end;
function daycount(mo,yr:integer):integer;
var m,t:integer;
begin
t:=0;
for m:=1 to (mo-1) do t:=t+days(m,yr);
daycount:=t;
end;
function daynum(dt:astr):integer;
var d,m,y,t,c:integer;
begin
t:=0;
m:=value(copy(dt,1,2));
d:=value(copy(dt,4,2));
{rcg11182000 hahahaha...a Y2K bug. :) }
{rcg11272000 Let's make sure the values coming in here are four }
{digits in the first place, which should save us some hacks elsewhere...}
{y:=value(copy(dt,7,2))+1900;}
{rcg11272000 my adds...}
if (length(dt) < 10) then rcgpanic('WHOA! TWO DIGIT YEAR IN DATE!');
y:=value(copy(dt,7,4));
{rcg11272000 end my adds...}
for c:=1985 to y-1 do
if leapyear(c) then t:=t+366 else t:=t+365;
t:=t+daycount(m,y)+(d-1);
daynum:=t;
if y<1985 then daynum:=0;
end;
function freek(d:integer):longint; (* See disk space *)
{var r:registers;}
begin
freek:=diskfree(d) div 1024;
{ r.ax:=$3600;
r.dx:=d;
msdos(dos.registers(r));
freek:=trunc(1.0*r.bx*r.ax*r.cx/1024.0);}
end;
procedure tc(i:integer);
begin
textcolor(i);
end;
procedure star(s:astr);
begin
tc(9); write('<27> ');
tc(11); writeln(s);
end;
function exdrv(s:astr):byte;
begin
{rcg11242000 point at root drive always. Ugh.}
{
s:=fexpand(s);
exdrv:=ord(s[1])-64;
}
exdrv:=3;
end;
procedure movefile(srcname,destpath:string);
var buffer:array[1..16384] of byte;
dfs,nrec:integer;
src,dest:file;
dd,dn,de:string;
procedure dodate;
var r:registers;
od,ot,ha:integer;
begin
srcname:=srcname+#0;
destpath:=destpath+#0;
with r do begin
ax:=$3d00; ds:=seg(srcname[1]); dx:=ofs(srcname[1]); msdos(dos.registers(r));
ha:=ax; bx:=ha; ax:=$5700; msdos(dos.registers(r));
od:=dx; ot:=cx; bx:=ha; ax:=$3e00; msdos(dos.registers(r));
ax:=$3d02; ds:=seg(destpath[1]); dx:=ofs(destpath[1]); msdos(dos.registers(r));
ha:=ax; bx:=ha; ax:=$5701; cx:=ot; dx:=od; msdos(dos.registers(r));
ax:=$3e00; bx:=ha; msdos(dos.registers(r));
end;
end;
begin
fsplit(srcname,dd,dn,de);
destpath:=destpath+dn+de;
assign(src,srcname);
{$I-} reset(src,1); {$I+}
if (ioresult<>0) then begin
writeln;
star('"'+srcname+'": File not found.'^G^G);
{ halt(1);}
end else begin
dfs:=freek(exdrv(destpath));
{rcg11172000 don't have LONGfilesize()...}
{if (trunc(longfilesize(src)/1024.0)+1>=dfs) then begin}
if (trunc(filesize(src)/1024.0)+1>=dfs) then begin
writeln;
star('"'+srcname+'": Disk full.');
halt(1);
end else begin
assign(dest,destpath); rewrite(dest,1);
repeat
blockread(src,buffer,16384,nrec);
blockwrite(dest,buffer,nrec);
until (nrec<16384);
close(dest);
close(src);
dodate;
erase(src);
end;
end;
end;
procedure smovefile(srcname,destpath:string);
begin
star('Moving "'+srcname+'" to "'+destpath+'"');
movefile(srcname,destpath);
end;
procedure ffile(fn:astr);
begin
findfirst(fn,anyfile,dirinfo);
found:=(doserror=0);
end;
procedure nfile;
var r:registers;
begin
findnext(dirinfo);
found:=(doserror=0);
end;
function allcaps(s:astr):astr; (* returns a COMPLETELY capitalized string *)
var i:integer;
begin
for i:=1 to length(s) do
s[i]:=upcase(s[i]);
allcaps:=s;
end;
procedure cursoron;
var reg:registers;
begin
with reg do begin
ch:=07; cl:=08; ah:=1;
intr($10,reg);
end;
end;
procedure cursoroff;
var reg:registers;
begin
with reg do begin
ch:=09; cl:=00; ah:=1;
intr($10,reg);
end;
end;
procedure prt(s:string);
begin
textcolor(9); write(s);
end;
procedure ttl(s:string);
begin
writeln;
textcolor(9); write('<27><>[');
textbackground(1); textcolor(15);
write(' '+s+' ');
textbackground(0); textcolor(9);
write(']');
repeat write('<27>') until wherex=80;
writeln;
end;
procedure ee(s:astr);
begin
clrscr;
writeln;
tc(4); writeln('ERROR:');
writeln;
tc(15); write(' '+s);
writeln;
writeln;
tc(9); write('Hit any key to exit : ');
repeat until keypressed;
c:=readkey;
removewindow(wind); gotoxy(savx,savy);
halt(1);
end;
procedure ss(s:astr);
begin
lastss:=allcaps(s);
star('Searching for "'+lastss+'"');
end;
procedure cantopen;
begin
ee('Unable to open "'+lastss+'"');
end;
function needc(c:char):boolean;
begin
if pos(c,needconv)<>0 then needc:=TRUE else needc:=FALSE;
end;
procedure fvers;
var i:integer;
begin
needs:=0;
writeln;
ss('status.dat');
assign(systatf1,'status.dat');
{$I-} reset(systatf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(systatf1,systat1); {$I+}
if (ioresult<>0) then begin
close(systatf1);
assign(systatf,'status.dat');
reset(systatf);
{$I-} read(systatf,systat); {$I+}
gp:=systat.gfilepath;
mp:=systat.menupath;
close(systatf);
end else begin
gp:=systat1.gfilepath;
mp:=systat1.menupath;
close(systatf1);
end;
inc(needs,sizeof(systatrec));
if needc('1') then begin
ss('names.lst');
assign(sf1,gp+'names.lst');
{$I-} reset(sf1); {$I+}
if (ioresult<>0) then begin
assign(systatf,'status.dat');
reset(systatf);
{$I-} read(systatf,systat); {$I+}
gp:=systat.gfilepath;
mp:=systat.menupath;
close(systatf);
assign(sf1,gp+'names.lst');
{$I-} reset(sf1); {$I+}
if (ioresult<>0) then cantopen;
end;
{$I-} read(sf1,sr1); {$I+}
inc(needs,sizeof(smalrec)*filesize(sf1));
close(sf1);
end;
if needc('2') then begin
ss('user.lst');
assign(uf1,gp+'user.lst');
{$I-} reset(uf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(uf1,user1); {$I+}
inc(needs,sizeof(userrec)*filesize(uf1));
close(uf1);
end;
if needc('3') then begin
ss('boards.dat');
assign(bf1,gp+'boards.dat');
{$I-} reset(bf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(bf1,brd1); {$I+}
inc(needs,sizeof(boardrec)*filesize(bf1));
close(bf1);
end;
if needc('4') then begin
ss('email.dat');
assign(mailfile1,gp+'email.dat');
{$I-} reset(mailfile1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(mailfile1,mail1); {$I+}
inc(needs,sizeof(mailrec)*filesize(mailfile1));
close(mailfile1);
end;
if needc('5') then begin
ss('gfiles.dat');
assign(gfilef1,gp+'gfiles.dat');
{$I-} reset(gfilef1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(gfilef1,gfile1); {$I+}
inc(needs,sizeof(tfilerec)*filesize(gfilef1));
close(gfilef1);
end;
if needc('6') then begin
ss('protocol.dat');
assign(xp1,gp+'protocol.dat');
{$I-} reset(xp1); {$I+}
if (ioresult<>0) then cantopen;
inc(needs,sizeof(protrec)*filesize(xp1));
close(xp1);
end;
if needc('7') then begin
ss('shortmsg.dat');
assign(smf1,gp+'shortmsg.dat');
{$I-} reset(smf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(smf1,sm1); {$I+}
inc(needs,sizeof(smalrec)*filesize(smf1));
close(smf1);
end;
if needc('8') then begin
ss('uploads.dat');
assign(ulf1,gp+'uploads.dat');
{$I-} reset(ulf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(ulf1,ubrd1); {$I+}
inc(needs,sizeof(ulrec)*filesize(ulf1));
close(ulf1);
end;
if needc('9') then begin
ss('voting.dat');
assign(vdf1,gp+'voting.dat');
{$I-} reset(vdf1); {$I+}
inc(needs,sizeof(vdatar)*filesize(vdf1));
if (ioresult=0) then close(vdf1);
end;
if needc('A') then begin
ss('zlog.dat');
assign(ztf1,gp+'zlog.dat');
{$I-} reset(ztf1); {$I+}
if (ioresult<>0) then cantopen;
{$I-} read(ztf1,zt1); {$I+}
inc(needs,sizeof(zlogrec)*filesize(ztf1));
close(ztf1);
end;
if needc('B') then begin
ss('*.dir');
ffile(gp+'*.dir');
while (found) do begin
assign(ulff1,fexpand(gp+dirinfo.name));
{$I-} reset(ulff1); {$I+}
inc(needs,sizeof(ulfrec)*filesize(ulff1));
close(ulff1);
nfile;
end;
end;
end;
function barconv(c:char):char;
var s:astr;
begin
if (pos(c,artable)<>0) then s:=copy('ABCDEFG',pos(c,artable),1) else s:='@';
barconv:=s[1];
end;
function arconv(c:char):char;
begin
if (c in ['A'..'G']) then
if (length(artable)>=ord(c)-64) and (artable[ord(c)-64] in ['@'..'Z']) then
arconv:=artable[ord(c)-64]
else arconv:='@'
else arconv:='@';
end;
{rcg11172000 had to change this to get it compiling under Free Pascal...}
{function substall(src,old,new:astr):astr;}
function substall(src,old,_new:astr):astr;
var p:integer;
begin
p:=1;
while (p>0) do begin
p:=pos(old,src);
if (p>0) then begin
insert(_new,src,p+length(old));
delete(src,p,length(old));
end;
end;
substall:=src;
end;
procedure bconvert(xx:integer);
var i,j,k:integer;
s:astr;
b:boolean;
begin
case xx of
(*
6:begin
ttl('BACKWARD Converting "PROTOCOL.DAT');
chdir(copy(gp,1,length(gp)-1));
ffile('protocol.dat');
if (not found) then star('PROTOCOL.DAT not found.')
else begin
assign(xp,'protocol.old'); rewrite(xp); close(xp); erase(xp);
assign(xp,'protocol.tcp'); rewrite(xp); close(xp); erase(xp);
assign(xp,'protocol.dat'); reset(xp);
assign(xp1,'protocol.tcp'); rewrite(xp1);
for i:=0 to filesize(xp)-1 do begin
seek(xp,i); read(xp,xpr);
star(' (record #'+cstr(i)+' of '+cstr(filesize(xp)-1)+')'); gotoxy(1,wherey-1);
with xpr1 do begin
active:=(xbactive in xpr.xbstat);
isbatch:=(xbisbatch in xpr.xbstat);
isresume:=(xbisresume in xpr.xbstat);
xferokcode:=(xbxferokcode in xpr.xbstat);
ckeys:=xpr.ckeys;
descr:=xpr.descr;
minbaud:=xpr.minbaud;
maxbaud:=19200; maxbaud:=maxbaud*2;
sl:=xpr.sl;
dsl:=xpr.dsl;
ar:=xpr.ar;
templog:=xpr.templog;
uloadlog:=xpr.uloadlog;
dloadlog:=xpr.dloadlog;
ulcmd:=xpr.ulcmd;
dlcmd:=xpr.dlcmd;
for j:=1 to 6 do begin
ulcode[j]:=xpr.ulcode[j];
dlcode[j]:=xpr.dlcode[j];
end;
envcmd:=xpr.envcmd;
dlflist:=xpr.dlflist;
maxchrs:=xpr.maxchrs;
logpf:=xpr.logpf;
logps:=xpr.logps;
end;
seek(xp1,i); write(xp1,xpr1);
end;
close(xp);
close(xp1);
rename(xp,'protocol.old');
rename(xp1,'protocol.dat');
writeln;
end;
chdir(sp);
end;
*)
12:begin
ttl('-<2D><<3C>--BACKWARD--<2D><<3C>- Converting "*.BRD" message base info files');
chdir(copy(gp,1,length(gp)-1));
ffile('*.brd');
if not found then star('No *.BRD files present.')
else begin
repeat
s:=dirinfo.name;
assign(mbasef,copy(s,1,length(s)-3)+'old'); rewrite(mbasef);
close(mbasef); erase(mbasef);
assign(mbasef,copy(s,1,length(s)-3)+'tcp'); rewrite(mbasef);
close(mbasef); erase(mbasef);
assign(mbasef,s); reset(mbasef);
assign(mbasef1,copy(s,1,length(s)-3)+'tcp'); rewrite(mbasef1);
star('Converting "'+s+'" ('+cstr(filesize(mbasef)-1)+' messages)');
for i:=0 to filesize(mbasef)-1 do begin
seek(mbasef,i); read(mbasef,mbase);
with mbase do begin
mbase1.title:=title;
if (validated in messagestat) then mbase1.messagestat:=validated1;
if (unvalidated in messagestat) then mbase1.messagestat:=unvalidated1;
if (deleted in messagestat) then mbase1.messagestat:=deleted1;
mbase1.message.ltr:=message.ltr;
mbase1.message.number:=message.number;
mbase1.message.ext:=message.ext;
mbase1.owner:=owner;
mbase1.date:=mbase1.date;
mbase1.mage:=255;
end;
write(mbasef1,mbase1);
end;
close(mbasef1);
close(mbasef);
rename(mbasef1,copy(s,1,length(s)-3)+'obr');
nfile;
until (not found);
ffile('*.obr');
while (found) do begin
s:=dirinfo.name;
assign(mbasef1,copy(s,1,length(s)-3)+'brd');
rename(mbasef1,copy(s,1,length(s)-3)+'old');
assign(mbasef,s); rename(mbasef,copy(s,1,length(s)-3)+'brd');
nfile;
end;
end;
chdir(sp);
end;
end;
end;
procedure fconvert(xx:integer);
const dcols:clrs=((15,7,7,15,15,15,112,7,143,7),(15,3,1,11,9,14,31,4,140,10));
var i,j,k:integer;
b:boolean;
s,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15:astr;
c:char;
mf,mf1:text;
sepmsgs,nocopy,bla,b1,b2:boolean;
f:file;
mary:array[0..200] of messagerec;
curdir:astr;
newpath:array[1..3] of astr;
fff:file;
menuline:array[1..13] of string[255];
uu:uflags1;
numread:word;
procedure make_paths;
var s:string;
i,j:integer;
begin
for i:=1 to 3 do begin
{rcg11242000 Dosism.}
{while copy(newpath[i],length(newpath[i]),1)='\' do}
while copy(newpath[i],length(newpath[i]),1)='/' do
newpath[i]:=copy(newpath[i],1,length(newpath[i])-1);
case i of 1:s:='AFILES'; 2:s:='TRAP'; 3:s:='TEMP'; end;
star(s+' path ("'+fexpand(newpath[i])+'")');
{$I-} mkdir(fexpand(newpath[i])); {$I+}
if (ioresult<>0) then begin
writeln;
star('Error creating directory "'+fexpand(newpath[i])+'"');
halt(1);
end;
if (i=3) then
for j:=1 to 3 do begin
{rcg11242000 DOSism.}
(*{$I-} mkdir(fexpand(newpath[i]+'\'+cstr(j))); {$I+}*)
{$I-} mkdir(fexpand(newpath[i]+'/'+cstr(j))); {$I+}
if (ioresult<>0) then begin
writeln;
{rcg11242000 DOSism.}
{star('Error creating directory "'+fexpand(newpath[i]+'\'+cstr(j))+'"');}
star('Error creating directory "'+fexpand(newpath[i]+'/'+cstr(j))+'"');
halt(1);
end;
end;
{rcg11242000 DOSism.}
{newpath[i]:=newpath[i]+'\';}
newpath[i]:=newpath[i]+'/';
end;
end;
function sacs(b:byte):string;
begin
if (b>0) then sacs:='s'+cstr(b) else sacs:='';
end;
begin
case xx of
0:begin
ttl('Converting "STATUS.DAT"');
ffile('status.dat');
if (not found) then star('STATUS.DAT not found.')
else begin
assign(systatf1,'status.old'); rewrite(systatf1); close(systatf1); erase(systatf1);
assign(systatf1,'status.tcp'); rewrite(systatf1); close(systatf1); erase(systatf1);
assign(systatf,'status.tcp'); rewrite(systatf);
assign(systatf1,'status.dat');
reset(systatf1); read(systatf1,systat1);
if (standard_conversion) then { default settings for STANDARDs }
with systat1 do begin
arq9600rate:=9600;
allstartmenu:='MAIN';
wfcblanktime:=0;
validateallfiles:=FALSE;
maxintemp:=500;
slogtype:=0;
stripclog:=FALSE;
noforcerate:=FALSE;
rebootforevent:=TRUE;
minresume:=100;
windowon:=TRUE;
curwindow:=1;
end;
with systat1 do begin
systat.gfilepath:=gfilepath;
systat.afilepath:=afilepath;
systat.menupath:=menupath;
systat.trappath:=trappath;
systat.pmsgpath:=pmsgpath;
systat.tfilepath:=tfilepath;
systat.temppath:=temppath;
systat.bbsname:=bbsname;
systat.bbsphone:=bbsphone;
systat.sysopname:=sysopfirst+' '+sysoplast;
{**} systat.maxusers:=500;
systat.lowtime:=lowtime;
systat.hitime:=hitime;
systat.dllowtime:=dllowtime;
systat.dlhitime:=dlhitime;
systat.shuttlelog:=matrix;
systat.lock300:=lock300;
systat.sysoppw:=sysoppw;
systat.newuserpw:=boardpw;
systat.shuttlepw:=bbspw;
systat.b300lowtime:=b300lowtime;
systat.b300hitime:=b300hitime;
systat.b300dllowtime:=b300dllowtime;
systat.b300dlhitime:=b300dlhitime;
systat.closedsystem:=closedsystem;
systat.snowchecking:=snowchecking;
systat.eventwarningtime:=eventwarningtime;
systat.tfiledate:=tfiledate;
systat.hmsg.ltr:=hmsg.ltr;
systat.hmsg.number:=hmsg.number;
systat.hmsg.ext:=hmsg.ext;
for j:=1 to 20 do systat.res[j]:=0;
systat.sop:=sacs(sop);
systat.csop:=sacs(csop);
systat.msop:=sacs(msop);
systat.fsop:=sacs(fsop);
systat.spw:=sacs(spw);
systat.seepw:=sacs(seepw);
systat.normpubpost:=sacs(normpubpost);
systat.normprivpost:=sacs(normprivpost);
systat.anonpubread:=sacs(anonpubread);
systat.anonprivread:=sacs(anonprivread);
systat.anonpubpost:=sacs(anonpubpost);
systat.anonprivpost:=sacs(anonprivpost);
systat.seeunval:=sacs(seeunval);
systat.dlunval:=sacs(dlunval);
systat.nodlratio:=sacs(nodlratio);
systat.nopostratio:=sacs(nopostratio);
systat.nofilepts:=sacs(nofilepts);
systat.ulvalreq:=sacs(ulvalreq);
for j:=1 to 100 do systat.res2[j]:=0;
systat.maxprivpost:=maxprivpost;
systat.maxfback:=maxfback;
systat.maxpubpost:=maxpubpost;
systat.maxchat:=maxchat;
systat.maxwaiting:=maxwaiting;
systat.csmaxwaiting:=csmaxwaiting;
systat.maxlines:=maxlines;
systat.csmaxlines:=csmaxlines;
systat.maxlogontries:=tries;
systat.bsdelay:=bsdelay;
systat.sysopcolor:=sysopcolor;
systat.usercolor:=usercolor;
systat.minspaceforpost:=minspaceforpost;
systat.minspaceforupload:=minspaceforupload;
systat.backsysoplogs:=backsysoplogs;
systat.wfcblanktime:=wfcblanktime;
for j:=1 to 20 do systat.res3[j]:=0;
systat.specialfx:=special;
systat.clearmsg:=clearmsg;
systat.allowalias:=alias;
systat.phonepw:=fone;
systat.localsec:=localsec;
systat.localscreensec:=localscreensec;
systat.globaltrap:=globaltrap;
systat.autochatopen:=autochatopen;
systat.autominlogon:=autominlogon;
systat.bullinlogon:=bullinlogon;
systat.lcallinlogon:=lcallinlogon;
systat.yourinfoinlogon:=yourinfoinlogon;
systat.multitask:=multitask;
systat.offhooklocallogon:=offhooklocallogon;
systat.forcevoting:=forcevoting;
systat.compressbases:=compressbases;
systat.searchdup:=searchdup;
systat.slogtype:=slogtype;
systat.stripclog:=stripclog;
systat.newapp:=app;
systat.guestuser:=guestuser;
systat.timeoutbell:=timeoutbell;
systat.timeout:=timeout;
for j:=1 to 20 do systat.res4[j]:=0;
for j:=1 to maxarcs1 do begin
systat.filearcinfo[j].active:=filearcinfo[j].active;
systat.filearcinfo[j].ext:=filearcinfo[j].ext;
systat.filearcinfo[j].listline:=filearcinfo[j].listline;
systat.filearcinfo[j].arcline:=filearcinfo[j].arcline;
systat.filearcinfo[j].unarcline:=filearcinfo[j].unarcline;
systat.filearcinfo[j].testline:=filearcinfo[j].testline;
systat.filearcinfo[j].cmtline:=filearcinfo[j].cmtline;
systat.filearcinfo[j].succlevel:=filearcinfo[j].succlevel;
end;
systat.filearcinfo[7].ext:='';
systat.filearcinfo[8].ext:='';
for j:=1 to 3 do systat.filearccomment[j]:=filearccomment[j];
systat.uldlratio:=uldlratio;
systat.fileptratio:=fileptratio;
systat.fileptcomp:=fileptcomp;
systat.fileptcompbasesize:=fileptcompbasesize;
systat.ulrefund:=ulrefund;
systat.tosysopdir:=tosysopdir;
systat.validateallfiles:=validateallfiles;
systat.remdevice:=remdevice;
systat.maxintemp:=maxintemp;
systat.minresume:=minresume;
{**} systat.maxdbatch:=30;
{**} systat.maxubatch:=30;
for j:=1 to 30 do systat.res5[j]:=0;
systat.newsl:=newsl;
systat.newdsl:=newdsl;
systat.newar:=[];
for c:='A' to 'Z' do
if (c in newar) then systat.newar:=systat.newar+[c];
systat.newac:=[];
if (rlogon1 in newac) then systat.newac:=systat.newac+[rlogon];
if (rchat1 in newac) then systat.newac:=systat.newac+[rchat];
if (rvalidate1 in newac) then systat.newac:=systat.newac+[rvalidate];
if (rbackspace1 in newac) then systat.newac:=systat.newac+[rbackspace];
if (ramsg1 in newac) then systat.newac:=systat.newac+[ramsg];
if (rpostan1 in newac) then systat.newac:=systat.newac+[rpostan];
if (rpost1 in newac) then systat.newac:=systat.newac+[rpost];
if (remail1 in newac) then systat.newac:=systat.newac+[remail];
if (rvoting1 in newac) then systat.newac:=systat.newac+[rvoting];
if (rmsg1 in newac) then systat.newac:=systat.newac+[rmsg];
if (fnodlratio1 in newac) then systat.newac:=systat.newac+[fnodlratio];
if (fnopostratio1 in newac) then systat.newac:=systat.newac+[fnopostratio];
if (fnofilepts1 in newac) then systat.newac:=systat.newac+[fnofilepts];
if (fnodeletion1 in newac) then systat.newac:=systat.newac+[fnodeletion];
systat.newfp:=newfp;
systat.autosl:=autosl;
systat.autodsl:=autodsl;
systat.autoar:=[];
for c:='A' to 'Z' do
if (c in autoar) then systat.autoar:=systat.autoar+[c];
systat.autoac:=[];
if (rlogon1 in autoac) then systat.autoac:=systat.autoac+[rlogon];
if (rchat1 in autoac) then systat.autoac:=systat.autoac+[rchat];
if (rvalidate1 in autoac) then systat.autoac:=systat.autoac+[rvalidate];
if (rbackspace1 in autoac) then systat.autoac:=systat.autoac+[rbackspace];
if (ramsg1 in autoac) then systat.autoac:=systat.autoac+[ramsg];
if (rpostan1 in autoac) then systat.autoac:=systat.autoac+[rpostan];
if (rpost1 in autoac) then systat.autoac:=systat.autoac+[rpost];
if (remail1 in autoac) then systat.autoac:=systat.autoac+[remail];
if (rvoting1 in autoac) then systat.autoac:=systat.autoac+[rvoting];
if (rmsg1 in autoac) then systat.autoac:=systat.autoac+[rmsg];
if (fnodlratio1 in autoac) then systat.autoac:=systat.autoac+[fnodlratio];
if (fnopostratio1 in autoac) then systat.autoac:=systat.autoac+[fnopostratio];
if (fnofilepts1 in autoac) then systat.autoac:=systat.autoac+[fnofilepts];
if (fnodeletion1 in autoac) then systat.autoac:=systat.autoac+[fnodeletion];
systat.allstartmenu:=allstartmenu;
for j:=1 to 50 do systat.res6[j]:=0;
for j:=0 to 255 do systat.timeallow[j]:=timeallow[j];
for j:=0 to 255 do systat.callallow[j]:=callallow[j];
for j:=0 to 255 do systat.dlratio[j]:=dlratio[j];
for j:=0 to 255 do systat.dlkratio[j]:=dlkratio[j];
for j:=0 to 255 do systat.postratio[j]:=postratio[j];
systat.lastdate:=lastdate;
systat.curwindow:=1;
systat.istopwindow:=istopwindow;
systat.callernum:=callernum;
systat.numusers:=users;
systat.todayzlog.date:=lastdate;
for j:=0 to 4 do systat.todayzlog.userbaud[j]:=userbaud[j];
systat.todayzlog.active:=activetoday;
systat.todayzlog.calls:=callstoday;
systat.todayzlog.newusers:=newusertoday;
systat.todayzlog.pubpost:=msgposttoday;
systat.todayzlog.privpost:=emailtoday;
systat.todayzlog.fback:=fbacktoday;
systat.todayzlog.criterr:=criterr;
systat.todayzlog.uploads:=uptoday;
systat.todayzlog.downloads:=dntoday;
systat.todayzlog.uk:=newuk;
systat.todayzlog.dk:=newdk;
{**} systat.postcredits:=0;
{**} systat.rebootforevent:=TRUE;
{**} systat.watchdogdoor:=TRUE;
for j:=1 to 200 do res[j]:=0;
end;
seek(systatf,0); write(systatf,systat);
star('Done.');
writeln;
ttl('Generating "MODEM.DAT" *from* "STATUS.DAT"');
assign(modemrf,systat.gfilepath+'modem.dat');
rewrite(modemrf);
with systat1 do begin
modemr.waitbaud:=maxbaud;
modemr.comport:=comport;
modemr.init:=init;
modemr.answer:=answer;
modemr.hangup:=hangup;
modemr.offhook:=offhook;
modemr.nocallinittime:=nocallinittime;
modemr.arq9600rate:=arq9600rate;
modemr.noforcerate:=noforcerate;
modemr.nocarrier:=nocarrier;
modemr.nodialtone:=nodialtone;
modemr.busy:=busy;
for i:=1 to 2 do
for j:=0 to 4 do modemr.resultcode[i][j]:=resultcode[i][j];
modemr.ctschecking:=TRUE;
modemr.dsrchecking:=TRUE;
modemr.usexonxoff:=FALSE;
modemr.hardwired:=FALSE;
end;
write(modemrf,modemr);
close(modemrf);
star('Done.');
writeln;
ttl('Generating "STRING.DAT" *from* "STATUS.DAT"');
assign(fstringf,systat.gfilepath+'string.dat');
rewrite(fstringf);
with systat1 do begin
fstring.ansiq:=ansiq;
for j:=1 to 2 do fstring.note[j]:=note[j];
fstring.lprompt:=lprompt;
fstring.echoc:=echoc;
fstring.sysopin:=sysopin;
fstring.sysopout:=sysopout;
fstring.engage:=engage;
fstring.endchat:=endchat;
fstring.wait:=wait;
fstring.pause:=pause;
fstring.entermsg1:=msg1;
fstring.entermsg2:=msg2;
fstring.newscan1:=new1;
fstring.newscan2:=new2;
fstring.scanmessage:=read;
fstring.automsgt:=auto1;
fstring.autom:=autom;
fstring.shelldos1:=#3#5+'>> '+systat.sysopname+' has Shelled to dos, please wait ...';
fstring.shelldos2:=#3#5+'>> Thank you for waiting';
fstring.chatcall1:=#3#0+'Paging '+systat.sysopname+' for chat, please wait.....';
fstring.chatcall2:=#3#7+' >>'+#3#5+'<'+#3#8+'*'+#3#5+'>'+#3#7+'<<';
fstring.guestline:='Enter "GUEST" as your user name to be a guest user on the system.';
fstring.namenotfound:=#3#5+'That name is'+#3#8+' NOT'+#3#5+' found in the user list.';
fstring.bulletinline:=#3#4+'Enter Bulletin Selection (XX,?,Q=Quit) : ';
fstring.thanxvote:=#3#3+'Thanks for taking the time to vote!';
fstring.listline:='List files - P to Pause';
fstring.newline:='Search for new files -';
fstring.searchline:='Search all directories for a file mask -';
fstring.findline1:='Search descriptions and filenames for keyword -';
fstring.findline2:='Enter the string to search for:';
fstring.downloadline:='Download - You have @P file points.';
fstring.uploadline:='Upload - @Kk free on this drive';
fstring.viewline:='View archive interior files -@MP to Pause, N for Next file';
fstring.nofilepts:=#3#8+'Access denied: '+#3#5+'Insufficient file points to download.';
fstring.unbalance:=#3#8+'Access denied: '+#3#5+'Your upload/download ratio is out of balance:';
fstring.pninfo:='P to Pause, N for next directory';
fstring.gfnline1:='[Enter]=All files';
fstring.gfnline2:=#3#4+'File mask: ';
fstring.batchadd:='File added to batch queue.';
end;
write(fstringf,fstring);
close(fstringf);
star('Done.');
writeln;
close(systatf);
close(systatf1);
rename(systatf1,'status.old');
rename(systatf,'status.dat');
writeln;
end;
end;
2:begin
ttl('PATCHING "USER.LST" - No conversion necessary');
chdir(copy(gp,1,length(gp)-1));
ffile('user.lst');
if not found then star('USER.LST not found.')
else begin
assign(uf0,'user.old'); rewrite(uf0); close(uf0); erase(uf0);
assign(uf0,'user.lst'); rename(uf0,'user.old'); reset(uf0);
assign(uf1,'user.old'); reset(uf1);
assign(uf,'user.lst'); rewrite(uf);
for i:=0 to filesize(uf0)-1 do begin
seek(uf0,i); read(uf0,user0);
seek(uf1,i); read(uf1,user1);
star(' (record #'+cstr(i)+' of '+cstr(filesize(uf0)-1)+')'); gotoxy(1,wherey-1);
user:=user0;
user.ttimeon:=round(user1.ttimeon);
user.uk:=round(user1.uk);
user.dk:=round(user1.dk);
user.credit:=round(user1.credit);
user.chatauto:=FALSE;
user.chatseperate:=FALSE;
seek(uf,i); write(uf,user);
end;
close(uf0);
close(uf);
writeln;
end;
chdir(sp);
end;
3:begin
ttl('Converting "BOARDS.DAT');
chdir(copy(gp,1,length(gp)-1));
ffile('boards.dat');
if (not found) then star('BOARDS.DAT not found.')
else begin
assign(bf1,'boards.old'); rewrite(bf1); close(bf1); erase(bf1);
assign(bf1,'boards.tcp'); rewrite(bf1); close(bf1); erase(bf1);
assign(bf1,'boards.dat'); reset(bf1);
assign(bf,'boards.tcp'); rewrite(bf);
for i:=0 to filesize(bf1)-1 do begin
seek(bf1,i); read(bf1,brd1);
star(' (record #'+cstr(i)+' of '+cstr(filesize(bf1)-1)+')'); gotoxy(1,wherey-1);
with brd1 do begin
brd.name:=name;
brd.filename:=filename;
brd.msgpath:=msgpath;
brd.acs:='';
if (sl<>0) then brd.acs:=brd.acs+'s'+cstr(sl);
if (ar in ['A'..'Z']) then brd.acs:=brd.acs+'f'+ar;
brd.postacs:='';
if (postsl<>0) then brd.postacs:=brd.postacs+'s'+cstr(postsl);
brd.mciacs:='';
brd.maxmsgs:=maxmsgs;
if (anonymous=yes1) then brd.anonymous:=yes else
if (anonymous=no1) then brd.anonymous:=no else
if (anonymous=forced1) then brd.anonymous:=forced else
if (anonymous=dearabby1) then brd.anonymous:=dearabby;
brd.password:=password;
brd.mbstat:=[];
brd.permindx:=i;
brd.mbdepth:=0;
for j:=1 to 4 do brd.res[j]:=0;
end;
seek(bf,i); write(bf,brd);
end;
close(bf1);
close(bf);
rename(bf1,'boards.old');
rename(bf,'boards.dat');
writeln;
end;
chdir(sp);
end;
5:begin
ttl('Converting "GFILES.DAT');
chdir(copy(gp,1,length(gp)-1));
ffile('gfiles.dat');
if (not found) then star('GFILES.DAT not found.')
else begin
assign(gfilef1,'gfiles.old'); rewrite(gfilef1); close(gfilef1); erase(gfilef1);
assign(gfilef1,'gfiles.tcp'); rewrite(gfilef1); close(gfilef1); erase(gfilef1);
assign(gfilef1,'gfiles.dat'); reset(gfilef1);
assign(gfilef,'gfiles.tcp'); rewrite(gfilef);
for i:=0 to filesize(gfilef1)-1 do begin
seek(gfilef1,i); read(gfilef1,gfile1);
star(' (record #'+cstr(i)+' of '+cstr(filesize(gfilef1)-1)+')'); gotoxy(1,wherey-1);
if (i=0) then gfile.gdaten:=gfile1.num
else
with gfile do begin
title:=gfile1.title;
filen:=gfile1.filen;
gdate:=gfile1.gdate;
gdaten:=gfile1.gdaten;
acs:='';
if (gfile1.num>0) then acs:=acs+'s'+cstr(gfile1.num);
if (gfile1.ar in ['A'..'Z']) then acs:=acs+'f'+gfile1.ar;
if (filen=#1#0#0#0#0#0) then ulacs:='%' else ulacs:='';
tbstat:=[];
permindx:=i;
tbdepth:=0;
for j:=1 to 4 do res[j]:=0;
end;
seek(gfilef,i); write(gfilef,gfile);
end;
close(gfilef1);
close(gfilef);
rename(gfilef1,'gfiles.old');
rename(gfilef,'gfiles.dat');
writeln;
end;
chdir(sp);
end;
6:begin
ttl('Converting "PROTOCOL.DAT');
chdir(copy(gp,1,length(gp)-1));
ffile('protocol.dat');
if (not found) then star('PROTOCOL.DAT not found.')
else begin
assign(xp1,'protocol.old'); rewrite(xp1); close(xp1); erase(xp1);
assign(xp1,'protocol.tcp'); rewrite(xp1); close(xp1); erase(xp1);
assign(xp1,'protocol.dat'); reset(xp1);
assign(xp,'protocol.tcp'); rewrite(xp);
for i:=0 to filesize(xp1)-1 do begin
seek(xp1,i); read(xp1,xpr1);
star(' (record #'+cstr(i)+' of '+cstr(filesize(xp1)-1)+')'); gotoxy(1,wherey-1);
with xpr1 do begin
xpr.xbstat:=[];
if (active) then xpr.xbstat:=xpr.xbstat+[xbactive];
if (isbatch) then xpr.xbstat:=xpr.xbstat+[xbisbatch];
if (isresume) then xpr.xbstat:=xpr.xbstat+[xbisresume];
if (xferokcode) then xpr.xbstat:=xpr.xbstat+[xbxferokcode];
xpr.ckeys:=ckeys;
xpr.descr:=descr;
xpr.acs:='';
if (sl>0) then xpr.acs:=xpr.acs+'s'+cstr(sl);
if (dsl>0) then xpr.acs:=xpr.acs+'d'+cstr(dsl);
if (ar in ['A'..'Z']) then xpr.acs:=xpr.acs+'f'+ar;
(* if ((minbaud<>300) or (maxbaud<>38400)) then begin
if (minbaud<>300) then xpr.acs:=xpr.acs+'b'+cstr(minbaud div 100);
if (maxbaud<>38400) then xpr.acs:=xpr.acs+'!b'+cstr(maxbaud div 100);
end;*)
xpr.templog:=templog;
xpr.uloadlog:=uloadlog;
xpr.dloadlog:=dloadlog;
(* MUST PUT DSZ PARAMS IN HERE ..... vvv *)
if (ulcmd='XMODEM') then xpr.ulcmd:='dsz port %P speed %B rx %F' else
if (ulcmd='XMODEM-CRC') then xpr.ulcmd:='dsz port %P speed %B rc %F' else
if (ulcmd='YMODEM') then begin
if (isbatch) then
xpr.ulcmd:='dsz port %P speed %B rb -k'
else
xpr.ulcmd:='dsz port %P speed %B rb -k %F';
end else
xpr.ulcmd:=ulcmd;
if (dlcmd='XMODEM') then xpr.dlcmd:='dsz port %P speed %B sx %F' else
if (dlcmd='XMODEM-CRC') then xpr.dlcmd:='dsz port %P speed %B sx %F' else
if (dlcmd='YMODEM') then begin
if (isbatch) then
xpr.dlcmd:='dsz port %P speed %B sb @%L'
else
xpr.dlcmd:='dsz port %P speed %B sb %F';
end else
xpr.dlcmd:=dlcmd;
for j:=1 to 6 do begin
xpr.ulcode[j]:=ulcode[j];
xpr.dlcode[j]:=dlcode[j];
end;
xpr.envcmd:=envcmd;
xpr.dlflist:=dlflist;
xpr.maxchrs:=maxchrs;
xpr.logpf:=logpf;
xpr.logps:=logps;
xpr.permindx:=i;
for j:=1 to 11 do xpr.res[j]:=0;
end;
seek(xp,i); write(xp,xpr);
end;
close(xp1);
close(xp);
rename(xp1,'protocol.old');
rename(xp,'protocol.dat');
writeln;
end;
chdir(sp);
end;
8:begin
ttl('Converting "UPLOADS.DAT');
chdir(copy(gp,1,length(gp)-1));
ffile('uploads.dat');
if (not found) then star('UPLOADS.DAT not found.')
else begin
assign(ulf1,'uploads.old'); rewrite(ulf1); close(ulf1); erase(ulf1);
assign(ulf1,'uploads.tcp'); rewrite(ulf1); close(ulf1); erase(ulf1);
assign(ulf1,'uploads.dat'); reset(ulf1);
assign(ulf,'uploads.tcp'); rewrite(ulf);
for i:=0 to filesize(ulf1)-1 do begin
seek(ulf1,i); read(ulf1,ubrd1);
star(' (record #'+cstr(i)+' of '+cstr(filesize(ulf1)-1)+')'); gotoxy(1,wherey-1);
with ubrd1 do begin
ubrd.name:=name;
ubrd.filename:=filename;
ubrd.dlpath:=dlpath;
ubrd.ulpath:=dlpath;
ubrd.maxfiles:=maxfiles;
if (ubrd.maxfiles>2000) then ubrd.maxfiles:=2000;
ubrd.password:=password;
ubrd.arctype:=arctype;
ubrd.cmttype:=cmttype;
ubrd.fbdepth:=0;
ubrd.fbstat:=[];
if (noratio) then ubrd.fbstat:=ubrd.fbstat+[fbnoratio];
if (unhidden) then ubrd.fbstat:=ubrd.fbstat+[fbunhidden];
ubrd.acs:='';
if (sl>0) then ubrd.acs:=ubrd.acs+'s'+cstr(sl);
if (dsl>0) then ubrd.acs:=ubrd.acs+'d'+cstr(dsl);
if (ar in ['A'..'Z']) then ubrd.acs:=ubrd.acs+'f'+ar;
if (agereq>1) then ubrd.acs:=ubrd.acs+'a'+cstr(agereq);
ubrd.ulacs:='';
ubrd.nameacs:='';
if (namesl>0) then
ubrd.nameacs:=ubrd.nameacs+'s'+cstr(namesl);
ubrd.permindx:=i;
for j:=1 to 6 do ubrd.res[j]:=0;
end;
seek(ulf,i); write(ulf,ubrd);
end;
close(ulf1);
close(ulf);
rename(ulf1,'uploads.old');
rename(ulf,'uploads.dat');
writeln;
end;
chdir(sp);
end;
12:begin
ttl('Converting "*.BRD" message base info files');
chdir(copy(gp,1,length(gp)-1));
ffile('*.brd');
if not found then star('No *.BRD files present.')
else begin
repeat
s:=dirinfo.name;
assign(mbasef1,copy(s,1,length(s)-3)+'old'); rewrite(mbasef1);
close(mbasef1); erase(mbasef1);
assign(mbasef1,copy(s,1,length(s)-3)+'tcp'); rewrite(mbasef1);
close(mbasef1); erase(mbasef1);
assign(mbasef1,s); reset(mbasef1);
assign(mbasef,copy(s,1,length(s)-3)+'tcp'); rewrite(mbasef);
star('Converting "'+s+'" ('+cstr(filesize(mbasef1)-1)+' messages)');
for i:=0 to filesize(mbasef1)-1 do begin
seek(mbasef1,i); read(mbasef1,mbase1);
with mbase1 do begin
mbase.title:=title;
if (messagestat=validated1) then mbase.messagestat:=[validated];
if (messagestat=unvalidated1) then mbase.messagestat:=[unvalidated];
if (messagestat=deleted1) then mbase.messagestat:=[deleted];
mbase.message.ltr:=message.ltr;
mbase.message.number:=message.number;
mbase.message.ext:=message.ext;
mbase.owner:=owner;
mbase.date:=mbase1.date;
mbase.nacc:=0;
end;
write(mbasef,mbase);
end;
close(mbasef);
close(mbasef1);
rename(mbasef,copy(s,1,length(s)-3)+'obr');
nfile;
until (not found);
ffile('*.obr');
while (found) do begin
s:=dirinfo.name;
assign(mbasef1,copy(s,1,length(s)-3)+'brd');
rename(mbasef1,copy(s,1,length(s)-3)+'old');
assign(mbasef,s); rename(mbasef,copy(s,1,length(s)-3)+'brd');
nfile;
end;
end;
chdir(sp);
end;
13:begin
ttl('Converting "*.MNU" menu files');
chdir(copy(mp,1,length(mp)-1));
ffile('*.mnu');
if not found then star('No *.MNU files present.')
else begin
repeat
{ Converts MNU --> TCP, and only upon successful conversion of
ALL MNU files does "CO" rename all MNU --> OLD,
and TCP --> MNU }
s:=dirinfo.name;
assign(mf1,copy(s,1,length(s)-3)+'OLD'); rewrite(mf1); close(mf1);
erase(mf1);
assign(mf1,copy(s,1,length(s)-3)+'TCP'); rewrite(mf1); close(mf1);
erase(mf1);
if (ioresult<>0) then star('Error renaming "'+s+'" - Nothing done.')
else begin
assign(mf1,s); {$I-} reset(mf1); {$I+}
assign(mf,copy(s,1,length(s)-3)+'TCP'); {$I-} rewrite(mf); {$I+}
star('Converting "'+s+'"');
for i:=1 to 13 do readln(mf1,menuline[i]);
writeln(mf,menuline[1]);
writeln(mf,'');
writeln(mf,'');
writeln(mf,menuline[2]);
writeln(mf,menuline[3]);
writeln(mf,menuline[4]);
b1:=(pos('D',menuline[13])<>0);
s1:='';
if (value(menuline[5])>0) then
if (b1) then s1:=s1+'d'+menuline[5]
else s1:=s1+'s'+menuline[5];
if (menuline[6][1] in ['A'..'Z']) then s1:=s1+'f'+menuline[6][1];
writeln(mf,s1);
writeln(mf,menuline[7]);
writeln(mf,menuline[8]);
s1:='0';
if (pos('H',menuline[13])<>0) then s1:='2';
writeln(mf,s1);
writeln(mf,menuline[9]);
writeln(mf,menuline[10]);
writeln(mf,menuline[11]);
writeln(mf,menuline[12]);
s1:=menuline[13];
if (pos('D',s1)<>0) then delete(s1,pos('D',s1),1);
if (pos('H',s1)<>0) then delete(s1,pos('H',s1),1);
writeln(mf,s1);
repeat
nocopy:=FALSE;
for i:=1 to 8 do readln(mf1,menuline[i]);
if (not nocopy) then begin
writeln(mf,menuline[1]);
writeln(mf,menuline[2]);
writeln(mf,menuline[3]);
b1:=(pos('D',menuline[8])<>0);
b2:=(pos('C',menuline[8])<>0);
s1:='';
if (value(menuline[4])>0) then
if (b1) then s1:=s1+'d'+menuline[4]
else s1:=s1+'s'+menuline[4];
if ((b2) and (value(menuline[4])>0) and
(menuline[5][1] in ['A'..'Z'])) then s1:=s1+'|';
if (menuline[5][1] in ['A'..'Z']) then s1:=s1+'f'+menuline[5][1];
writeln(mf,s1);
writeln(mf,menuline[6]);
writeln(mf,menuline[7]);
s1:=menuline[8];
if (pos('C',s1)<>0) then delete(s1,pos('C',s1),1);
if (pos('D',s1)<>0) then delete(s1,pos('D',s1),1);
if (pos('H',s1)<>0) then delete(s1,pos('H',s1),1)
else s1:=s1+'U';
writeln(mf,s1);
end;
until (eof(mf1));
close(mf);
close(mf1);
end;
nfile;
until (not found);
ffile('*.TCP');
repeat
s:=dirinfo.name;
assign(mf1,copy(s,1,length(s)-3)+'MNU');
rename(mf1,copy(s,1,length(s)-3)+'OLD');
assign(mf,s);
rename(mf,copy(s,1,length(s)-3)+'MNU');
nfile;
until (not found);
end;
chdir(sp);
end;
end;
end;
procedure convert(xx:integer);
var s:astr;
i,j,k:integer;
c:char;
begin
case xx of
0 :c:='S';
1..9 :c:=chr(xx+48);
10..20:c:=chr(xx+55);
end;
if (needc(c)) then
if (back) then bconvert(xx) else fconvert(xx);
end;
begin
if (standard_conversion) then ver:=s_ver;
infield_out_fgrd:=15;
infield_out_bkgd:=1;
infield_inp_fgrd:=0;
infield_inp_bkgd:=7;
getdir(0,sp);
aw:=FALSE;
didit:=FALSE;
if paramcount>0 then if allcaps(paramstr(1))='C' then aw:=TRUE;
savx:=wherex; savy:=wherey;
setwindow(wind,1,1,80,25,7,0,0);
clrscr;
textbackground(1); textcolor(15); clreol;
write(' Telegard Conversion for '+ver1+' <10><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+ver);
textbackground(0);
window(1,2,80,25); clrscr;
tc(14);
writeln;
writeln('This program is provided to add/modify/create files used by Telegard to');
writeln('make it 100% functional under the '+ver+' environment. This file MUST');
writeln('be ran in the directory in which STATUS.DAT is found, and STATUS.DAT MUST');
writeln('be in '+ver1+' format!!! If STATUS.DAT is not in the current directory,');
writeln('or if you have already ran this program (STATUS.DAT has already been');
writeln('converted), this program will abort.');
writeln;
tc(9); write('Hit any key to continue (<ESC> to abort NOW) : ');
repeat until keypressed;
c:=readkey;
if (c=#27) then ee('ABORTED CONVERSION');
repeat
clrscr;
fvers;
if (not aw) then begin
writeln;
star('WARNING! This conversion program needs APPROXIMATELY');
star(cstrl(needs)+' bytes free on your main BBS drive!!!!!!!!');
writeln;
star('You currently have '+cstrl(freek(0)*1024)+' bytes left on the current drive.');
writeln;
star('If you DO NOT have enough space left, your drive will probably');
star('explode, and your house will burn to the ground. If you are');
star('skeptical of this, feel free to call Garfield, SysOp of Electric');
star('Eye ][ BBS (313/776-8928), who can tell you how bad HIS messed up');
star('when he converted from 1.6d3 --> 1.6e1 with only 500k!');
writeln;
if (not l_pynq('Proceed? ')) then ee('Aborted conversion');
end;
clrscr;
writeln;
if aw then begin
for i:=0 to 13 do begin
if (i>=1) and (i<=9) then c:=chr(i+48) else
if (i=0) then c:='S' else
if (i>=10) then c:=chr(i+55);
if needc(c) then begin
tc(9); write('['+cstr(i)+'] ');
if i<10 then write(' ');
tc(11);
case i of
0:write('(S)tatus.dat');
1:write('names.lst');
2:write('user.lst');
3:write('boards.dat');
4:write('email.dat');
5:write('gfiles.dat');
6:write('protocol.dat');
7:write('shortmsg.dat');
8:write('uploads.dat');
9:write('voting.dat');
10:write('zlog.dat');
11:write(gp+'*.dir');
12:write(gp+'*.brd');
13:write(mp+'*.mnu');
end;
writeln;
end;
end;
writeln;
tc(14); write('Enter # to convert, [A]ll or [Q]uit :');
tc(9); readln(a); a:=allcaps(a);
j:=value(a);
end else
a:='A';
if (j=0) then
if (copy(a,1,1)='S') then j:=0 else j:=-1;
if (copy(a,1,1)<>'Q') or ((j>=0) and (j<=13)) then begin
writeln;
if aw then begin
tc(14); write('[1]Convert to '+ver+' - [2]Convert back to '+ver1+' : ');
tc(9); readln(b); b:=allcaps(b);
h:=value(b);
end else
h:=1;
if (h in [1,2]) then begin
clrscr; tc(15);
back:=FALSE;
if h=2 then back:=TRUE;
if back then begin
tc(31);
writeln('Convert '+ver+' <10><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+ver1);
end else
writeln('Convert '+ver1+' <10><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+ver);
writeln;
tc(4); write('WARNING: ');
tc(12);
if back then writeln('If files are not in version '+ver+' format,') else
writeln('If files are NOT in version '+ver1+' format,');
writeln('the data will be COMPLETELY LOST *FOREVER*!!');
writeln;
writeln;
tc(14); writeln('ARE YOU ABSOLUTELY SURE?');
writeln('(Enter "YES" in ALL CAPS, without quotes, if you are...)');
write(':');
readln(b);
if b='YES' then begin
clrscr;
if copy(a,1,1)<>'A' then convert(j)
else begin
for i:=0 to 13 do convert(i);
{ ttl('Moving new files into their directories');
smovefile('protocol.dat',systat.gfilepath);
smovefile('sysfunc.ans',systat.afilepath);}
end;
didit:=TRUE;
end;
end;
end;
if (not aw) then a:='Q';
until copy(a,1,1)='Q';
writeln;
star('Press any key...'); c:=readkey;
clrscr;
removewindow(wind);
if didit then begin
setwindow(wind,20,11,59,17,9,1,1);
clrscr; tc(15);
gotoxy(4,3);
write('Thank you for choosing Telegard!');
CursorOff; delay(1500); CursorOn;
removewindow(wind);
end;
gotoxy(savx,savy);
chdir(sp);
end.