Updated.
authorRyan C. Gordon <icculus@icculus.org>
Sun, 19 Nov 2000 10:49:44 +0000
changeset 6 06a072e94a0b
parent 5 d35c0fc0d86e
child 7 9ba93c133b1b
Updated.
CHANGELOG
Makefile
cbbs.pas
common.pas
conv17a.pas
conv17a9.pas
conv18a.pas
file0.pas
file11.pas
init.pas
initp.pas
rec25.pas
sysop9.pas
t2t.pas
tmpcom.pas
wfcmenu.pas
--- a/CHANGELOG	Sun Nov 19 10:49:22 2000 +0000
+++ b/CHANGELOG	Sun Nov 19 10:49:44 2000 +0000
@@ -8,6 +8,24 @@
       the RTL changes to 1.0.2 ...
     * Updated Makefile to be more sane. Compiles just programs (not units),
       doesn't smartlink on debug builds, etc...
+    * Success in getting DOS->Unix path conversion in the RTL. Submitting
+      patch to FreePascal maintainers...
+    * Patches to init.pas to remove DOSification.
+    * Fixed (hah) Y2K bugs in multiple copies of daynum().
+    * Initial reaction from FreePascal maintainers is not good; started
+      converting DOSisms manually in the Telegard codebase...
+    * Why can't I get GDB to recognize debug symbols in most of my code? Grr.
+    * Removed remaining stubs from init.pas...this required hacking some
+      data structures...I'm not sure how this worked in the DOS version in this
+      state, but I'm pretty certain I've just destroyed compatibility. Oh well.
+      If the Y2K bug I found is any indication, no one's using the DOS version
+      anymore to be upset about this.
+    * Fixed init.pas bug in make_paths()...last dir (SWAP) was not created.
+    * No longer prints a caps() version of path in initp.pas's show_initfile().
+    * Added NormVideo() call to end of init.pas and bbs.pas...
+    * What the hell is "Project Coyote?" This is so clearly an ancient revision
+      of the source, that was probably half-hacked when I got it.
+    * More stubs, more filename lowercasing.
 
 2000-11-17  Ryan C. Gordon   <icculus@lokigames.com>
 
--- a/Makefile	Sun Nov 19 10:49:22 2000 +0000
+++ b/Makefile	Sun Nov 19 10:49:44 2000 +0000
@@ -14,7 +14,7 @@
 debug=true
 
 # want to see more verbose compiles? Set this to "true".
-verbose=true
+verbose=false
 
 # You probably don't need to touch this one. This is the location of
 #  your copy of PPC386, if it's not in the path.
@@ -24,22 +24,6 @@
 #---------------------------------------------------------------------------
 # don't touch anything below this line.
 
-# This are the names of the produced binaries.
-MAINEXE=bbs
-MINITERMEXE=miniterm
-INITEXE=init
-TPAGEEXE=tpage
-IFLEXE=ifl
-FINDITEXE=findit
-T2TEXE=t2t
-OBLITEXE=oblit
-MTESTEXE=mtest
-BBEXE=bb
-CBBSEXE=cbbs
-MABSEXE=mabs
-COCONFIGEXE=coconfig
-SPDATEEXE=spdate
-
 ifeq ($(strip $(verbose)),true)
     PPC386FLAGS += -vwnh
 endif
@@ -47,11 +31,11 @@
 ifeq ($(strip $(debug)),true)
     BUILDDIR := $(cpu)/Debug
     PPC386FLAGS += -g    # include debug symbols.
-    PPC386FLAGS += -gc   # generate checks for pointers.
-    PPC386FLAGS += -Ct   # generate stack-checking code.
-    PPC386FLAGS += -Cr   # generate range-checking code.
-    PPC386FLAGS += -Co   # generate overflow-checking code.
-    PPC386FLAGS += -Ci   # generate I/O-checking code.
+    #PPC386FLAGS += -gc   # generate checks for pointers.
+    #PPC386FLAGS += -Ct   # generate stack-checking code.
+    #PPC386FLAGS += -Cr   # generate range-checking code.
+    #PPC386FLAGS += -Co   # generate overflow-checking code.
+    #PPC386FLAGS += -Ci   # generate I/O-checking code.
 else
     BUILDDIR := $(cpu)/Release
     PPC386FLAGS += -Xs   # strip the binary.
@@ -73,7 +57,7 @@
     endif
 endif
 
-# Borland TP7.0 compatibility flag.
+# Rebuild all units needed.
 PPC386FLAGS += -B
 
 # Borland TP7.0 compatibility flag.
@@ -86,10 +70,10 @@
 #PPC386FLAGS += -Sm
 
 # Assembly statements are Intel-like (instead of AT&T-like).
-PPC386FLAGS += -Rintel
+#PPC386FLAGS += -Rintel
 
 # Output target Linux.  !!! FIXME: Want win32 compiles?
-PPC386FLAGS += -TLINUX
+#PPC386FLAGS += -TLINUX
 
 # Pipe output to assembler, rather than to temp file. This is a little faster.
 #PPC386FLAGS += -P
@@ -97,6 +81,22 @@
 # Write bins to this directory...
 PPC386FLAGS += -FE$(BUILDDIR)
 
+# This are the names of the produced binaries.
+MAINEXE=$(BUILDDIR)/bbs
+MINITERMEXE=$(BUILDDIR)/miniterm
+INITEXE=$(BUILDDIR)/init
+TPAGEEXE=$(BUILDDIR)/tpage
+IFLEXE=$(BUILDDIR)/ifl
+FINDITEXE=$(BUILDDIR)/findit
+T2TEXE=$(BUILDDIR)/t2t
+OBLITEXE=$(BUILDDIR)/oblit
+MTESTEXE=$(BUILDDIR)/mtest
+BBEXE=$(BUILDDIR)/bb
+CBBSEXE=$(BUILDDIR)/cbbs
+MABSEXE=$(BUILDDIR)/mabs
+COCONFIGEXE=$(BUILDDIR)/coconfig
+SPDATEEXE=$(BUILDDIR)/spdate
+
 #---------------------------------------------------------------------------
 # Build rules...don't touch this, either.
 
@@ -108,49 +108,49 @@
 	$(PPC386) $(PPC386FLAGS) $<
 
 all: $(BUILDDIR) $(MAINEXE) $(MINITERMEXE) $(INITEXE) $(TPAGEEXE) $(IFLEXE) \
-     $(FINDITEXE) $(T2TEXE) $(OBLITEXE) $(MTESTEXE) $(BBEXE) $(CBBSEXE) \
-     $(MABSEXE) $(COCONFIGEXE) $(SPDATEEXE)
+     $(FINDITEXE) $(OBLITEXE) $(MTESTEXE) $(BBEXE) $(CBBSEXE) \
+     $(MABSEXE) $(COCONFIGEXE) $(SPDATEEXE) $(T2TEXE)
 
-$(MAINEXE) : $(BUILDDIR) $(OBJS) bbs.pas
+$(MAINEXE) : $(BUILDDIR) bbs.pas
 	$(PPC386) $(PPC386FLAGS) bbs.pas
 
-$(MINITERMEXE) : $(BUILDDIR) $(OBJS) miniterm.pas
+$(MINITERMEXE) : $(BUILDDIR) miniterm.pas
 	$(PPC386) $(PPC386FLAGS) miniterm.pas
 
-$(INITEXE) : $(BUILDDIR) $(OBJS) init.pas
+$(INITEXE) : $(BUILDDIR) init.pas
 	$(PPC386) $(PPC386FLAGS) init.pas
 
-$(TPAGEEXE) : $(BUILDDIR) $(OBJS) tpage.pas
+$(TPAGEEXE) : $(BUILDDIR) tpage.pas
 	$(PPC386) $(PPC386FLAGS) tpage.pas
 
-$(IFLEXE) : $(BUILDDIR) $(OBJS) ifl.pas
+$(IFLEXE) : $(BUILDDIR) ifl.pas
 	$(PPC386) $(PPC386FLAGS) ifl.pas
 
-$(FINDITEXE) : $(BUILDDIR) $(OBJS) findit.pas
+$(FINDITEXE) : $(BUILDDIR) findit.pas
 	$(PPC386) $(PPC386FLAGS) findit.pas
 
-$(T2TEXE) : $(BUILDDIR) $(OBJS) t2t.pas
+$(T2TEXE) : $(BUILDDIR) t2t.pas
 	$(PPC386) $(PPC386FLAGS) t2t.pas
 
-$(OBLITEXE) : $(BUILDDIR) $(OBJS) t2t.pas
-	$(PPC386) $(PPC386FLAGS) t2t.pas
+$(OBLITEXE) : $(BUILDDIR) oblit.pas
+	$(PPC386) $(PPC386FLAGS) oblit.pas
 
-$(MTESTEXE) : $(BUILDDIR) $(OBJS) mtest.pas
+$(MTESTEXE) : $(BUILDDIR) mtest.pas
 	$(PPC386) $(PPC386FLAGS) mtest.pas
 
-$(BBEXE) : $(BUILDDIR) $(OBJS) bb.pas
+$(BBEXE) : $(BUILDDIR) bb.pas
 	$(PPC386) $(PPC386FLAGS) bb.pas
 
-$(CBBSEXE) : $(BUILDDIR) $(OBJS) cbbs.pas
+$(CBBSEXE) : $(BUILDDIR) cbbs.pas
 	$(PPC386) $(PPC386FLAGS) cbbs.pas
 
-$(MABSEXE) : $(BUILDDIR) $(OBJS) mabs.pas
+$(MABSEXE) : $(BUILDDIR) mabs.pas
 	$(PPC386) $(PPC386FLAGS) mabs.pas
 
-$(COCONFIGEXE) : $(BUILDDIR) $(OBJS) coconfig.pas
+$(COCONFIGEXE) : $(BUILDDIR) coconfig.pas
 	$(PPC386) $(PPC386FLAGS) coconfig.pas
 
-$(SPDATEEXE) : $(BUILDDIR) $(OBJS) spdate.pas
+$(SPDATEEXE) : $(BUILDDIR) spdate.pas
 	$(PPC386) $(PPC386FLAGS) spdate.pas
 
 $(BUILDDIR): $(cpu)
--- a/cbbs.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/cbbs.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -73,7 +73,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   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);
--- a/common.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/common.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -1205,7 +1205,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   for c:=1985 to y-1 do
     if (leapyear(c)) then inc(t,366) else inc(t,365);
   t:=t+daycount(m,y)+(d-1);
@@ -2725,15 +2732,20 @@
     i,j:integer;
     abort,next:boolean;
 begin
-  fn:=allcaps(fn); s:=fn;
-  if (copy(fn,length(fn)-3,4)='.ANS') then begin
-    if (exist(copy(fn,1,length(fn)-4)+'.AN1')) then
+  {rcg11182000 moved this allcaps into the first IF, for case-sensitive fs.}
+  {fn:=allcaps(fn); s:=fn;}
+  {if (copy(fn,length(fn)-3,4)='.ANS') then begin}
+
+  {rcg11182000 lowercased rest of extentions.}
+  s:=fn;
+  if (allcaps(copy(fn,length(fn)-3,4))='.ANS') then begin
+    if (exist(copy(fn,1,length(fn)-4)+'.an1')) then
       repeat
         i:=random(10);
         if (i=0) then
-          fn:=copy(fn,1,length(fn)-4)+'.ANS'
+          fn:=copy(fn,1,length(fn)-4)+'.ans'
         else
-          fn:=copy(fn,1,length(fn)-4)+'.AN'+cstr(i);
+          fn:=copy(fn,1,length(fn)-4)+'.an'+cstr(i);
       until (exist(fn));
 
     getdate(year,month,day,dayofweek);
@@ -2750,7 +2762,9 @@
   nofile:=TRUE;
   fn:=sqoutsp(fn);
   if (fn='') then exit;
-  if (pos('\',fn)<>0) then j:=1
+  {rcg11182000 dosism.}
+  {if (pos('\',fn)<>0) then j:=1}
+  if (pos('/',fn)<>0) then j:=1
   else begin
     j:=2;
     fsplit(fexpand(fn),ps,ns,es);
@@ -2759,7 +2773,9 @@
   end;
   for i:=1 to j do begin
     ffn:=fn;
-    if ((pos('\',fn)=0) and (pos(':',fn)=0)) then
+    {rcg11182000 dosism.}
+    {if ((pos('\',fn)=0) and (pos(':',fn)=0)) then}
+    if ((pos('/',fn)=0) and (pos(':',fn)=0)) then
       case i of
         1:ffn:=systat.afilepath+ffn;
         2:ffn:=systat.gfilepath+ffn;
--- a/conv17a.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/conv17a.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -192,7 +192,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   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);
--- a/conv17a9.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/conv17a9.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -217,7 +217,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   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);
--- a/conv18a.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/conv18a.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -202,7 +202,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   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);
--- a/file0.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/file0.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -155,10 +155,11 @@
   else
     ulffopen1:=FALSE;
   loaduboard(fileboard);
+  {rcg11182000 lowercased these ".DIR" strings...}
   if (fbdirdlpath in memuboard.fbstat) then
-    assign(ulff,memuboard.dlpath+memuboard.filename+'.DIR')
+    assign(ulff,memuboard.dlpath+memuboard.filename+'.dir')
   else
-    assign(ulff,systat.gfilepath+memuboard.filename+'.DIR');
+    assign(ulff,systat.gfilepath+memuboard.filename+'.dir');
   {$I-} reset(ulff); {$I+}
   if (ioresult<>0) then begin
     rewrite(ulff);
--- a/file11.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/file11.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -535,7 +535,8 @@
     dd(abort,next,'Archive format ....... :','"'+s+'"',(arctype<>0));
     if (fso) then begin
       nl;
-      dd(abort,next,'Filename ...... :','"'+filename+'.DIR"',TRUE);
+      {rcg11182000 lowercased this ".DIR" strings...}
+      dd(abort,next,'Filename ...... :','"'+filename+'.dir"',TRUE);
       dd(abort,next,'DL file path .. :','"'+dlpath+'"',TRUE);
     end;
   end;
--- a/init.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/init.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -109,8 +109,12 @@
 
 function exdrv(s:astr):byte;
 begin
+  {rcg11172000 always 'C' under Linux...}
+  {
   s:=fexpand(s);
   exdrv:=ord(s[1])-64;
+  }
+  exdrv := 3;
 end;
 
 function leapyear(yr:integer):boolean;
@@ -152,7 +156,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   for c:=1985 to y-1 do
     if (leapyear(c)) then inc(t,366) else inc(t,365);
   t:=t+daycount(m,y)+(d-1);
@@ -227,6 +238,9 @@
   assign(src,srcname);
   {$I-} reset(src,1); {$I+}
   if (ioresult<>0) then begin ok:=FALSE; exit; end;
+
+  {rcg11172000 why bother checking total disk space in a modern OS?}
+  {
   dfs:=freek(exdrv(destname));
   fs:=trunc(filesize(src)/1024.0)+1;
   if (fs>=dfs) then begin
@@ -234,6 +248,8 @@
     nospace:=TRUE; ok:=FALSE;
     exit;
   end else begin
+  }
+
     assign(dest,destname);
     {$I-} rewrite(dest,1); {$I+}
     if (ioresult<>0) then begin ok:=FALSE; exit; end;
@@ -244,7 +260,9 @@
     close(dest); close(src);
     dodate;
     erase(src);
-  end;
+
+  {rcg11172000 why bother checking total disk space in a modern OS?}
+  {end;}
 end;
 
 procedure ffile(fn:string);
@@ -287,7 +305,9 @@
 
 function make_path(s:string):boolean;
 begin
-  while (copy(s,length(s),1)='\') do s:=copy(s,1,length(s)-1);
+  {rcg11182000 dosism.}
+  {while (copy(s,length(s),1)='\') do s:=copy(s,1,length(s)-1);}
+  while (copy(s,length(s),1)='/') do s:=copy(s,1,length(s)-1);
   make_path:=TRUE;
   {$I-} mkdir(fexpand(s)); {$I+}
   if (ioresult<>0) then begin
@@ -300,19 +320,30 @@
 procedure make_paths;
 var s:string;
 begin
-  for i:=1 to 7 do begin
-    while copy(path[i],length(path[i]),1)='\' do
+
+  {rcg11182000 1 to 7? Swap path is excluded...}
+  {for i:=1 to 7 do begin}
+
+  for i:=1 to 8 do begin
+    {rcg11182000 dosism.}
+    {while copy(path[i],length(path[i]),1)='\' do}
+    while copy(path[i],length(path[i]),1)='/' do
       path[i]:=copy(path[i],1,length(path[i])-1);
     case i of 1:s:='GFILES'; 2:s:='MSGS'; 3:s:='MENUS'; 4:s:='TFILES';
               5:s:='AFILES'; 6:s:='TRAP'; 7:s:='TEMP'; 8:s:='SWAP'; end;
     star(s+' path ("'+fexpand(path[i])+'")');
     if (not make_path(path[i])) then halt(1);
-    path[i]:=path[i]+'\';
+    {rcg11182000 dosism.}
+    {path[i]:=path[i]+'\';}
+    path[i]:=path[i]+'/';
   end;
 (*  star('Creating EMAIL and GENERAL message paths');
   if (not make_path(path[2]+'EMAIL\')) then halt(1);
   if (not make_path(path[2]+'GENERAL\')) then halt(1);*)
   star('Creating SYSOP and MISC file paths');
+
+  {rcg11182000 dosisms.}
+  {
   if (not make_path('DLS\')) then halt(1);
   if (not make_path('DLS\SYSOP')) then halt(1);
   if (not make_path('DLS\MISC')) then halt(1);
@@ -320,6 +351,14 @@
   if (not make_path(path[7]+'1\')) then halt(1);
   if (not make_path(path[7]+'2\')) then halt(1);
   if (not make_path(path[7]+'3\')) then halt(1);
+  }
+  if (not make_path('DLS/')) then halt(1);
+  if (not make_path('DLS/SYSOP')) then halt(1);
+  if (not make_path('DLS/MISC')) then halt(1);
+  star('Creating TEMP 1, 2, and 3 file paths');
+  if (not make_path(path[7]+'1/')) then halt(1);
+  if (not make_path(path[7]+'2/')) then halt(1);
+  if (not make_path(path[7]+'3/')) then halt(1);
 end;
 
 procedure make_status_dat;
@@ -557,6 +596,7 @@
     swappath:=path[8];
     for i:=1 to 119 do res[i]:=0;
   end;
+
   assign(systatf,'status.dat');
   rewrite(systatf); write(systatf,systat); close(systatf);
 end;
@@ -810,7 +850,9 @@
   with ufr do begin
     name:='SysOp directory';
     filename:='SYSOP';
-    dlpath:=curdir+'\DLS\SYSOP\';
+    {rcg11182000 dosisms}
+    {dlpath:=curdir+'\DLS\SYSOP\';}
+    dlpath:=curdir+'/DLS/SYSOP/';
     ulpath:=dlpath;
     maxfiles:=2000;
     password:='';
@@ -828,7 +870,9 @@
   with ufr do begin
     name:='Miscellaneous';
     filename:='MISC';
-    dlpath:=curdir+'\DLS\MISC\';
+    {rcg11182000 dosisms}
+    {dlpath:=curdir+'\DLS\MISC\';}
+    dlpath:=curdir+'/DLS/MISC/';
     ulpath:=dlpath;
     maxfiles:=2000;
     password:='';
@@ -883,8 +927,6 @@
   end;
 
 begin
-{rcg11172000 this is fooked.}
-{
   with mhead do begin
     blockwrite(brdf,signature,4);
     blockwrite(brdf,msgptr,4);
@@ -895,9 +937,6 @@
     outftinfo(toi);
     blockwritestr(brdf,originsite);
   end;
-}
-
-   writeln('STUB: init.pas; savemhead1()...');
 end;
 
 procedure make_email_brd;
@@ -945,12 +984,8 @@
     for i:=1 to 6 do msgdate[i]:=pdt[i];
     msgdowk:=0;
 
-    {rcg11172000 fooked.}
-    {
     for i:=1 to 6 do lastdate[i]:=pdt[i];
     lastdowk:=0;
-    }
-    writeln('STUB: init.pas; make_email_brd()...');
 
     isreplyto:=65535;
     numreplys:=0;
@@ -961,12 +996,8 @@
   with mheader do begin
     signature:=$ABCD0123;
     msgptr:=4;
-    {rcg11172000 fooked.}
-    {
     for i:=1 to 6 do isreplyto_iddate[i]:=0;
     isreplyto_idrand:=0;
-    }
-    writeln('STUB: init.pas; make_email_brd()...');
     title:='Greetings, new Telegard SysOp!!';
     with fromi do begin
       anon:=0;
@@ -983,10 +1014,7 @@
       alias:='SysOp';
     end;
 
-    {rcg11172000 fooked.}
-    {originsite:='';}
-    writeln('STUB: init.pas; make_email_brd()...');
-
+    originsite:='';
   end;
   savemhead1(brdf,mheader);
   close(brdf);
@@ -1124,17 +1152,14 @@
   mixr.hdrptr:=0; for i:=0 to 99 do blockwrite(mixf,mixr,1);
   close(mixf);
 
-  {rcg11172000 fooked.}
-  {
   assign(tref,s+'.tre'); rewrite(tref,sizeof(mtreerec)); close(tref);
-  }
-  writeln('STUB: init.pas; make_mboard()...');
 end;
 
 procedure make_fboard(s:string);
 begin
   ulffr.blocks:=0;
-  assign(ulff,s+'.DIR');
+  {rcg11182000 lowercased this ".DIR" strings...}
+  assign(ulff,s+'.dir');
   rewrite(ulff); write(ulff,ulffr); close(ulff);
 end;
 
@@ -1182,7 +1207,8 @@
   movefile1('verbose.dat',path[1]);
   movefile1('voting.dat',path[1]);
   movefile1('zlog.dat',path[1]);
-  movefiles('*.DIR',path[1]);
+  {rcg11182000 lowercased this ".DIR" string...}
+  movefiles('*.dir',path[1]);
 
   ttl('Moving message files into MSGS directory');
   movefile1('email.brd',path[2]);
@@ -1191,21 +1217,23 @@
   movefile1('general.mix',path[2]);
   movefile1('general.tre',path[2]);
 
+  {rcg11182000 Made ANS MSG CFG and MNU lowercase...}
+
   ttl('Moving ANSI text files into AFILES directory');
-  movefiles('*.ANS',path[5]);
+  movefiles('*.ans',path[5]);
 
   ttl('Moving normal text files into AFILES directory');
-  movefiles('*.MSG',path[5]);
+  movefiles('*.msg',path[5]);
   movefile1('computer.txt',path[5]);
 
   ttl('Moving color configuration files into AFILES directory');
-  movefiles('*.CFG',path[5]);
+  movefiles('*.cfg',path[5]);
 
 (*  ttl('Moving message file into MSGS\EMAIL directory');
   movefile1('a-32767.1',path[2]+'EMAIL\');*)
 
   ttl('Moving menu files into MENUS directory');
-  movefiles('*.MNU',path[3]);
+  movefiles('*.mnu',path[3]);
 end;
 
 begin
@@ -1234,6 +1262,8 @@
   end;
 
   getdir(0,curdir);
+  {rcg11182000 dosisms.}
+  {
   path[1]:=curdir+'\GFILES\';
   path[2]:=curdir+'\MSGS\';
   path[3]:=curdir+'\MENUS\';
@@ -1242,6 +1272,15 @@
   path[6]:=curdir+'\TRAP\';
   path[7]:=curdir+'\TEMP\';
   path[8]:=curdir+'\SWAP\';
+  }
+  path[1]:=curdir+'/GFILES/';
+  path[2]:=curdir+'/MSGS/';
+  path[3]:=curdir+'/MENUS/';
+  path[4]:=curdir+'/TFILES/';
+  path[5]:=curdir+'/AFILES/';
+  path[6]:=curdir+'/TRAP/';
+  path[7]:=curdir+'/TEMP/';
+  path[8]:=curdir+'/SWAP/';
 
   textcolor(14);
   writeln;
@@ -1306,6 +1345,11 @@
 
   writeln;
   star('Telegard BBS installed and initialized successfully!');
-  star('This program, "INIT.EXE", can now be deleted.');
+  {rcg11172000 DOSism.}
+  {star('This program, "INIT.EXE", can now be deleted.');}
+  star('This program, "init", can now be deleted.');
   star('Thanks for trying Telegard!');
+
+  {rcg11182000 added NormVideo.}
+  NormVideo;
 end.
--- a/initp.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/initp.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -193,7 +193,10 @@
     gotoxy(6,11);
     if (copy(s,length(s),1)<>'!') then s:=systat.gfilepath+s
                                   else s:=copy(s,1,length(s)-1);
-    write(caps(s));
+
+    {rcg11182000 this caps call is confusing with a case-sensitive filesystem.}
+    {write(caps(s));}
+    write(s);
     textbackground(1);
     showmem;
     errs:=FALSE; npatch:=FALSE;
@@ -209,12 +212,17 @@
   procedure wmsgs(s:astr);
   var x,y:integer;
   begin
+  {rcg1118 this doesn't work without savescreen() and such in common.pas...}
+  {
     x:=wherex; y:=wherey;
     if (not openedyet) then openwmsgs;
     textbackground(1); textcolor(15);
     window(8,16,73,22);
     gotoxy(sx,sy); writeln(s); sx:=wherex; sy:=wherey;
     window(1,1,80,25); gotoxy(x,y);
+  }
+
+        writeln('STUB: initp.pas; wmsgs(''' + s + ''')...');
   end;
 
   procedure inmsgs(sh:astr; var s:astr; len:integer);
@@ -232,7 +240,9 @@
   function existdir(fn:astr):boolean;
   var srec:searchrec;
   begin
-    while (fn[length(fn)]='\') do fn:=copy(fn,1,length(fn)-1);
+    {rcg11182000 dosism.}
+    {while (fn[length(fn)]='\') do fn:=copy(fn,1,length(fn)-1);}
+    while (fn[length(fn)]='/') do fn:=copy(fn,1,length(fn)-1);
     findfirst(fexpand(sqoutsp(fn)),anyfile,srec);
     existdir:=(doserror=0) and (srec.attr and directory=directory);
   end;
@@ -276,7 +286,9 @@
             if (s=s2) or (s2='') then abend('Illegal pathname error')
             else begin
               if (s2<>'') then
-                if (copy(s2,length(s2),1)<>'\') then s2:=s2+'\';
+                {rcg11182000 dosism}
+                {if (copy(s2,length(s2),1)<>'\') then s2:=s2+'\';}
+                if (copy(s2,length(s2),1)<>'/') then s2:=s2+'/';
               if (existdir(s2)) then
                 case i of
                   1:gfilepath:=s2;  2:msgpath:=s2;
@@ -327,8 +339,12 @@
   end;
 *)
 
-  if (exist(start_dir+'\critical.err')) then begin
-    assign(filv,start_dir+'\critical.err'); erase(filv);
+  {rcg11182000 DOSism.}
+  {if (exist(start_dir+'\critical.err')) then begin      }
+  {  assign(filv,start_dir+'\critical.err'); erase(filv);}
+
+  if (exist(start_dir+'/critical.err')) then begin
+    assign(filv,start_dir+'/critical.err'); erase(filv);
     wmsgs('*** Critical error during last BBS execution! ***');
     wmsgs('[>>> Updating STATUS.DAT <<<]');
     inc(systat.todayzlog.criterr);
--- a/rec25.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/rec25.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -182,6 +182,7 @@
     mimassmail,                   { is it private, mass mail? }
     miscanned);                   { is message scanned for FidoNet? }
 
+    {rcg11182000 spliced from V20 headers...}
   msgindexrec=                         { *.MIX : Message index records }
   record
     messagenum:word;                   { message number, tonum in EMAIL.MIX }
@@ -191,6 +192,8 @@
     msgdate:cpackdatetime;             { message date/time (packed) }
     msgdowk:byte;                      { message day-of-week (0=Sun ...) }
     msgindexstat:set of msgindexstatr; { status flags }
+    lastdate:array[1..6] of byte;     { update: date/time }
+    lastdowk:byte;                    { update: day-of-week }
     isreplyto:word;                    { reply this message is to (-1=None) }
     numreplys:word;                    { number of replies to THIS message }
   end;
@@ -204,15 +207,19 @@
     alias:string[36];          { user alias }
   end;
 
+  {rcg11182000 cannibalized from the v20 type...}
   mheaderrec=                  { *.BRD : Message header records }
   record
     signature:longint;         { header signature - $FFFFFFFF }
     msgptr:longint;            { pointer to message text }
+    isreplyto_iddate:array[1..6] of byte; { isreplyto id date - for NetMail }
+    isreplyto_idrand:word;            { isreplyto id randomid }
     msglength:longint;         { length of message text }
     fromi:fromtoinfo;          { from information }
     toi:fromtoinfo;            { to information }
     title:string[60];          { title of message }
     origindate:string[19];     { Echo/Group original msg date }
+    originsite:string[60];            { site of *original* origin }
   end;
 
   zlogrec=                        { ZLOG.DAT : System log }
@@ -712,3 +719,18 @@
     res:array[1..1978] of byte;     { RESERVED }
   end;
 
+  {rcg11182000 added by me.}
+  V20_mtreerec=                       { *.TRE : Message reply-tree records }
+  record
+    messagerunning,                   { message number, running }
+    messagenum:word;                  { actual message number in *.MIX }
+    ilevel:byte;                      { indent level - for replys }
+    isreplyto,                        { reply this message is to (-1=None) }
+    numreplys:word;                   { number of replys to THIS message }
+    msgdate:array[1..6] of byte;      { message id date }
+    msgdowk:byte;                     { message day-of-week }
+  end;
+
+  mtreerec        = V20_mtreerec;           { *.TRE }
+  {rcg11182000 end adds.}
+
--- a/sysop9.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/sysop9.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -191,11 +191,12 @@
 
   procedure getdirspec(var s:string);
   begin
+    {rcg11182000 lowercased these ".DIR" strings...}
     with memuboard do
       if (fbdirdlpath in fbstat) then
-        s:=fexpand(dlpath+filename+'.DIR')
+        s:=fexpand(dlpath+filename+'.dir')
       else
-        s:=fexpand(systat.gfilepath+filename+'.DIR');
+        s:=fexpand(systat.gfilepath+filename+'.dir');
   end;
 
   procedure dlbem;
@@ -537,7 +538,8 @@
               readuboard:=-1; loaduboard(ii);
               if (fbdirdlpath in memuboard.fbstat) then s0:=memuboard.dlpath
                 else s0:=systat.gfilepath;
-              s0:=s0+memuboard.filename+'.DIR';
+              {rcg11182000 lowercased this ".DIR" string...}
+              s0:=s0+memuboard.filename+'.dir';
               nl; sprint('File base: '+#3#5+memuboard.name);
               if pynq('Delete this? ') then begin
                 sysoplog('* Deleted file base: '+memuboard.name);
--- a/t2t.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/t2t.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -143,7 +143,14 @@
   t:=0;
   m:=value(copy(dt,1,2));
   d:=value(copy(dt,4,2));
+
+  {rcg11182000 hahahaha...a Y2K bug.  :) }
   y:=value(copy(dt,7,2))+1900;
+
+  {rcg11182000 added this conditional. }
+  if (y < 1977) then  { Ugh...this is so bad. }
+    y := y + 100;
+
   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);
@@ -664,15 +671,17 @@
           end;
           seek(tag_ulf,i); write(tag_ulf,tag_ub);
 
+          {rcg11182000 lowercased this ".DIR" string...}
           with ub do
-            assign(ulff,tgpath+filename+'.DIR');
+            assign(ulff,tgpath+filename+'.dir');
 
           {$I-} reset(ulff); {$I+}
           if (ioresult=0) then begin
             seek(ulff,0); read(ulff,ulffr);
             siz:=ulffr.blocks;
             if (siz>filesize(ulff)-1) then siz:=filesize(ulff)-1;
-            assign(tag_ulff,tag_ub.dlpath+tag_ub.filename+'.DIR');
+              {rcg11182000 lowercased this ".DIR" string...}
+            assign(tag_ulff,tag_ub.dlpath+tag_ub.filename+'.dir');
             clreol;
             star('  (record #'+cstr(i)+' of '+cstr(filesize(ulf)-1)+
                  ') -- "'+ub.filename+'.dir"');
@@ -980,13 +989,15 @@
             for j:=1 to 6 do ub.res[j]:=0;
           end;
           seek(ulf,i); write(ulf,ub);
+          {rcg11182000 lowercased this ".DIR" string...}
           with tag_ub do
-            assign(tag_ulff,dlpath+filename+'.DIR');
+            assign(tag_ulff,dlpath+filename+'.dir');
 
           {$I-} reset(tag_ulff); {$I+}
           if (ioresult=0) then begin
             siz:=filesize(tag_ulff)-1;
-            assign(ulff,tgpath+tag_ub.filename+'.DIR');
+            {rcg11182000 lowercased this ".DIR" string...}
+            assign(ulff,tgpath+tag_ub.filename+'.dir');
             star('  (record #'+cstr(i)+' of '+cstr(filesize(tag_ulf)-1)+
                  ') -- "'+tag_ub.filename+'.dir"'); gotoxy(1,wherey-1);
             writeln;
--- a/tmpcom.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/tmpcom.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -360,8 +360,10 @@
     exit;
   end;
   disable_interrupts;
+}
   rx_chars:=0; rx_in:=1; rx_out:=1;
-  enable_interrupts;
+{
+enable_interrupts;
 }
 end;
 
@@ -377,8 +379,12 @@
     exit;
   end;
   disable_interrupts;
+}
+
   tx_chars:=0; tx_in:=1; tx_out:=1;
-  enable_interrupts;
+
+{
+enable_interrupts;
 }
 end;
 
--- a/wfcmenu.pas	Sun Nov 19 10:49:22 2000 +0000
+++ b/wfcmenu.pas	Sun Nov 19 10:49:44 2000 +0000
@@ -401,6 +401,7 @@
   begin
     if ((modemr.init<>'') and (answerbaud=0) and (not localioonly)) then begin
       gotoxy(1,24); tc(12); clreol; write('Initializing modem...');
+
       if (not keypressed) then begin
         c:=#0; s:=''; done:=FALSE; try:=0;
         rl:=timer;
@@ -426,7 +427,7 @@
           if (try>10) then done:=TRUE;
         until ((done) or (keypressed));
       end;
-      while (keypressed) do isc:=readkey;
+      while (keypressed) do begin isc:=readkey; writeln(ord(isc)); end;
       delay(100); com_flush_rx;
       rl1:=timer; repeat c:=ccinkey1 until (abs(timer-rl1)>0.1);