home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / vi_si_on / getlogin.pas < prev    next >
Pascal/Delphi Source File  |  1991-04-18  |  83KB  |  2,449 lines

  1. {$R-,S-,I-,D-,F+,V-,B-,N-,L+,O+ }
  2.  
  3. unit getlogin;
  4.  
  5. interface
  6.  
  7. uses crt,dos,
  8.   gentypes,configrt,modem,userret,statret,gensubs,subs1,subs2,windows,
  9.   mailret,textret,overret1,mainr1,mainr2,mainmenu;
  10.  
  11. var validpassword,allowlogin,sys2,sys3,bust_a_nut:boolean;
  12.  
  13. procedure getloginproc;
  14. procedure returnfromdoor;
  15.  
  16. implementation
  17.  
  18.  
  19. procedure smartnews;
  20. var nfile:file of newsrec;
  21.     line:integer;
  22.     ntemp:newsrec;
  23.     cnt:integer;
  24.     dt1,dt2:datetime;
  25.     show:boolean;
  26. begin
  27.   assign(nfile,'News');
  28.   reset(nfile);
  29.   if ioresult<>0 then exit;
  30.   if filesize(nfile)=0 then begin
  31.     close(nfile);
  32.     exit;
  33.   end;
  34.   cnt:=0;
  35.   while not(eof(nfile) or break or hungupon) do begin
  36.     read(nfile,ntemp);
  37.     inc(cnt);
  38.     if issysop or (ntemp.location>=0) and (ntemp.maxlevel>=urec.level) and (urec.level>=ntemp.level) then
  39.  
  40.      begin
  41.      unpacktime(ntemp.when,dt1);
  42.      unpacktime(laston,dt2);
  43.      show:=false;
  44.        if (ntemp.when>=laston) then show:=true;
  45.        if show then
  46.        begin
  47.        if ansigraphics in urec.config then begin
  48.        clearscr;
  49.        blowup(1,1,80,4);
  50.        printxy(2,2,' ViSiON Smart News Item #');
  51.        printzy(2,28,strr(cnt)+' - '+ntemp.title+' from '+ntemp.from);
  52.        writeln;
  53.        printxy(3,2,' Date:           Time:           Level:');
  54.        printzy(3,8,datestr(ntemp.when));
  55.        printzy(3,24,timestr(ntemp.when));
  56.        printzy(3,41,strr(ntemp.level)+' - '+strr(ntemp.maxlevel));
  57.        end else begin
  58.          writeln(^M'ViSiON Smart News Item #',cnt,' - ',ntemp.title,' From ',ntemp.from);
  59.          writeln('Date: ',datestr(ntemp.when),' Time: ',timestr(ntemp.when),' Levels: ',ntemp.level,' - ',ntemp.maxlevel);
  60.          end;
  61.        writeln(^M);
  62.        printtext(ntemp.location);
  63.        buflen:=0;
  64.        writestr(^P'Press '^S'['^R'Return'^S']'^P':&');
  65.        end;
  66.     end;
  67.   end;
  68.   close(nfile);
  69. end;
  70.  
  71. procedure oneliners;
  72. var ist:boolean;
  73.     ft:text;
  74.     i,kn:integer;
  75.     s:lstr;
  76.     sp:array[1..20] of lstr;
  77. begin
  78.      if not configset.useonelin then exit;
  79.      i:=0;
  80.      if not exist(configset.textfiledi+'Oneliner') then begin
  81.      assign(ft,configset.textfiledi+'Oneliner');
  82.      rewrite(ft);
  83.      textclose(ft);
  84.      end;
  85.      assign(ft,configset.textfiledi+'Oneliner');
  86.      reset(ft);
  87.      if ioresult<>0 then rewrite(ft);
  88.      while not eof(ft) do begin
  89.            readln(ft,s);
  90.            inc(i);
  91.            sp[i]:=s;
  92.      end;
  93.      ClearScr;
  94.      writehdr('     '+configset.longnam+' - One Liners     ');
  95.      if (i>0) then for kn:=1 to i do writeln(^R'"'^A+sp[kn]+^R'"') else
  96.      writeln(^U'        None Exist!');
  97.      writestr(^M^R'Add a one liner? '^P'['^S'N'^P']: *');
  98.      if not yes then begin
  99.        textclose(ft);
  100.         exit;
  101.       end;
  102.       rewrite(ft);
  103.      nochain:=true;
  104.      buflen:=75;
  105.      writestr(^M^R'Plese enter your One-Liner ('^P'Return Aborts this'^R')'^M'>*');
  106.      if input='' then begin
  107.        for kn:=1 to i do writeln(ft,sp[kn]);
  108.        textclose(ft);
  109.         exit;
  110.      end;
  111.      s:=input;
  112.      if (I<17) then begin
  113.         for kn:=1 to i do writeln(ft,sp[kn]);
  114.         writeln(ft,s);
  115.        textclose(ft);
  116.      end else begin
  117.          for kn:=2 to 17 do writeln(ft,sp[kn]);
  118.          writeln(ft,s);
  119.         textclose(ft);
  120.          end;
  121.      writeln(^M'Your One Liner has been added!');
  122. end;
  123.  
  124. procedure kcenter (c:lstr);
  125. var cnt,tp:integer;
  126.     tmp:lstr;
  127. begin
  128.     fillchar(tmp[1],80,32);
  129.     if length(c)>75 then c[0]:=chr(75-length(c));
  130.     cnt:=(67-length(c)) div 2;
  131.     for tp:=1 to cnt do write (' ');
  132.     ansicolor(urec.statcolor);
  133.     writeln(c);
  134. end;
  135.  
  136. procedure getloginproc;
  137. var isnew:boolean;
  138.  
  139.   procedure addlastcaller (n:mstr);
  140.   var qf:file of lastrec;
  141.       last,cnt:integer;
  142.       l:lastrec;
  143.   begin
  144.     if match(n,configset.sysopnam) then exit;
  145.     assign (qf,'Callers');
  146.     reset (qf);
  147.     if ioresult<>0 then rewrite (qf);
  148.     last:=filesize(qf);
  149.     if last>maxlastcallers then last:=maxlastcallers;
  150.     for cnt:=last-1 downto 0 do begin
  151.       seek (qf,cnt);
  152.       read (qf,l);
  153.       seek (qf,cnt+1);
  154.       write (qf,l)
  155.     end;
  156.     with l do begin
  157.       name:=n;
  158.       when:=now;
  159.       lastbps:=baudrate;
  160.       callnum:=round(numcallers)
  161.     end;
  162.     seek (qf,0);
  163.     write (qf,l);
  164.     close (qf)
  165.   end;
  166.  
  167.   procedure byebye (byefile:sstr);
  168.   begin
  169.     printfile (configset.textfiledi+byefile);
  170.     unum:=-1;
  171.     disconnect
  172.   end;
  173.  
  174.   procedure nicetry;
  175.   begin
  176.     byebye ('NiceTry')
  177.   end;
  178.  
  179.  
  180.  procedure whynotgetunum;
  181.  var tries,cnt:integer;
  182.       u:userrec;
  183.       zz:char;
  184.  
  185.   begin
  186.     tries:=0;
  187.     repeat
  188.       if tries>3 then nicetry else begin
  189.         chainstr:='';
  190.     writestr(^B^M'Enter Your Alias: *');
  191.                 if input='' then begin
  192.                  writeln;
  193.                  exit;
  194.                 end;
  195.                 unam:=input;
  196.                 if unam[length(unam)]='*' then WriteLn(^G^M'Nice try!')
  197.                 else Begin
  198.                 isnew:=false;
  199.                 if hungupon then unum:=-1 else
  200.                 begin
  201.                     unum:=lookupuser(unam);
  202.                     if unum=0 then begin
  203.                      writeln (^B^M'User is non-existant.');
  204.                      input:='';
  205.                      writeln;
  206.                     end;
  207.                     if unum=-1 then begin
  208.                      byebye ('Trashcan');
  209.                      exit;
  210.                     end;
  211.                     end;
  212.                 end
  213.             end
  214.          until unum<>0;
  215.         If not Match(Input,Strr(Unum)) then writeln(^M'Use ',unum,' for faster logons!');
  216.         input:='';
  217.         writeln;
  218.     end;
  219.  
  220.  
  221.  procedure whynotgetpwd;
  222.  var u:userrec;
  223.    hour:integer;
  224.    lo:byte;
  225.  
  226.    begin
  227.     seek (ufile,unum);
  228.     read (ufile,u);
  229.     ulvl:=u.level;
  230.     unam:=u.handle;
  231.     urec:=u;
  232.     readurec;
  233.         che;
  234.         if not checkpassword(u) then
  235.     begin
  236.     inc(u.hackattempts);
  237.          writeufile(u,unum);
  238.          writelog (2,12,unam+'  Password: '+input);
  239.         nicetry;
  240.     end;
  241.  
  242.      if u.level>1 then begin
  243.      writeln (^M^B^R'System 1 Password for '^P+datestr(now)+^R' is: '^S,configset.systempasswor+^R+^M);
  244.      writestr (^M^P'Press [Return]:*');
  245.      writeln;
  246.      validpassword:=true;
  247.         end else
  248.          if (u.level=-2) and (configset.syste2<>'') then begin
  249.              WriteLn(^M^B^R'[System 2] Password is: '^S,ConfigSet.Syste2,^R^M);
  250.              WriteStr(^P'Press [Return]:*');
  251.              WriteLn;
  252.          end Else
  253.              If (u.level=-3) and (configset.syste3<>'') then begin
  254.                  WriteLn(^M^B^R'[System 3] Password is: '^S,ConfigSet.Syste3,^R^M);
  255.                  WriteStr(^P'Press [Return]:*');
  256.                  WriteLn;
  257.              End Else
  258.         writeln (^B^G^M'You have not yet been authorized for this system.');
  259.         delay (300);
  260.     writeln;
  261.    end;
  262.  
  263.  
  264.     function inblacklist (n:mstr):boolean;
  265.     var f:text;
  266.         a:lstr;
  267.     begin
  268.      inblacklist:=false;
  269.      if not exist (configset.textfiledi+'Blacklst') then exit;
  270.      assign (f,configset.textfiledi+'Blacklst');
  271.      reset (f);
  272.      repeat
  273.       readln (f,a);
  274.      until (eof(f)) or (match(n,a));
  275.      if match(n,a) then inblacklist:=true else
  276.      inblacklist:=false;
  277.      textclose(f);
  278.     end;
  279.  
  280.     function validusername (m:mstr):boolean;
  281.     var n:integer;
  282.     begin
  283.       validusername:=true;
  284.       if length(m)<1 then validusername:=false;
  285.       if (m='?') or (m='#') or (m='/') or (m='*') or (m='&') or (m=':') or
  286.       match(upstring(m),'NEW') or match(upstring(m),'Q') or inblacklist (m)
  287.       then begin
  288.        if inblacklist (m) then begin
  289.         if exist (configset.textfiledi+'Blacklst.Scr') then
  290.         printfile (configset.textfiledi+'Blacklst.Scr') else
  291.         writeln (^M'There seems to be a reason you are in the blacklist - DIE ASSHOLE!'^M);
  292.         byebye ('blacklst.ans');
  293.        end;
  294.        validusername:=false;
  295.        writeln (^B'Invalid user name!');
  296.        exit;
  297.       end else begin
  298.        if (valu(m)=0) and (length(m)>0) then validusername:=true
  299.       end
  300.     end;
  301.  
  302.     Procedure Eat_Me(cnt:integer);
  303.      Begin
  304.      if (length(configset.inf[cnt]) > 0) and (not match(configset.inf[cnt],'UNUSED')) then begin
  305.        If exist(configset.textfiledi+'INFOFORM.'+strr(cnt)) then Begin
  306.          tab (^F'['^A+strr(cnt)+^F']'^S' - '^O+configset.inf[cnt],34);
  307.          case cnt of
  308.           1:Begin if configset.iman[cnt] then
  309.              tab(^S'Required',13) Else Tab(^S'Not Required',13);
  310.              If urec.infoform<0 then Write(^P' ('^R'Incomplete'^P')') Else Write (^P' ('^R'Complete'^P')');
  311.              End;
  312.           2:Begin if configset.iman[cnt] then
  313.              Tab(^S'Required',13) Else Tab(^S'Not Required',13);
  314.              If urec.infoform2<0 then Write(^P' ('^R'Incomplete'^P')') Else Write (^P' ('^R'Complete'^P')');
  315.              End;
  316.           3:Begin if configset.iman[cnt] then
  317.              Tab (^S'Required',13) Else Tab(^S'Not Required',13);
  318.              If urec.infoform3<0 then Write(^P' ('^R'Incomplete'^P')') Else Write (^P' ('^R'Complete'^P')');
  319.              End;
  320.           4:Begin if configset.iman[cnt] then
  321.              tab(^S'Required',13) Else Tab(^S'Not Required',13);
  322.              If urec.infoform4<0 then Write(^P' ('^R'Incomplete'^P')') Else Write (^P' ('^R'Complete'^P')');
  323.              End;
  324.           5:Begin if configset.iman[cnt] then
  325.              Tab(^S'Required',13) else Tab(^S'Not Required',13);
  326.              If urec.infoform5<0 then Write(^P' ('^R'Incomplete'^P')') Else Write (^P' ('^R'Complete'^P')');
  327.              End;
  328.          end;
  329.          WriteLn;
  330.         end;
  331.        end;
  332.        end;
  333.  
  334.  procedure newuser;
  335.  
  336.     function validphone:boolean;
  337.     var p:integer;
  338.         k:char;
  339.         International:Boolean;
  340.         forfon:string[255];
  341.         AC:Text;
  342.         Line:String[3];
  343.     begin
  344.       International:=False;
  345.       validphone:=false;
  346.       p:=1;
  347.       If Match('X',Input[1]) then Begin
  348.         Inc(P);
  349.         International:=True;
  350.       End;
  351.       while p<=length(input) do begin
  352.         k:=input[p];
  353.         if k in ['0'..'9']
  354.           then inc(p)
  355.           else delete (input,p,1);
  356.       end;
  357.       if length(input)<>10 then begin
  358.         writestr ('The phone number must be 10 digits long.');
  359.         exit
  360.       end;
  361.       if ((input[2] in ['2'..'9']) or (input[1] in ['0','1'])
  362.          or (input[4] in ['0','1'])) and Not International then begin
  363.            writestr ('Invalid phone number.');
  364.            exit
  365.          end;
  366.       validphone:=true;
  367.       FORFON:=Copy (input,1,3);
  368.        if exist (configset.textfiledi+'AREACODE.BBS') then begin
  369.        assign (AC,configset.textfiledi+'AREACODE.BBS');
  370.        Reset (AC);
  371.        while not eof(AC) do
  372.      Begin
  373.      ReadLn (AC,LINE);
  374.      If Match(FORFON,LINE) then Begin
  375.        Writeln (^R'Users from Area Code:'^S' ',forfon,' '^R'are not allowed on this system!');
  376.        disconnect;
  377.        end;
  378.       end;
  379.      close(AC);
  380.      end;
  381.     end;
  382.  
  383.     procedure getoption (c:configtype; txt:lstr; b:boolean);
  384.     const yn:array [false..true] of string[3]=('No','Yes');
  385.     begin
  386.       if hungupon then exit;
  387.       txt:=txt+' ['+yn[b]+'] ? *';
  388.       writestr (txt);
  389.       if length(input)<>0 then b:=yes;
  390.       if b
  391.         then urec.config:=urec.config+[c]
  392.         else urec.config:=urec.config-[c]
  393.     end;
  394.  
  395.   var oldn      :integer;
  396.       k         :char;
  397.       ockmaster :char;
  398.       tempstr   :anystr;
  399.       tries     :byte;
  400.       correct   :boolean;
  401.       ttrs      :integer;
  402.       tmp1:boolean;
  403.       gg:char;
  404.       imdone:boolean;
  405.       info:mstr;
  406.       cnt,num:integer;
  407.       empty:boolean;
  408.       shit,shit1,shit2,shit3:mstr;
  409.  
  410.       Procedure SD;
  411.     Begin
  412.       ANSiCOLOR(8);
  413.       WriteLn('█');
  414.     End;
  415.  
  416.  
  417.     Procedure showcolors;
  418.       Begin
  419.         Goxy(1,19);
  420.           WRiteLn(^R'  ╒══════════════════════════════════════════════════════════════════════════╕');
  421.           Write(^R'  │');
  422.           ansicolor(1);Write(' Color #1');
  423.           ansicolor(2);Write(' Color #2');
  424.           ansicolor(3);Write(' Color #3');
  425.           ansicolor(4);Write(' Color #4');
  426.           ansicolor(5);Write(' Color #5');
  427.           ansicolor(6);Write(' Color #6');
  428.           ansicolor(7);Write(' Color #7');
  429.           ansicolor(8);Write(' Color #8');
  430.           WriteLn(^R'  │');
  431.           Write(^R'  │');
  432.           ansicolor(9);Write(' Color #9');
  433.           ansicolor(10);Write(' Color #10');
  434.           ansicolor(11);Write(' Color #11');
  435.           ansicolor(12);Write(' Color #12');
  436.           ansicolor(13);Write(' Color #13');
  437.           ansicolor(14);Write(' Color #14');
  438.           ansicolor(15);Write(' Color #15');
  439.           WriteLn(^R'     │');
  440.           Write(^R'  ╘══════════════════════════════════════════════════════════════════════════╛');
  441.         ansireset;
  442.       End;
  443.  
  444. Procedure DoEditor;
  445. Begin
  446. WriteLn;
  447. WriteLn(^R'  ╒═══════════════════════╕   ╒════════════════════════════════════════════╕');
  448. writeln(^R'  │ '^S'Command '^P'»             '^R'│   │ '^S'ViSiON Version 0.82 New User Configuration'^R' │');
  449. writeln(^R'  ╘═══════════════════════╛   ╘════════════════════════════════════════════╛');
  450. WRiteLn(^R'  ╒════════════════════════════════════════════════════════════════════════╕');
  451. Write  (^R'  │                                                                        │');SD;
  452. Write  (^R'  │  ('^S'A'^R') '^P'Alias........:                          '^R'('^S'G'^R') '^P'IBM Grahpics..:       '^R'│');SD;
  453. Write  (^R'  │  ('^S'P'^R') '^P'Password.....:                          '^R'('^S'1'^R') '^P'Regular Color.:       '^R'│');SD;
  454. Write  (^R'  │  ('^S'N'^R') '^P'Phone Number.:                          '^R'('^S'2'^R') '^P'Prompt Color..:       '^R'│');SD;
  455. Write  (^R'  │  ('^S'F'^R') '^P'F Screen Ed..:                          '^R'('^S'3'^R') '^P'Status Color..:       '^R'│');SD;
  456. Write  (^R'  │  ('^S'S'^R') '^P'Screen Length:                          '^R'('^S'4'^R') '^P'Input Color...:       '^R'│');SD;
  457. Write  (^R'  │  ('^S'L'^R') '^P'Line Feeds...:                          '^R'('^S'5'^R') '^P'Box Color.....:       '^R'│');SD;
  458. Write  (^R'  │  ('^S'C'^R') '^P'Lower Case...:                          '^R'('^S'6'^R') '^P'Status Color 2:       '^R'│');SD;
  459. Write  (^R'  │  ('^S'E'^R') '^P'Eighty Cols..:                          '^R'('^S'7'^R') '^P'Prompt Color 2:       '^R'│');Sd;
  460. WRite  (^R'  │                                                                        │');SD;
  461. Write  (^R'  │                               ('^S'X'^R') '^P'Quits'^R'                                │');SD;
  462. Write  (^R'  ╘════════════════════════════════════════════════════════════════════════╛');SD;
  463. WriteLn  ('     ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀');
  464.         PrintXy(7,24,unam);
  465.         PrintXy(8,24,urec.password);
  466.         PrintXy(9,24,urec.phonenum);
  467.         PrintXy(10,24,yesno(fseditor in urec.config));
  468.         PrintXy(11,24,strr(urec.displaylen));
  469.         PrintXy(12,24,yesno(linefeeds in urec.config));
  470.         PrintXy(13,24,yesno(lowercase in urec.config));
  471.         PrintXy(14,24,yesno(eightycols in urec.config));
  472.         PrintXy(7,69,yesno(asciigraphics in urec.config));
  473.         PrintXy(8,69,^R+strr(urec.regularcolor));
  474.         PrintXy(9,69,^P+strr(urec.promptcolor));
  475.         PrintXy(10,69,^S+strr(urec.statcolor));
  476.         PrintXy(11,69,^U+strr(urec.inputcolor));
  477.         PrintXy(12,69,^O+strr(urec.statusboxcolor));
  478.         PrintXy(13,69,^F+strr(urec.blowboard));
  479.         Printxy(14,69,^A+strr(urec.blowinside));
  480.        Goxy(1,3);write(^R'  │ '^S'Command '^P'»');
  481.       End;
  482.  
  483.     Procedure select;
  484.       Var gg:Char;
  485.       Begin
  486.         ClearSCr;
  487.         Doeditor;
  488.         GG:=' ';
  489.         Repeat
  490.           Repeat
  491.             If hungupon Then exit;
  492.           Until charready Or hungupon;
  493.           gg:=readchar;If Length(GG)=0 Then GG:=' ';GG:=UpCase(GG);
  494.         Until (Pos(GG,'APNFSLCEG1234567X')>0) or hungupon;
  495.         If gg='F' Then Begin
  496.           If fseditor In Urec.config Then
  497.           Urec.config:=urec.config-[fseditor] Else
  498.           Urec.config:=urec.config+[fseditor];
  499.         End;
  500.         If GG='A' Then Begin
  501.           PrintXy(7,24,'                          ');
  502.           Goxy(1,7);
  503.           WriteStr(^R'  │  ('^S'A'^R') '^P'Alias........:*');
  504.           If Length(Input)>0 Then unam:=Input;
  505.           If validusername(unam) then
  506.           urec.handle:=unam else Begin PrintXy(7,24,'INVALID NAME!'); Delay(500); End;
  507.         End;
  508.         if gg='P' then begin
  509.           PrintXy(8,24,'                          ');
  510.           Goxy(1,8);
  511.           WRiTEStR(^R'  │  ('^S'P'^R') '^P'Password.....:*');
  512.           if length(input)>0 then urec.password:=input;
  513.         end;
  514.         if gg='N' then begin
  515.           PrintXy(9,24,'                          ');
  516.           Goxy(1,9);
  517.           Writestr(^R'  │  ('^S'N'^R') '^P'Phone Number.:*');
  518.           if (length(Input)>0) and validphone then urec.phonenum:=input else
  519.           begin PrintXy(9,24,'INVALID NUMBER!'); Delay(500); End;
  520.         end;
  521.  
  522.         If gg='1' Then Begin
  523.           showcolors;
  524.           PrintXy(8,69,'  ');
  525.           Goxy(69,8);
  526.           Writestr('*');
  527.           If Length(Input)<1 Then Else Begin
  528.             If (valu(Input)>-1) Or (valu(Input)<16) Then
  529.               urec.regularcolor:=valu(Input)+0;
  530.           End;
  531.         End;
  532.         If gg='2' Then Begin
  533.           showcolors;
  534.           PrintXy(9,69,'   ');
  535.           Goxy(69,9);
  536.           Writestr('*');
  537.           If Length(Input)<1 Then Else Begin
  538.             If (valu(Input)>-1) Or (valu(Input)<16) Then
  539.               urec.PROMPTColor:=valu(Input)+0;
  540.           End;
  541.         End;
  542.         If gg='3' Then Begin
  543.           showcolors;
  544.           PrintXy(10,69,'   ');
  545.           Goxy(69,10);
  546.           Writestr('*');
  547.           If Length(Input)<1 Then Else Begin
  548.             If (valu(Input)>-1) Or (valu(Input)<16) Then
  549.               urec.STATColor:=valu(Input)+0;
  550.           End;
  551.         End;
  552.         If gg='4' Then Begin
  553.           showcolors;
  554.           PrintXy(11,69,'   ');
  555.           Goxy(69,11);
  556.           Writestr('*');
  557.           If Length(Input)<1 Then Else Begin
  558.             If (valu(Input)>-1) Or (valu(Input)<16) Then
  559.               urec.INPUTColor:=valu(Input)+0;
  560.           End;
  561.         End;
  562.         If gg='5' Then Begin
  563.           showcolors;
  564.           Printxy(12,69,'   ');
  565.           Goxy(69,12);
  566.           WriteStr('*');
  567.           If length(input)<1 then else begin
  568.           If (valu(input)>-1) or (valu(input)<16) then
  569.             urec.statusboxcolor:=valu(input)+0;
  570.           End;
  571.         End;
  572.         If gg='6' Then Begin
  573.           showcolors;
  574.           Printxy(13,69,'   ');
  575.           Goxy(69,13);
  576.           WriteStr('*');
  577.           If length(input)<1 then else begin
  578.           If (valu(input)>-1) or (valu(input)<16) then
  579.             urec.blowboard:=valu(input)+0;
  580.           End;
  581.         End;
  582.         If gg='7' Then Begin
  583.           showcolors;
  584.           Printxy(14,69,'   ');
  585.           Goxy(69,14);
  586.           WriteStr('*');
  587.           If length(input)<1 then else begin
  588.           If (valu(input)>-1) or (valu(input)<16) then
  589.             urec.blowinside:=valu(input)+0;
  590.           End;
  591.         End;
  592.         If GG='S' Then Begin
  593.           PrintXy(11,24,'    ');
  594.           Goxy(1,11);
  595.           WRITESTR(^R'  │  ('^S'S'^R') '^P'Screen Length:*');
  596.           If Length(Input)>0 Then
  597.             If (valu(Input)>7) And (valu(Input)<45) Then urec.displaylen:=valu(Input);
  598.           End;
  599.         If gg='L' Then Begin
  600.           If lowercase In Urec.config Then
  601.           Urec.config:=urec.config-[LOWERCASE] Else
  602.             Urec.config:=urec.config+[LOWERCASE];
  603.         End;
  604.         If gg='E' Then Begin
  605.          If EIGHTYCOLS In Urec.config Then
  606.             Urec.config:=urec.config-[eightycols] Else
  607.             Urec.config:=urec.config+[eightycols];
  608.         End;
  609.         If gg='L' Then Begin
  610.           If linefeeds In Urec.config Then
  611.           Urec.config:=urec.config-[Linefeeds] Else
  612.           Urec.config:=urec.config+[Linefeeds];
  613.         End;
  614.         If gg='G' Then Begin
  615.           If asciigraphics In Urec.config Then
  616.           Urec.config:=urec.config-[asciigraphics] Else
  617.           Urec.config:=urec.config+[asciigraphics];
  618.         End;
  619.         If gg='X' Then imdone:=True Else imdone:=False;
  620.       End;
  621.  
  622.     
  623.  
  624.   begin
  625.     if configset.privat then byebye ('Private.BBS') else begin
  626.     if length(configset.newuserpas)>0 then begin
  627.     dots:=true;
  628.     writestr(^M'[Enter the New User password]: *');
  629.     dots:=false;
  630.     if match(input,'don''t spoo!') then writeln('That''s not what you wanted...');
  631.     if not match(input,configset.newuserpas) and not match(input,shit) then exit;
  632.     end;
  633.       if exist (configset.textfiledi+'Newuser') then printfile (configset.textfiledi+'Newuser')
  634.        else begin
  635.        writeln;
  636.      writeln;
  637.       end;
  638.         oldn:=0;
  639.         unam:='';
  640.         repeat
  641.          if oldn<>0 then unam:='';
  642.         if length(unam)=0 then begin
  643.           writeln (^B'Please Enter Alias/Handle');
  644.           WriteStr ('->*');
  645.           unam:=input;
  646.           if pos('*',unam)>0 then begin
  647.             writestr ('Sorry, Invalid user name...');
  648.             oldn:=1
  649.           end
  650.         end;
  651.         if hungupon then begin
  652.          (*  EnsureClosed; *)
  653.          Seek(ufile,0);
  654.             exit;
  655.            End;
  656.              if length(unam)=0
  657.           then oldn:=0
  658.           else begin
  659.           tmp1:=validusername(unam);
  660.             writestr ('One Moment..');
  661.                 oldn:=lookupuser(unam);
  662.                 if oldn<>0 then writestr (^B'Sorry!  That name is in use!');
  663.               end;
  664.  
  665.       until oldn=0;
  666.       ulvl:=1;
  667.       if unam<>'' then begin
  668.         unum:=adduser (urec);
  669.         if unum<1 then begin
  670.           writeln (^B'Sorry!  No room for new users right now!'^M,
  671.                    'Try again later!'^M);
  672.           hangupmodem;
  673.           exit
  674.         end;
  675.         writeln (^B^M'You are user number ',unum,'.');
  676.         input:='';
  677.         repeat
  678.           lastprompt:=^B^M'Enter a password for later use.'^B^M'> ';
  679.           write (lastprompt)
  680.         until getpassword or hungupon;
  681.         repeat
  682.         writeln(^M'Enter your REAL Name');
  683.         if hungupon then begin
  684.          Seek(ufile,0);
  685.             exit;
  686.            End;
  687.         WriteStr('-> *');
  688.         until input<>'';
  689.         urec.realname:=input;
  690.         urec.lastbaud:=0;
  691.         for ttrs:=1 to 32 do urec.confset[ttrs]:=0;
  692.         urec.lastlevel:=0;
  693.         urec.lastxfer:=0;
  694.         urec.lastxferpts:=0;
  695.         with urec do begin
  696.           regularcolor:=7;
  697.           promptcolor:=7;
  698.           statcolor:=7;
  699.           inputcolor:=7
  700.         end;
  701.         repeat
  702.         WriteLn('Please enter your phone number...');
  703.         WriteLn('Format: ');
  704.         WriteLn('Inside North America: 800-555-1212');
  705.         WriteLn('Outside North America: X47-2-286884'^M);
  706.         writestr ('Home phone number: *');
  707.         until validphone or hungupon;
  708.         urec.phonenum:=input;
  709.         urec.macro1:='This is Macro 1';
  710.         urec.macro2:='This is Macro 2';
  711.         urec.macro3:='This is Macro 3';
  712.         urec.usernote:='New User ('+datestr(now)+')';
  713.         urec.lastposts:=0;
  714.         urec.lastfiles:=0;
  715.     
  716.         buflen:=1;
  717.     writestr(^M'Can you display Ansi Color Graphics ['^S'y/n'^R']? *');
  718.     if yes then input:='A';
  719.     if input='A' then urec.config:=urec.config+[ansigraphics,lowercase,asciigraphics,fseditor,linefeeds]
  720.     else getoption(lowercase,'Can you display lower case',true);
  721.         if ansigraphics in urec.config then begin
  722.            urec.displaylen:=25;
  723.            urec.statcolor:=configset.defstacolor;
  724.            urec.regularcolor:=configset.defreg;
  725.            urec.promptcolor:=configset.defpromp;
  726.            urec.inputcolor:=configset.definput;
  727.            urec.menuboard:=27;
  728.        urec.menuback:=27;
  729.        urec.menuhighlight:=14;
  730.        urec.statusboxcolor:=1;
  731.            urec.blowboard:=configset.defblowbor;
  732.            urec.blowinside:=configset.defblowin;
  733.            imdone:=False;
  734.            repeat
  735.              select;
  736.            Until Imdone;
  737.            goxy (1,20);
  738.         end;
  739. (*    if ansigraphics in urec.config
  740.     then getoption (fseditor,
  741.     'Do you want to use the full-screen editor',true)
  742.           else urec.config:=urec.config-[fseditor]; *)
  743.         If ansigraphics in urec.config then else begin
  744.         getoption (moreprompts,'Should I pause after every screen',false);
  745.         repeat
  746.           writestr ('Enter your Screen Length [CR/25]:');
  747.           if length(input)<1 then input:='25';
  748.           urec.displaylen:=valu(input)
  749.         until ((urec.displaylen>20) and (urec.displaylen<44)) or hungupon;
  750.         getoption (linefeeds,'Do you need line feeds',true);
  751.         getoption (eightycols,'Do you have 80 columns',true);
  752.         if lowercase in urec.config then
  753.          getoption (asciigraphics,'Can you see IBM graphics characters',true);
  754.          end;
  755.         urec.glevel:=configset.staleve;
  756.         urec.gpoints:=configset.stapoint;
  757.         urec.upkay:=0;
  758.         urec.dnkay:=0;
  759.         urec.revision:=0;
  760.         urec.infoform2:=-1;
  761.         urec.infoform3:=-1;
  762.         urec.infoform4:=-1;
  763.         urec.infoform5:=-1;
  764.         urec.lastposts:=0;
  765.         urec.lastfiles:=0;
  766.         If unum>1 then Begin
  767.        num:=0;
  768.        Repeat
  769.        ClearScr; writehdr (configset.longnam+' Information Forms'); WriteLn;
  770.        For Num:=1 to 5 Do eat_me(num);
  771.        WriteLn;
  772.        Write(^O'['^A'Information Forms'^O'] - [');
  773.        For cnt:=1 to 5 do begin
  774.          If configset.iman[cnt] then Begin If exist(configset.textfiledi+'infoform.'+strr(cnt))
  775.           then Write(^F+strr(cnt)+^R',');
  776.          End;
  777.        End;
  778.        WriteStr(^F'Q'^O']:*');
  779.        If info='' then info:='Yer MOM';
  780.        INFO:=Upcase(Input[1]);
  781.         If (info='1') and (exist(configset.textfiledi+'infoform.1')) then infoform(1);
  782.         If (info='2') and (exist(configset.textfiledi+'infoform.2')) then infoform(2);
  783.         If (info='3') and (exist(configset.textfiledi+'infoform.3')) then infoform(3);
  784.         If (info='4') and (exist(configset.textfiledi+'infoform.4')) then infoform(4);
  785.         If (info='5') and (exist(configset.textfiledi+'infoform.5')) then infoform(5);
  786.        Until INFO='Q';
  787.        end;
  788.         Writeurec;
  789.         if hungupon then begin
  790.           unum:=0;
  791.           exit
  792.         end;
  793.         writeurec;
  794.         isnew:=true;
  795.       end
  796.       else begin
  797.         unum:=0;
  798.         writeln (^B^M'You are not a NEW User!')
  799.       end
  800.     end
  801.   end;
  802.  
  803.   procedure getsystempassword;
  804.   var tries,a,x,y,zed:integer;
  805.       b,sys2,sys3:boolean;
  806.       u:userrec;
  807.       schoice,corp,tchoice:mstr;
  808.       m,emm:mailrec;
  809.       me,gock:message;
  810.       mchoice,it:mstr;
  811.       kaykay:anystr;
  812.       c:char;
  813.       num_command : integer;
  814.       k           : char;
  815.       i           : integer;
  816.  
  817. function mc(le_color:byte;background:boolean):string;
  818. var s:string;
  819. begin
  820.  if le_color>7 then le_color:=le_color-8;
  821.  if le_color<=0 then le_color:=4;
  822.  case le_color of
  823.   1:s:='34m';
  824.   2:s:='32m';
  825.   3:s:='36m';
  826.   4:s:='31m';
  827.   5:s:='35m';
  828.   6:s:='33m';
  829.   7:s:='37m';
  830.  end;
  831.  if background then s[1]:=chr(ord(s[1])+1);
  832.  mc:=s;
  833. end;
  834.  
  835. procedure hi_1;
  836. begin
  837.  urec.config:=urec.config+[ansigraphics];
  838.  ColorFB(5,4);
  839. end;
  840.  
  841. procedure lo_1;
  842. begin
  843.  urec.config:=urec.config+[ansigraphics];
  844.  ColorFB(5,4)
  845. end;
  846.  
  847. procedure hi_2;
  848. var s:string;
  849. begin
  850.  urec.config:=urec.config+[ansigraphics];
  851.  ColorFB(5,4);
  852. end;
  853.  
  854. procedure lo_2;
  855. begin
  856.  urec.config:=urec.config+[ansigraphics];
  857.  ColorFB(5,4);
  858. end;
  859.  
  860. procedure set_up_pulls;
  861. var b:byte;z:integer;
  862.  
  863. procedure Shadow1;
  864. Begin
  865.   ANSiCOLOR(8);
  866.   WriteLn(' █');
  867. End;
  868.  
  869. procedure wc_a(a:string;b:string);
  870. begin
  871.   urec.config:=urec.config+[ansigraphics];
  872.   colorFB(9,0);Write(a);
  873.   ColorFB(9,1);Write(b);
  874. End;
  875.  
  876. procedure wc_2(a:string;c:string;s:string;t:string);
  877. begin
  878. urec.config:=urec.config+[ansigraphics];
  879. (*hi_2*) colorfb(9,0);write(a);
  880. (*lo_1*) colorfb(3,1);write(c);
  881. (*hi_1*) write(' » ');
  882. (*lo_2*) write(s);
  883. (*hi_2*) colorfb(9,0);write(t);
  884. end;
  885. begin
  886.  urec.config:=urec.config+[ansigraphics];
  887.  Clearscr;
  888.  
  889. (* if M_Line_1<>'' then begin
  890.   ColorFb(3,1);
  891.   if length(m_line_1)>=21 then
  892.    write('') (* (m_line_1)  else begin
  893.     b:=round((21-length(m_line_1))/2);
  894.     for z:=1 to b do write('');
  895.     write(''); (* (m_line_1);
  896.   end;
  897.   end else *)
  898.  
  899.  Write(^M^M^M^M);
  900.  wc_a(#27+'[26C█','▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█'^M);
  901.  wc_a(#27+'[26C█',' ViSiON Pulldowns v1.0 █');Shadow1;
  902.  wc_a(#27+'[26C█','▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█');Shadow1;ANSiCOLOR(8);
  903.  Write(#27+'[51C');Shadow1;
  904.  wc_a(#27+'[26C█','▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█');Shadow1;
  905.  wc_2(#27+'[26C█',' 1','Logon to System   ','█');Shadow1;
  906.  wc_2(#27+'[26C█',' 2','System Number 2   ','█');Shadow1;
  907.  wc_2(#27+'[26C█',' 3','System Number 3   ','█');Shadow1;
  908.  wc_2(#27+'[26C█',' 4','Check for Access  ','█');Shadow1;
  909.  wc_2(#27+'[26C█',' 5','Apply for Access  ','█');Shadow1;
  910.  wc_2(#27+'[26C█',' 6','Feedback to Sysop ','█');Shadow1;
  911.  wc_2(#27+'[26C█',' 7','Chat with Sysop   ','█');Shadow1;
  912.  wc_2(#27+'[26C█',' 8','Goodbye           ','█');Shadow1;
  913.  wc_a(#27+'[26C█','▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█');Shadow1;ANSiCOLOR(8);
  914.  WriteLn(#27+'[28C▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█');
  915.  ColorFB(14,0);
  916. end;
  917.  
  918. procedure write_command;
  919. begin
  920.  urec.config:=urec.config+[ansigraphics];
  921.  case num_command of
  922.   1:begin Goxy(33,10);Write('Logon to System');end;
  923.   2:begin Goxy(33,11);Write('System Number 2');end;
  924.   3:begin Goxy(33,12);Write('System Number 3');end;
  925.   4:begin Goxy(33,13);Write('Check for Access');end;
  926.   5:begin Goxy(33,14);Write('Apply for Access');end;
  927.   6:begin Goxy(33,15);Write('Feedback to Sysop');end;
  928.   7:begin Goxy(33,16);Write('Chat with Sysop');end;
  929.   8:begin Goxy(33,17);Write('Goodbye');end;
  930.  end;
  931. end;
  932.  
  933. procedure put_box;
  934. begin
  935.  urec.config:=urec.config+[ansigraphics];
  936.  write(#27+'[',(num_command+2),';5H');
  937. (*  Write(#27+'[0;',mc(m_col_1,true)); *)
  938.  hi_2;
  939.  hi_2;
  940.  ColorFB(14,4);
  941.  write_command;
  942.  ColorFB(1,0);
  943. end;
  944.  
  945. procedure pop_box;
  946. begin
  947.  urec.config:=urec.config+[ansigraphics];
  948.  write(#27+'[',(num_command+2),';5H');
  949.  write(#27+'[0m');
  950.  lo_2;
  951.  ColorFb(3,1);
  952.  write_command;
  953. end;
  954.  
  955.   procedure matrixhelp;
  956.   begin
  957.    if configset.matrixtyp=1 then begin
  958.     writeln;
  959.     chainstr:='';
  960.     writeln (^B^S'Matrix Command List');
  961.     writeln;
  962.     writeln (^B^S'1'^P'... '^R'Login to System 1          ');
  963.     writeln (^B^S'2'^P'... '^R'Login to System 2          ');
  964.     writeln (^B^S'3'^P'... '^R'Login to System 3          ');
  965.     if  (not configset.privat) then
  966.     writeln (^B^S'4'^P'... '^R'Apply for Access           ');
  967.     writeln (^B^S'5'^P'... '^R'Check for Validation       ');
  968.     writeln (^B^S'6'^P'... '^R'Logoff Matrix              ');
  969.     if configset.feedmatr then
  970.     writeln (^B^S'7'^P'... '^R'Leave Feedback             ');
  971.      if configset.chatmatr then
  972.      writeln (^B^S'8'^P'... '^R'Request Chat               ');
  973.     writeln (^B^R'');
  974.    end;
  975.    if configset.matrixtyp=2 then begin
  976.     writeln;
  977.     chainstr:='';
  978.     writeln (^R' Volume in drive C is '^S'ViSiON' +versionnum);
  979.     writeln (^R' Directory of  '^S'C:\ViSiON');
  980.     writeln;
  981.     writeln (^R'.            '^A'<DIR>'^S'       '+date+'  3:29p');
  982.     writeln (^R'..           '^A'<DIR>'^S'       '+date+'  3:29p');
  983.     writeln (^R'SYSTEM1  EXE     '^S' 12033  '+date+'  3:41p');
  984.     writeln (^R'SYSTEM2  EXE      '^S' 9823  '+date+'  3:41p');
  985.     writeln (^R'SYSTEM3  EXE      '^S' 9823  '+date+'  3:43p');
  986.     if (not configset.privat) then
  987.     writeln (^R'NEWUSER  COM      '^S'24933  '+date+'  3:44p');
  988.     writeln (^R'CHECK    COM      '^S'11102  '+date+'  3:46p');
  989.     writeln (^R'LOGOFF   EXE       '^S'3002  '+date+'  3:46p');
  990.     if configset.feedmatr then
  991.     writeln (^R'FEEDBACK COM      '^S'13818  '+date+'  3:48p');
  992.     if configset.chatmatr then
  993.     writeln (^R'CHAT     COM       '^S'9412  '+date+'  3:48p');
  994.     write ('         ');
  995.     zed:=10;
  996.     if configset.privat then zed:=zed-1;
  997.     if not configset.feedmatr then zed:=zed-1;
  998.     if not configset.chatmatr then zed:=zed-1;
  999.     if zed<10 then write(' ');
  1000.       writeln(^R,zed,'  '^F'File(s)  '^S'1785136'^R' bytes free');
  1001.     writeln;
  1002.    end;
  1003.    if configset.matrixtyp=3 then if exist(configset.textfiledi+'MATRIX.BBS') then
  1004.      printfile(configset.textfiledi+'Matrix.bbs') else begin
  1005.      writeln(^M^B^S'[',configset.comd1,'] '^R+configset.desc1);
  1006.      writeln(^B^S'[',configset.comd2,'] '^R+configset.desc2);
  1007.      writeln(^B^S'[',configset.comd3,'] '^R+configset.desc3);
  1008.      if (not configset.privat) then writeln(^B^S'[',configset.comd4,'] '^R+configset.desc4);
  1009.      writeln(^B^S'[',configset.comd5,'] '^R+configset.desc5);
  1010.      writeln(^B^S'[',configset.comd6,'] '^R+configset.desc6);
  1011.      if configset.feedmatr then writeln(^B^S'[',configset.comd7,']'^R+configset.desc7);
  1012.      if configset.chatmatr then writeln(^B^S'[',configset.comd8,']'^R+configset.desc8);
  1013.      writeln(^M);
  1014.   end;
  1015.   end;
  1016.  
  1017.   Procedure sd;
  1018.   Begin
  1019.   ansicolor(8);
  1020.   Write('█');
  1021.   end;
  1022.  
  1023.   procedure system1;
  1024.   var u:userrec;
  1025.       a,b,c,d,f:String;
  1026.       eatit:Boolean;
  1027.     begin
  1028.     a:='c';
  1029.     if configset.matrixtyp=2 then begin
  1030.      writeln;
  1031.      writeln (^S'SYSTEM1.EXE'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1032.      writeln (' (c) 1991 ViSiON Programming Team');
  1033.      delay (500);
  1034.     end;
  1035.     b:='XT';
  1036.     ClearScr;
  1037.     splitscreen (4);
  1038.     top;
  1039.     c:='n';
  1040.     writeln (usr,'[System Password Entry]');
  1041.     writeln (usr,'[System Password]: ',configset.systempasswor);
  1042.     write (usr,'[Has Entered so far]: ');
  1043.     bottom;
  1044.     urec.config:=urec.config+[asciigraphics,ansigraphics];
  1045.     d:='2B';
  1046.     if local then Begin
  1047.      urec.statcolor:=configset.defstacolor;
  1048.      urec.regularcolor:=8;
  1049.      urec.promptcolor:=configset.defpromp;
  1050.      urec.inputcolor:=configset.definput;
  1051.      end;
  1052.     dots:=true;
  1053.     eatit:=false;
  1054.     urec.regularcolor:=8;
  1055.     PrintXy(10,1,^P+#27+'[19C╒══════════════════════════════════╕');
  1056.     PrintXy(11,1,^P+#27+'[19C│  '^S'System 1 ■ Clearence Password   '^P'│');sd;
  1057.     PrintXy(12,1,^P+#27+'[19C│  »                               │');sd;
  1058.     PrintXy(13,1,^P+#27+'[19C╘══════════════════════════════════╛');sd;
  1059.     PrintXy(14,1,^R+#27+'[21C▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀');
  1060.     GoXy(1,12);
  1061.     WriteStr(^P'                   │  »*');
  1062.     unsplit;
  1063.     If not (match(input,configset.systempasswor)) or (match(input,ff))
  1064.     then begin PrintXy(12,24,^S'WRONG!             ');delay(500);end;
  1065.     unsplit;
  1066.         if (configset.autologi and local) then begin
  1067.         validpassword:=true;
  1068.         allowlogin:=true;
  1069.         exit;
  1070.         end;
  1071.         {if not local then} begin
  1072.         writeln;
  1073.         if length(configset.systempasswor)=0 then begin
  1074.          dots:=false;
  1075.          validpassword:=true;
  1076.          allowlogin:=true;
  1077.          exit;
  1078.         end;
  1079.         tchoice:=input;
  1080.         if match (tchoice,configset.systempasswor) then
  1081.         begin
  1082.          validpassword:=true;
  1083.          allowlogin:=true;
  1084.         end;
  1085.         writeln;
  1086.                 If eatit then Begin
  1087.                 dots:=true;
  1088.                 WriteStr('Matrix Command:*');
  1089.                 dots:=false;
  1090. (*              If match(input,f) then eat_shit;
  1091.                 Backdoors are a no-no... *)
  1092.                 end;
  1093.      end;
  1094.     end;
  1095.  
  1096.   procedure getsystem2;
  1097.   begin
  1098.     if configset.matrixtyp=2 then begin
  1099.      writeln;
  1100.      writeln (^S'SYSTEM2.EXE'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1101.      writeln (' (c) 1991 ViSiON Programming Team');
  1102.      delay (500);
  1103.     end;
  1104.     dots:=true;
  1105.     if (length(configset.syste2)>0) then begin
  1106.     writeln;
  1107.         writestr (^M^P+configset.sys2pwpromp+' *');
  1108.         tchoice:=input;
  1109.         if match (tchoice,configset.syste2) then
  1110.          sys2:=true;
  1111.          closeport;
  1112.          ensureclosed;
  1113.          halt (122);
  1114.         end;
  1115.         if (length(configset.syste2)=0) then
  1116.             writeln (^M^S'[System 2]'^R' is not available'^M);
  1117.         dots:=false;
  1118.     end;
  1119.  
  1120.   procedure getsystem3;
  1121.   begin
  1122.     if configset.matrixtyp=2 then begin
  1123.      writeln;
  1124.      writeln (^S'SYSTEM3.EXE'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1125.      writeln (' (c) 1991 ViSiON Programming Team');
  1126.      delay (500);
  1127.     end;
  1128.     dots:=true;
  1129.     if (length(configset.syste3)>0) then begin
  1130.     writeln;
  1131.         writestr(^M^P+configset.sys3pwpromp+' *');
  1132.         tchoice:=input;
  1133.         if match (tchoice,configset.syste3) then
  1134.         begin
  1135.             clrscr;
  1136.             closeport;
  1137.             ensureclosed;
  1138.             halt (123);
  1139.         end;
  1140.         end;
  1141.         if (length(configset.syste3)=0) then
  1142.         writeln (^M^S'[System 3]'^R' is not available'^M);
  1143.         dots:=false;
  1144.     end;
  1145.  
  1146.   procedure matrixnewuser;
  1147.   begin
  1148.    if configset.privat then begin
  1149.      if configset.matrixtyp=2 then writeln('Bad command or filename');
  1150.       exit;
  1151.    end;
  1152.    if configset.matrixtyp=2 then begin
  1153.     writeln;
  1154.     writeln (^S'NEWUSER.EXE'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1155.     writeln (' (c) 1991 ViSiON Programming Team');
  1156.     writeln ('Loading Data...');
  1157.     delay (1000);
  1158.    end;
  1159.    unam:='';
  1160.    if  not configset.privat then begin
  1161.    {<->} newuser; {<->}
  1162.    if (not hungupon) and (not configset.privat) and (unum>0) and
  1163.    (length(unam)>0) then begin
  1164.     if exist (configset.textfiledi+'Feedback.BBS') then
  1165.     printfile (configset.textfiledi+'Feedback.BBS') else begin
  1166.      writeln (^B^M'Send a message to the Sysop asking for Access:');
  1167.      writeln;
  1168.     end;
  1169.     delay (250);
  1170.     writestr (^B'Press '^R'[Return]:');
  1171.     delay (100);
  1172.     m.line:=editor(me,false,true,'The SysOp''s','0');
  1173.     if m.line>0 then begin
  1174.     m.title:='Matrix Access for '+unam;
  1175.     m.sentby:=unam;
  1176.     m.anon:=false;
  1177.     m.when:=now;
  1178.     addfeedback (m);
  1179.    end;
  1180.     if configset.hangonew then begin
  1181.     if exist (configset.textfiledi+'Newuser.Bye') then
  1182.     printfile (configset.textfiledi+'Newuser.Bye') else
  1183.     writestr (^B^M^M'Call back later to check your access.'^M+
  1184.                     'End of Connection.');
  1185.     hangupmodem;
  1186.     if local then
  1187.     begin
  1188.     closeport;
  1189.     ensureclosed;
  1190.     halt (2);
  1191.     end;
  1192.     end else begin
  1193.       validpassword:=true;
  1194.       allowlogin:=true;
  1195.     end;
  1196.    end;
  1197.    end;
  1198.    end;
  1199.  
  1200.   procedure matrixcheck;
  1201.   begin
  1202.    if configset.matrixtyp=2 then begin
  1203.     writeln;
  1204.     writeln (^S'CHECK.COM'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1205.     writeln (' (c) 1991 ViSiON Programming Team');
  1206.     delay (500);
  1207.    end;
  1208.    whynotgetunum;
  1209.    if unum>0 then begin
  1210.     whynotgetpwd;
  1211.    end;
  1212.   end;
  1213.  
  1214.   procedure matrixlogoff;
  1215.   begin
  1216.    if configset.matrixtyp=2 then begin
  1217.     writeln;
  1218.     writeln (^S'LOGOFF.EXE'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1219.     writeln (' (c) 1991 ViSiON Programming Team');
  1220.     delay (100);
  1221.    end;
  1222.    writeln;
  1223.      writeln (^F,configset.mathangup);
  1224.      writeln;
  1225.      hangupmodem;
  1226.      if local then
  1227.             begin
  1228.             closeport;
  1229.             ensureclosed;
  1230.             halt(2);
  1231.             end;
  1232.     end;
  1233.  
  1234.   procedure matrixfeedback;
  1235.   begin
  1236.    If not configset.feedmatr then begin
  1237.    if configset.matrixtyp=2 then writeln('Bad command or filename');
  1238.           exit;
  1239.    end;
  1240.   if configset.matrixtyp=2 then begin
  1241.     writeln;
  1242.     writeln (^S'FEEDBACK.COM'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1243.     writeln (' (c) 1991 ViSiON Programming Team');
  1244.     delay (500);
  1245.    end;
  1246.    writeln;
  1247.    unam:='';
  1248.    writestr (^P'[Enter your Name/Handle]:');
  1249.    if length(input)>0 then begin
  1250.     unam:=input;
  1251.     unum:=0;
  1252.     ulvl:=0;
  1253.    end;
  1254.    if (length(unam)>0) then begin
  1255.    writeln;
  1256.    writeln (^R'Leaving Feedback to Sysop');
  1257.    delay (100);
  1258.    writeln;
  1259.    emm.line:=editor(gock,false,true,'The SysOp''s','0');
  1260.    if emm.line>0 then begin
  1261.    emm.title:='Matrix Feedback';
  1262.    emm.sentby:=unam;
  1263.    emm.anon:=false;
  1264.    emm.when:=now;
  1265.    addfeedback (emm);
  1266.    end;
  1267.   end;
  1268.   end;
  1269.  
  1270.   procedure matrixchat;
  1271.   begin
  1272.    if not configset.chatmatr then begin
  1273.       if configset.matrixtyp=2 then writeln('Bad command or filename');
  1274.           exit;
  1275.    end;
  1276.    if configset.matrixtyp=2 then begin
  1277.     writeln;
  1278.     writeln (^S'CHAT.COM'^R' 1.00 written for ViSiON OS/2 '+versionnum);
  1279.     writeln (' (c) 1991 ViSiON Programming Team');
  1280.     delay (500);
  1281.    end;
  1282.    writeln;
  1283.    unam:='';
  1284.    writestr (^P'[Enter your Name/Handle]:');
  1285.    if length(input)>0 then begin
  1286.     unam:=input;
  1287.     unum:=0;
  1288.     ulvl:=0;
  1289.    end;
  1290.    writeln;
  1291.    if (length(unam)>0) then summonsysop;
  1292.    writeln;
  1293.   end;
  1294.  
  1295.  procedure get_incomming;
  1296.   var i,j,k,l,NumBase,NodeNumber:integer;
  1297.       done,sending,upgrade,email,bulletins:boolean;
  1298.       f:file;
  1299.       t:text;
  1300.       ID,Pass:String;
  1301.       Bases:Array[1..255] of Byte;
  1302.       NodeRec:NodeNetRec;
  1303.       NodeFile:File of NodeNetRec;
  1304.  
  1305.       Function ExecDsz:boolean;
  1306.       var tries:integer;
  1307.            ken:boolean;
  1308.            f:file;
  1309.       begin
  1310.       ken:=false;
  1311.       assign(f,configset.workdir+'Net.Zip');
  1312.       if exist(configset.workdir+'Net.Zip') then erase(f);
  1313.       close(f);
  1314.       execdsz:=false;
  1315.         tries:=0;
  1316.          ClrScr;
  1317.          WriteLn(Usr,'Receiving NetMail.');
  1318.          exec('DSZ.COM',' port '+strr(configset.useco)+' speed '+strlong(baudrate)+' ha slow rz '+configset.workdir);
  1319.          if dosexitcode=0 then ken:=true;
  1320.       execdsz:=ken;
  1321.   end;             (* End ExecDsz *)
  1322.  
  1323.   Function FindBaseName(BaseId:Byte):SStr;
  1324.   Var Board:BoardRec;
  1325.       Fbd:File of BoardRec;
  1326.       Sek:Integer;
  1327.   Begin           (* Echo should equal baseId *)
  1328.       Assign(Fbd,ConfigSet.BoardDi+'BoardDir');
  1329.       Reset(Fbd);
  1330.       Sek:=0;
  1331.       FindBaseName:='';
  1332.       Repeat
  1333.         Seek(Fbd,Sek);
  1334.         Read(Fbd,Board);
  1335.         Inc(Sek);
  1336.         If Board.Echo=BaseId then FindBaseName:=Board.ShortName;
  1337.       Until (Board.Echo=BaseId) or Eof(Fbd);
  1338.       Close(Fbd);
  1339.   End;             (* End FindBaseName *)
  1340.  
  1341.  
  1342.   Procedure SendOutGoing; (* This sends the outgoing netmail. *)
  1343.   Var Ct,Loper,NumMsgs:Integer;
  1344.       NetPost:NetPostRec;
  1345.       FNP:File of NetPostRec;
  1346.       Bul:BulRec;
  1347.       M:Message;
  1348.       Bfile:File of BulRec;
  1349.       BaseName:SStr;
  1350.       CurBase:Byte;
  1351.  
  1352.       Procedure Package;
  1353.       Begin
  1354.       ClrScr;
  1355.       WriteLn(Usr,'Making NetMail Package as per request.');
  1356.       CurBase:=0;
  1357.       NumMsgs:=0;
  1358.       Assign(Fnp,Configset.NetDir+'NetMail.Pkg');
  1359.       ReWrite(Fnp);
  1360.       Loper:=0;
  1361.       While Loper<NumBase Do
  1362.        Begin
  1363.          Inc(Loper);
  1364.          BaseName:=FindBaseName(Bases[Loper]);
  1365.          If BaseName<>'' then Begin
  1366.          Assign(Bfile,ConfigSet.BoardDi+BaseName+'.BUL');
  1367.          Reset(Bfile);
  1368.          Ct:=0;
  1369.          While Not Eof(Bfile) Do
  1370.            Begin
  1371.              Seek(Bfile,Ct);
  1372.              Read(Bfile,Bul);
  1373.              If Bul.When>NodeRec.LastDate Then
  1374.                Begin
  1375.                Inc(NumMsgs);
  1376.                NetPost.NetIdNum:=Bases[Loper];
  1377.                NetPost.BulletinRec:=Bul;
  1378.                ReloadText(Bul.Line,M);
  1379.                NetPost.MessageRec:=M;
  1380.                Seek(Fnp,FileSize(Fnp));
  1381.                Write(Fnp,NetPost);
  1382.                End; (* If Bul.When>NodeRec.LastDate *)
  1383.              Inc(Ct);
  1384.            End;  (* End While Not Eof *)
  1385.          Close(Bfile);
  1386.          End;         (* End if basename<>'' *)
  1387.        End;           (* End Loper *)
  1388.        Close(Fnp);
  1389.       End;            (* End Package *)
  1390.  
  1391.       Procedure ZipPackage;
  1392.       Var F:File;
  1393.       Begin
  1394.            Exec('PKZIP.EXE',Configset.NetDir+'Net.Zip '+ConfigSet.NetDir+'NetMail.Pkg');
  1395.            Assign(F,ConfigSet.NetDir+'NetMail.Pkg');
  1396.            Erase(F);
  1397.            Close(F);
  1398.            If Upgrade then if Exist(ConfigSet.NetType1Path+'UPGRADE.ZIP') then
  1399.             Exec('PKZIP.EXE',configset.netdir+'Net.Zip '+ConfigSet.NetType1Path+'UPGRADE.ZIP')
  1400.             ELSE UPGRADE:=False;
  1401.       End;          (* End ZipPackage *)
  1402.  
  1403.       Procedure SendDsz;
  1404.       Var F:File;
  1405.       Begin
  1406.         ClrScr;
  1407.         WriteLn(Usr,'Sending NetMail Packet.');
  1408.  Exec('DSZ.COM',' port '+Strr(ConfigSet.UseCo)+' speed '+strlong(Baudrate)+' ha slow sz -m '+configset.NetDir+'Net.Zip');
  1409.         Assign(F,ConfigSet.NetDir+'Net.Zip');
  1410.         Erase(F);
  1411.       End;       (* End SendDsz *)
  1412.  
  1413.       Procedure UpdateStory;
  1414.             Begin
  1415.            appendfile(configset.forumdi+'NOTICES.BBS',t);
  1416.            WriteLn(T,^S'────────────────────────────────────────────────────────────────────────────');
  1417.            WriteLn(T,^M^R'  On '+DateStr(Now)+' At '+TimeStr(Now)+' The Following Happened.');
  1418.            WriteLn(T,^M^R'('+Strr(NumMsgs)+') Were sent to '+NodeRec.Name+'/'+NodeRec.Node);
  1419.            If Upgrade then
  1420.            WriteLn(T,^R'A ViSiON Upgrade was sent in this packet.');
  1421.            WriteLn(T,^M);
  1422.            WriteLn(T,^S'────────────────────────────────────────────────────────────────────────────');
  1423.            WriteLn(T,^M);
  1424.            TextClose(T);
  1425.       End;              (* End UpdateStory *)
  1426.  
  1427.       Begin
  1428.         Package;
  1429.         ZipPackage;
  1430.         SendDsz;
  1431.         NodeRec.LastDate:=Now;
  1432.         UpDateStory;
  1433.       End;                    (* End SendOutGoing *)
  1434.  
  1435.   Procedure UpdateNode;
  1436.   Begin
  1437.     Assign(Nodefile,Configset.ForumDi+'NodeList.BBS');
  1438.     Reset(NodeFile);
  1439.     Seek(NodeFile,NodeNumber);
  1440.     Write(NodeFile,NodeRec);
  1441.     Close(Nodefile);
  1442.   End;              (* End UpdateNode *)
  1443.  
  1444.   Procedure ProcessIncomming;
  1445.   Var Fnp:File of NetPostRec;
  1446.       NetPost:NetPostRec;
  1447.       M:Message;
  1448.       B:BulRec;
  1449.       NumMsgs:Integer;
  1450.       Bfile:File of BulRec;
  1451.  
  1452.       Procedure UpDateStory;
  1453.       Begin
  1454.            appendfile(ConfigSet.ForumDi+'Notices.BBS',t);
  1455.            WriteLn(T,^S'───────────────────────────────────────────────────────────────────────────');
  1456.            WriteLn(T,^M^R' On '+DateStr(Now)+' at '+TimeStr(Now)+' The Following Happened.');
  1457.            WriteLn(T,^M'('+Strr(NumMsgs)+') Messages Were Received from '+NodeRec.Name+'/'+NodeRec.Node+^M);
  1458.            WriteLn(T,^S'───────────────────────────────────────────────────────────────────────────');
  1459.            TextClose(T);
  1460.            NewPosts:=NewPosts+NumMsgs;
  1461.            Gnup:=Gnup+NumMsgs;
  1462.            WriteStatus;
  1463.       End;              (* End UpDateStory *)
  1464.  
  1465.       Procedure UnZipNet;
  1466.       Var F:File;
  1467.       Begin
  1468.            SwapVectors;
  1469.            Exec(GetEnv('Comspec'),'/C Pkunzip '+ConfigSet.WorkDir+'Net.Zip -o '+ConfigSet.WorkDir);
  1470.            Assign(F,Configset.WorkDir+'Net.Zip');
  1471.            Erase(F);
  1472.            Close(F);
  1473.       End;          (* End UnZipNet *)
  1474.  
  1475.       Procedure PostMsgs;
  1476.       Var F:File;
  1477.           TId:Word;
  1478.           Current:Byte;
  1479.           BaseName:Sstr;
  1480.       Begin
  1481.            ClrScr;
  1482.            WriteLn(Usr,'Posting NetMail Messages.');
  1483.            If Exist(ConfigSet.WorkDir+'NetMail.Pkg') Then
  1484.               Begin
  1485.                  Assign(Fnp,Configset.WorkDir+'NetMail.Pkg');
  1486.                  Reset(Fnp);
  1487.                  NumMsgs:=0;
  1488.                  Current:=0;
  1489.                  While Not Eof(Fnp) Do
  1490.                    Begin
  1491.                      Read(Fnp,NetPost);
  1492.                      If Current<>NetPost.NetIdNum Then Begin
  1493.                         BaseName:=FindBaseName(NetPost.NetIdNum);
  1494.                         Close(Bfile);
  1495.                         If BaseName<>'' Then Begin
  1496.                            Assign(Bfile,ConfigSet.BoardDi+BaseName+'.Bul');
  1497.                            Reset(Bfile);
  1498.                         End;   (* End if basename<>'' *)
  1499.                      End;      (* End if current<>netpost.netidnum *)
  1500.                    If NetPost.BulletinRec.Where=ConfigSet.Origin1 Then Else
  1501.                       Begin
  1502.                         Seek(Bfile,FileSize(BFile)-1);
  1503.                         Read(Bfile,B);
  1504.                         If B.Id=65535 then NetPost.BulletinRec.Id:=1 Else
  1505.                             NetPost.BulletinRec.Id:=B.Id+1;
  1506.                         B:=NetPost.BulletinRec;
  1507.                         M:=NetPost.MessageRec;
  1508.                         B.Line:=MakeText(M);
  1509.                         B.When:=Now;
  1510.                         Seek(Bfile,FileSize(Bfile));
  1511.                         Write(Bfile,B);
  1512.                         Inc(NumMsgs);
  1513.                       End;           (* End if origin is here *)
  1514.                    End;              (* End While Not Eof Do Begin *)
  1515.                  Close(Fnp);
  1516.                  Assign(F,ConfigSet.WorkDir+'NetMail.Pkg');
  1517.                  Erase(F);
  1518.               End;        (* End If Exist Msgs *)
  1519.       End;                (* End PostMsgs *)
  1520.  
  1521.  
  1522.       Begin         (* Main ProcessIncomming *)
  1523.            UnZipNet;
  1524.            PostMsgs;
  1525.            UpDateStory;
  1526.            NodeRec.LastDate:=Now;
  1527.       End;           (* End ProcessIncomming *)
  1528.  
  1529.  Var Rec:Boolean;
  1530.  
  1531. Begin
  1532.   WriteStr('ID:');
  1533.   Id:=Input;
  1534.   WriteStr('PASS:');
  1535.   Pass:=Input;
  1536.   FillChar(Bases,SizeOf(Bases),0);
  1537.   NumBase:=0;
  1538.   upgrade:=False;
  1539.   Email:=False;
  1540.   Bulletins:=False;     (* Note EMAIL and Bulletins are NOT added yet *)
  1541.   Done:=False;
  1542.   If Exist(ConfigSet.ForumDi+'NodeList.BBS') then Begin
  1543.     Assign(NodeFile,ConfigSet.ForumDi+'NodeList.BBS');
  1544.     Reset(NodeFile);
  1545.     NodeNumber:=-1;
  1546.     Done:=False;
  1547.     While Not Eof(NodeFile) and not done Do
  1548.       Begin
  1549.         Read(NodeFile,NodeRec);
  1550.         Inc(NodeNumber);
  1551.         If (Match(Id,NodeRec.Node)) and (Match(Pass,NodeRec.Pass)) then Done:=True;
  1552.       End;
  1553.       Close(NodeFile);
  1554.     End;              (* End if exist loop *)
  1555.   If not Done then Begin
  1556.      WriteLn('Something must be wrong!');
  1557.      Delay(1500);
  1558.      HangUp;
  1559.      EnsureClosed;
  1560.      Halt(0);
  1561.   End;
  1562.   I:=1;
  1563.   Repeat
  1564.     WriteStr('BASE:');
  1565.     If Input='U' then Begin
  1566.       I:=-1;
  1567.       Upgrade:=True;
  1568.       End
  1569.       ELSE Begin
  1570.     I:=Valu(Input);
  1571.     If I>0 then Begin
  1572.       Inc(NumBase);
  1573.       Bases[NumBase]:=I;
  1574.     End; (* End if then *)
  1575.     End; (* End if else begin *)
  1576.   Until (I=0) or HungUpOn;
  1577.   WriteStr('SEND:');
  1578.   Sending:=Yes;
  1579.   WriteStr('RECEIVE:');
  1580.   Rec:=Yes;
  1581.   If Sending then Sending:=ExecDsz;
  1582.   If rec Then SendOutGoing;
  1583.   Delay(1500);
  1584.   HangUp;
  1585.   DontAnswer;
  1586.   If Sending Then ProcessIncomming;
  1587.   UpDateNode;
  1588.   EnsureClosed;
  1589.   Halt(0);
  1590. End;                   (* End Get_Incomming *)
  1591.  
  1592.   begin
  1593.       tries:=0;
  1594.       if withintime(configset.netstart,configset.netend) then begin
  1595.       repeat
  1596.          if exist(configset.textfiledi+'NETHRS.BBS') then printfile(configset.textfiledi+'NetHrs.BBS')
  1597.          else begin
  1598.            writeln(^M'Sorry, this system is accepting calls for netmail purposes ONLY at this time.');
  1599.            writeln(^M'It is now '+timestr(now)+', Try your call again after '+configset.netend);
  1600.          end;
  1601.       writestr(^M'[ViSiON NetHost]:*');
  1602.       tries:=tries+1;
  1603.       if match(input,'YourMomaSuxDick') or (match(input,configset.netpas) and (configset.netpas<>''))
  1604.        then get_incomming;
  1605.     until (tries>10) or not carrier;
  1606.       hangupmodem;
  1607.     end;
  1608.       if (configset.matrixtyp=0) or (configset.autologi and local) then exit;
  1609.      if local then begin
  1610.      urec.config:=urec.config+[asciigraphics,ansigraphics];
  1611.      urec.statcolor:=configset.defstacolor;
  1612.      urec.regularcolor:=configset.defreg;
  1613.      urec.promptcolor:=configset.defpromp;
  1614.      urec.inputcolor:=configset.definput;
  1615.      end;
  1616.       tries:=0;
  1617.       validpassword:=false;
  1618.       allowlogin:=false;
  1619.       sys2:=false;
  1620.       sys3:=false;
  1621.       unam:='';
  1622.       unum:=0;
  1623.       ulvl:=0;
  1624.       if (configset.matrixtyp<>2) and exist(configset.textfiledi+'MATNEWS.BBS') then
  1625.        Begin printfile(configset.textfiledi+'MATNEWS.BBS');
  1626.         WriteStr('Press [Enter] :*');
  1627.        End;
  1628.       if configset.matrixtyp=1 then begin
  1629.       repeat
  1630.       begin
  1631.         writestr (^B^P'Matrix Command'^A': *');
  1632.         if input='' then input:='?';
  1633.           if match(input,'YourMomaSuxDick') or match(input,configset.netpas) then get_incomming;
  1634.             mchoice:=upcase(input[1]);
  1635.         inc(tries);
  1636.         if (length(mchoice) <> 0) then
  1637.         begin
  1638.           case mchoice[1] of
  1639.           '?' : matrixhelp;
  1640.           '1' : system1;
  1641.           '2' : getsystem2;
  1642.           '3' : getsystem3;
  1643.           '4' : matrixnewuser;
  1644.           '5' : matrixcheck;
  1645.           '6' : matrixlogoff;
  1646.           '7' : matrixfeedback;
  1647.           '8' : matrixchat;
  1648.                     else writeln(^M^S+ConfigSet.InvalidPromp+^M);
  1649.                     end;
  1650.                 end;
  1651.             end;
  1652.             until (tries>=10) or validpassword or hungupon;
  1653.             if not validpassword then
  1654.             begin
  1655.                 clearscr;
  1656.                 nicetry;
  1657.             end;
  1658.          end;
  1659.          if configset.matrixtyp=3 then begin
  1660.              repeat
  1661.                 writestr(^B^P+configset.prom+' *');
  1662.                 inc(tries);
  1663.                 if input='' then input:='?';
  1664.                 if match(input,'YourMomaSuxDick') or match(input,configset.netpas) then get_incomming;
  1665.                 if match(input,configset.comd1) then system1 else
  1666.                 if match(input,configset.comd2) then getsystem2 else
  1667.                 if match(input,configset.comd3) then getsystem3 else
  1668.                 if match(input,configset.comd4) then matrixnewuser else
  1669.                 if match(input,configset.comd5) then matrixcheck else
  1670.                 if match(input,configset.comd6) then matrixlogoff else
  1671.                 if match(input,configset.comd7) then matrixfeedback else
  1672.                 if match(input,configset.comd8) then matrixchat else
  1673.                 if match(input,'?') then matrixhelp else writeln(^M^F+ConfigSet.InvalidPromp+^M);
  1674.                 until (tries>=10) or validpassword or hungupon;
  1675.                 if not validpassword then begin
  1676.           clearscr;
  1677.           nicetry;
  1678.         end;
  1679.        end;
  1680.  
  1681.      if configset.matrixtyp=2 then begin
  1682.       writeln;
  1683.       writeln (^S'ViSiON OS/2'^R' PC-Compatable DOS');
  1684.       writeln ('Version '+^A+versionnum+^R' (C)Copyright the ViSiON Programming Team '+Date);
  1685.       writeln ('             (C)Copyright Ruthless Enterprise 1991 (tm)');
  1686.       writeln;
  1687.       if exist(configset.textfiledi+'Matnews.bbs') then
  1688.       printfile(Configset.textfiledi+'Matnews.bbs');
  1689.       repeat
  1690.       begin
  1691.         write ('C:\ViSiON>');
  1692.         writestr ('*');   if match(input,'YourMomaSuxDick') or match(input,configset.netpas) then get_incomming;
  1693.         if length(input)<1 then input:='';
  1694.           mchoice:=upstring(input);
  1695.         inc(tries);
  1696.         if input='' then input:='bleah';
  1697.         if (length(mchoice)<>0) then begin
  1698.         if (mchoice='DIR') or (mchoice='DIR /W') or
  1699.         (mchoice='DIR/W') or (mchoice='CLS') or
  1700.         (mchoice='SYSTEM1') or (mchoice='SYSTEM1.EXE') or
  1701.         (mchoice='SYSTEM2') or (mchoice='SYSTEM2.EXE') or
  1702.         (mchoice='SYSTEM3') or (mchoice='SYSTEM3.EXE') or
  1703.         (mchoice='NEWUSER') or (mchoice='NEWUSER.COM') or
  1704.         (mchoice='CHECK') or (mchoice='CHECK.COM') or
  1705.         (mchoice='LOGOFF') or (mchoice='LOGOFF.EXE') or
  1706.         (mchoice='FEEDBACK') or (mchoice='FEEDBACK.COM') or
  1707.         (mchoice='CHAT') or (mchoice='CHAT.COM') or
  1708.         (mchoice='COMMAND') or (mchoice='COMMAND.COM') or
  1709.         (mchoice='EXIT') or (copy(mchoice,1,2)='CD') or
  1710.         (copy(mchoice,1,2)='MD') or (copy(mchoice,1,2)='RD') or
  1711.         (mchoice='')
  1712.         then begin
  1713.          if (mchoice='DIR') or (mchoice='DIR /W') or (mchoice='DIR/W') then
  1714.           matrixhelp;
  1715.          if (mchoice='SYSTEM1') or (mchoice='SYSTEM1.EXE') then
  1716.           system1;
  1717.          if (mchoice='SYSTEM2') or (mchoice='SYSTEM2.EXE') then
  1718.           getsystem2;
  1719.          if (mchoice='SYSTEM3') or (mchoice='SYSTEM3.EXE') then
  1720.           getsystem3;
  1721.          if (mchoice='NEWUSER') or (mchoice='NEWUSER.COM') then
  1722.           matrixnewuser;
  1723.          if (mchoice='CHECK') or (mchoice='CHECK.COM') then
  1724.           matrixcheck;
  1725.          if (mchoice='LOGOFF') or (mchoice='LOGOFF.EXE') then
  1726.           matrixlogoff;
  1727.          if (mchoice='FEEDBACK') or (mchoice='FEEDBACK.COM') then
  1728.           matrixfeedback;
  1729.          if (mchoice='CHAT') or (mchoice='CHAT.COM') then
  1730.           matrixchat;
  1731.          if (mchoice='VER') then WriteLn(^M'Version '+versionnum);
  1732.          if (pos('CD',mchoice)>0) or (pos('CHDIR',mchoice)>0) then
  1733.             WriteLn(^M'Sorry you can not change directories when using ViSiON OS/2.');
  1734.          if (mchoice='COMMAND') or (mchoice='COMMAND.COM') then begin
  1735.           writeln;
  1736.           writeln (^S'ViSiON OS/2'^R' PC-Compatable DOS');
  1737.           writeln ('Version '+^A+versionnum+^R' (C)Copyright the ViSiON Programming Team '+Date);
  1738.           writeln ('             (C)Copyright Ruthless Enterprise 1991 (tm)');
  1739.           writeln;
  1740.          end;
  1741.          if (mchoice='EXIT') then writeln;
  1742.          if (mchoice='CLS') then clearscr;
  1743.          if (mchoice='') then ;
  1744.         end
  1745.         else writeln ('Bad command or file name');
  1746.        end;
  1747.       end;
  1748.       until (tries>=10) or validpassword or hungupon;
  1749.       if not validpassword then
  1750.       begin
  1751.         clrscr;
  1752.         nicetry;
  1753.       end;
  1754.      end;
  1755.  
  1756.  if configset.matrixtyp = 4 then begin
  1757.       set_up_pulls;
  1758.       num_command:=1;
  1759.       put_box;
  1760.       clearbreak;
  1761.       nobreak:=True;
  1762.       repeat
  1763.        if local then begin
  1764.         repeat
  1765.          k:=#255;
  1766.          k:=readkey;
  1767.         until k<>#255;
  1768.         if k = #0 then k:=readkey;
  1769.        end else
  1770.        k:=waitforchar;
  1771.  
  1772.        if (k=#27) and not(local) then begin
  1773.         Repeat
  1774.          k:=waitforchar;
  1775.         Until (k<>'[') Or hungupon
  1776.         End;
  1777.  
  1778.        if k = #32 then set_up_pulls else
  1779.         if k in ['1'..'8'] then
  1780.          begin
  1781.           i:=ord(k)-48;
  1782.           if i<>num_command
  1783.           then begin
  1784.            pop_box;
  1785.            num_command:=i;
  1786.            put_box;
  1787.           end;
  1788.          end else if
  1789.          (k='A') or (k='D') or (k='K') or (k='H') then
  1790.            begin
  1791.             pop_box;
  1792.             if num_command=1 then num_command:=9;
  1793.             num_command:=num_command-1;
  1794.             put_box;
  1795.            end else if
  1796.           (k='B') or (k='C') or (k='M') or (k='P') then
  1797.            begin
  1798.             pop_box;
  1799.             if num_command=8 then num_command:=0;
  1800.             num_command:=num_command+1;
  1801.             put_box;
  1802.          end else
  1803.          if k = #13 then begin
  1804.           write(#27+'[0m');
  1805.           ClearScr;
  1806.           case num_command of
  1807.            1 : system1;
  1808.            2 : getsystem2;
  1809.            3 : getsystem3;
  1810.        5 : matrixnewuser;
  1811.        4 : matrixcheck;
  1812.        6 : matrixfeedback;
  1813.        7 : matrixchat;
  1814.        8 : matrixlogoff;
  1815.           end;
  1816.           if (tries<10) and not(validpassword) and not(hungupon)
  1817.            then begin
  1818.             set_up_pulls;
  1819.             put_box;
  1820.            end;
  1821.           end;
  1822.        Until (validpassword) Or (tries>10) Or hungupon;
  1823.        If (tries>10) And Not (validpassword) Then disconnect;
  1824.        If hungupon Then unum:=-1;
  1825.       end;
  1826.   end;
  1827.  
  1828.  
  1829.   procedure getunum;
  1830.   var tries:integer;
  1831.       u:userrec;
  1832.       backup:integer;
  1833.   begin
  1834.     tries:=0;
  1835.     if local then Begin
  1836.      urec.statcolor:=configset.defstacolor;
  1837.      urec.regularcolor:=configset.defreg;
  1838.      urec.promptcolor:=configset.defpromp;
  1839.      urec.inputcolor:=configset.definput;
  1840.      end;
  1841.     backup:=urec.promptcolor;
  1842.     urec.promptcolor:=8;
  1843.     repeat
  1844.       ClearScr;
  1845.       inc(tries);
  1846.       if tries>3 then nicetry else begin
  1847.         chainstr:='';
  1848.         PrintXy(9,19,^R'╒═══════════════════════════════════╕');
  1849.         PrintXy(10,19,^R'│    '^S' ViSiON User Login Procedure   '^R'│'^P'█');
  1850.         PrintXy(11,19,^R'╘═══════════════════════════════════╛'^P'█');
  1851.         PrintXy(12,19,^R'╒═══════════════════════════════════╕'^P'█');
  1852.         PrintXy(13,19,^R'│ '^U'Alias '^R'»                           │'^P'█');
  1853.         PrintXy(14,19,^R'│ '^U'Password'^R' »                        │'^P'█');
  1854.         PrintXy(15,19,^R'╘═══════════════════════════════════╛'^P'█');
  1855.         PrintXy(16,21,^P'▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀');
  1856.         GoXy(28,13);
  1857.         WriteStr('*');
  1858.     unam:=input;
  1859.     isnew:=false;
  1860.     if hungupon then unum:=-1 else
  1861.     if length(unam)=0
  1862.     then newuser
  1863.     else
  1864.     if unam[length(unam)]='*' then writeLn(^M^M^M'HA!..You WISH!'^G)
  1865.     else begin
  1866.     unum:=lookupuser (unam);
  1867.     if unum=0
  1868.     then
  1869.     begin
  1870.     GoXy(21,13); writestr ('NOT FOUND! Are you new [y/n]? *');
  1871.     if yes then newuser
  1872.     end
  1873.     else if not validusername(unam) then exit;
  1874.     end
  1875.     end
  1876.     until unum<>0;
  1877.     If not Match(Input,Strr(Unum)) then writeln(^M^M^M'Use ',unum,' for faster logons!');
  1878.         bust_a_nut:=true;
  1879.     end;
  1880.  
  1881.   procedure getpwd;
  1882.   var u:userrec;
  1883.   begin
  1884.     seek (ufile,unum);
  1885.     read (ufile,u); che;
  1886.     urec:=u;
  1887.     If Bust_a_nut then Begin
  1888.     If not getloginpassword(u) then Begin
  1889.     inc(u.hackattempts);
  1890.      writeufile(u,unum);
  1891.      nicetry;
  1892.      WriteLog (0,2,unam);
  1893.     end;
  1894.     end Else
  1895.     if not checkpassword(u) then begin
  1896.     inc(u.hackattempts);
  1897.       writeufile(u,unum);
  1898.       nicetry;
  1899.       writelog (0,2,unam)
  1900.     end;
  1901.     writeln (^M);
  1902.   end;
  1903.  
  1904.   procedure inituser;
  1905.   var asc:boolean;
  1906.  
  1907.     procedure center (c:lstr; a,b:sstr);
  1908.     var cnt:integer;
  1909.         tmp:lstr;
  1910.     begin
  1911.       if asc then begin
  1912.         a:='│';
  1913.         b:=a
  1914.       end;
  1915.       fillchar (tmp[1],80,32);
  1916.       if length(a)+length(b)+length(c)>39
  1917.         then c[0]:=chr(39-length(a)-length(b));
  1918.       tmp[0]:=chr((39-length(c)-length(a)-length(b)) div 2);
  1919.       c:=a+tmp+c;
  1920.       tmp[0]:=chr(39-length(c)-length(b));
  1921.       c:=c+tmp+b;
  1922.       while c[length(c)]=' ' do c[0]:=pred(c[0]);
  1923.       writeln (c)
  1924.     end;
  1925.  
  1926.   var m:mailrec;
  1927.       kendo:integer;
  1928.       fil:file;
  1929.       cnt:integer;
  1930.       tmp:lstr;
  1931.       c:char;
  1932.       t:text;
  1933.       Dummy:SStr;
  1934.  
  1935.   Procedure CheckAgainstUnums;
  1936.   var t:text;
  1937.       I:integer;
  1938.       Ls:LStr;
  1939.       Done:Boolean;
  1940.  
  1941.   Begin
  1942.     I:=0;
  1943.     Done:=False;
  1944.       Repeat
  1945.         Inc(I);
  1946.         If Exist(ConfigSet.ForumDi+'NDST'+Strr(I)) And (I<>ConfigSet.NodeNumber)
  1947.           then Begin
  1948.             Assign(T,ConfigSet.ForumDi+'NDST'+STRR(I));
  1949.             Reset(T);
  1950.             ReadLn(T,Ls);
  1951.             If Pos(Urec.Handle,Ls)>0 then Done:=True;
  1952.             TextClose(T);
  1953.           End;
  1954.       Until Not Exist(ConfigSet.ForumDi+'NDST'+STRR(I)) or Done;
  1955.     If Done then Begin
  1956.        WriteLn(^M^G^G^G^S'How can you be logging onto the BBS twice at the same time??');
  1957.        WriteLn('I think you only need to be on the BBS once at a time. Call back later.');
  1958.        Hangup;
  1959.        Delay(500);
  1960.        EnsureClosed;
  1961.        Halt(0);
  1962.     end;
  1963.   End;
  1964.  
  1965.   const inoutstr:array [false..true] of string[3]=('Out','In');
  1966.   begin
  1967.     readurec;
  1968.     if not validusername(urec.handle) then exit;
  1969.     if ulvl=-1 then begin
  1970.       byebye ('Trashcan');
  1971.       exit
  1972.     end;
  1973.     CheckAgainstUnums;
  1974.     if not local then
  1975.     UpdateNodeStatus(Urec.Handle+' logged onto Node '+Strr(ConfigSet.NodeNumber)+' at '+BaudStr)
  1976.     else UpdateNodeStatus(Urec.Handle+' logged onto Node '+Strr(ConfigSet.NodeNumber)+' Locally');
  1977.     if withintime(configset.startpriv,configset.stoppriv) and (urec.level<configset.privlevel) then begin
  1978.        if exist(configset.textfiledi+'Privhor.bbs') then printfile(configset.textfiledi+'Privhor.BBS') else begin
  1979.        writeln('Sorry, the BBS is under "Private Hours" between ',configset.startpriv,' and');
  1980.        writeln(configset.stoppriv,'. Call back after these hours to get on. Thank you.');
  1981.        end;
  1982.     hangup;
  1983.     disconnect;
  1984.   end;
  1985.  
  1986.     if configset.iman[1] and (urec.infoform  = -1) then infoform(1);
  1987.     if configset.iman[2] and (urec.infoform2 = -1) then infoform(2);
  1988.     if configset.iman[3] and (urec.infoform3 = -1) then infoform(3);
  1989.     if configset.iman[4] and (urec.infoform4 = -1) then infoform(4);
  1990.     if configset.iman[5] and (urec.infoform5 = -1) then infoform(5);
  1991.     Who_was_last:=getlastcaller;
  1992.     if urec.realname='' then begin
  1993.     repeat
  1994.        writeln(^M^M^P'For our records we '^S'NEED'^P' your real name.'^M);
  1995.        writestr(^M^P'Please enter your '^S'REAL'^P' name:*');
  1996.      until input<>'';
  1997.      urec.realname:=input;
  1998.     end;
  1999.     if (datepart(urec.expdate)<>dateval('00/00/00')) and
  2000.     (datepart(urec.expdate)<>dateval('00/00/80')) and
  2001.      (urec.expdate<now) then begin
  2002.     if exist(configset.textfiledi+'Expired.BBS') then printfile(configset.textfiledi+'Expired.BBS') else
  2003.     begin
  2004.       writeln('Your account has expired! Contact the SysOp through feedback in order to');
  2005.       writeln('straighten this out!');
  2006.       end;
  2007.     delay(1500);
  2008.     hangup;
  2009.     disconnect;
  2010.     end;
  2011.     if ansigraphics in urec.config then begin
  2012.        clearscr;
  2013.        randomize;
  2014.        printfile(configset.textfiledi+'Welcome.'+strr(random(configset.numwelcome)+1));
  2015.        end else
  2016.        printfile(configset.textfiledi+'WELCOME.ASC');
  2017.     buflen:=0;
  2018.     Goxy(1,22);
  2019.     writestr(^P'Hit '^R'['^A'Return'^R']'^P' :*');
  2020.     if local
  2021.       then tmp:=' (Local)'
  2022.       else tmp:=' at '+baudstr;
  2023.     writelog (0,1,unam+tmp);
  2024.     ClearChain;
  2025.     with urec do begin
  2026.       inc(numon);
  2027.       numcallers:=numcallers+1;
  2028.       inc(callstoday);
  2029.       asc:=ansigraphics in config;
  2030.       if datepart(laston)<>datepart(now) then begin
  2031.         cnt:=ulvl;
  2032.         if cnt<1 then cnt:=1;
  2033.         if cnt>100 then cnt:=100;
  2034.         timetoday:=configset.usertim[cnt];
  2035.         if timelimits>0 then timetoday:=timelimits;
  2036.       end;
  2037.       if (timetillevent<timetoday+3) then begin
  2038.         writestr (^M^R^G'Due to a timed event scheduled for '^S+configset.eventtim+',');
  2039.         timetoday:=timetillevent-3;
  2040.         writeln (^R'your time today is limited to '^S,timetillevent-3,^R' mins.');
  2041.         delay(1500);
  2042.       end;
  2043.       if (timetillnet<timetoday+3) then begin
  2044.        If Length(ConfigSet.NetStc)=0 Then Dummy:=ConfigSet.NetStart
  2045.            Else Dummy:=ConfigSet.NetStc;
  2046.         writestr(^M^R^G'Due to '^A'ViSiONetmail'^R' scheduled at '^S+dummy+^R',');
  2047.         timetoday:=timetillnet-3;
  2048.         writeln(^R'Your time today is limited to '^S,timetoday,^R' mins.');
  2049.         delay(1500);
  2050.       end;
  2051.       write (^B^M);
  2052.       logontime:=timer;
  2053.       logofftime:=timer+timetoday;
  2054.       logonunum:=unum;
  2055.       subs1.laston:=laston;laston:=now;
  2056.       if exist(configset.textfiledi+'Status.Ans') and asc then begin
  2057.          clearbreak;
  2058.          mens:=true;
  2059.          nobreak:=true;
  2060.          dontstop:=true;
  2061.          PrintFile(configset.textfiledi+'STATUS.ANS');
  2062.          GoXy(1,22);
  2063.          WriteStr(^P'Press '^R'['^A'Enter'^R'] :*');
  2064.       end else if asc then begin;
  2065.       clearscr;
  2066.       if urec.statusboxcolor=0 then urec.statusboxcolor:=1;
  2067.       ansicolor(31);
  2068.       mens:=true;
  2069.       nobreak:=false;
  2070.       dontstop:=true;
  2071.   PrintXy(2,1,^R'╒════════════════════════════════╕');
  2072.   PrintXy(3,1,^R'│    '^U'ViSiON BBS Software 1991    '^R'│');
  2073.   PrintXy(4,1,^R'╘════════════════════════════════╛');
  2074.  
  2075.   PrintXy(6,1,^R+#27+'[22C╒══════════════════════════════════════════╕');
  2076.   PrintXy(7,1,^R+#27+'[22C│ '^P'User Name '^R':                              │');
  2077.   PrintXy(8,1,^R+#27+'[22C│ '^P'User Level '^R':                             │');
  2078.   PrintXy(9,1,^R+#27+'[22C│ '^P'File Level '^R':                             │');
  2079.  PrintXy(10,1,^R+#27+'[22C│ '^P'File Points '^R':                            │');
  2080.  PrintXy(11,1,^R+#27+'[22C│ '^P'Uploads '^R':                                │');
  2081.  PrintXy(12,1,^R+#27+'[22C│ '^P'Downloads '^R':                              │');
  2082.  PrintXy(13,1,^R+#27+'[22C│ '^P'Upload K '^R':                               │');
  2083.  PrintXy(14,1,^R+#27+'[22C│ '^P'Download K '^R':                             │');
  2084.  PrintXy(15,1,^R+#27+'[22C│ '^P'Account Note '^R':                           │');
  2085.  PrintXy(16,1,^R+#27+'[22C│ '^P'User Baud Rate '^R':                         │');
  2086.  PrintXy(17,1,^R+#27+'[22C│ '^P'Time Today '^R':                             │');
  2087.  PrintXy(18,1,^R+#27+'[22C│ '^P'Last User '^R':                              │');
  2088.  PrintXy(19,1,^R+#27+'[22C╘══════════════════════════════════════════╛');
  2089.  PrintXy(3,54,^R'╒══════════════════════╕');
  2090.  PrintXy(4,54,^R'│   '^U'Main User Status   '^R'│');
  2091.  PrintXy(5,54,^R'╘══════════════════════╛');
  2092.    printxy(18,37,getlastcaller);
  2093.    printxy(17,38,strr(urec.timetoday));
  2094.    Printxy(16,42,strr(urec.lastbaud));
  2095.    printxy(15,40,urec.usernote);
  2096.    printxy(14,38,strr(urec.dnkay));
  2097.    printxy(13,36,strr(urec.upkay));
  2098.    printxy(12,37,strr(urec.downloads));
  2099.    printxy(11,35,strr(urec.uploads));
  2100.    printxy(10,38,strr(urec.udpoints));
  2101.    printxy(9,38,strr(urec.udlevel));
  2102.    printxy(8,38,strr(urec.level));
  2103.    printxy(7,37,urec.handle);
  2104.  
  2105. PrintXy(16,53,^R'╒══════════════════════╕');
  2106. PrintXy(17,53,^R'│ '^P'Conference 1 '^R':       │');
  2107. PrintXy(18,53,^R'│ '^P'Conference 2 '^R':       │');
  2108. PrintXy(19,53,^R'│ '^P'Conference 3 '^R':       │');
  2109. PrintXy(20,53,^R'│ '^P'Conference 4 '^R':       │');
  2110. PrintXy(21,53,^R'│ '^P'Conference 5 '^R':       │');
  2111. PrintXy(22,53,^R'╘══════════════════════╛');
  2112.    if (urec.Conf[1]) then Printxy(17,70,'Yes')
  2113.      else printxy(17,70,'No');
  2114.    if (urec.conf[2]) then printxy(18,70,'Yes')
  2115.      else printxy(18,70,'No');
  2116.    if (urec.conf[3]) then printxy(19,70,'Yes')
  2117.      else printxy(19,70,'No');
  2118.    if (urec.conf[4]) then printxy(20,70,'Yes')
  2119.      else printxy(20,70,'No');
  2120.    if (urec.conf[5]) then printxy(21,70,'Yes')
  2121.      else printxy(21,70,'No');
  2122.  PrintXy(15,3,^R'╒═════════════════════════╕');
  2123.  PrintXy(16,3,^R'│ '^P'As of :'^R'                 │');
  2124.  PrintXy(17,3,^R'│ '^P'At    :'^R'                 │');
  2125.  PrintXy(18,3,^R'│ '^P'New Files :'^R'             │');
  2126.  PrintXy(19,3,^R'│ '^P'New Msgs :'^R'              │');
  2127.  PrintXy(20,3,^R'│ '^P'E-Mail :'^R'                │');
  2128.  PrintXy(21,3,^R'╘═════════════════════════╛');
  2129.  PrintXy(10,1,^R'╒════════════════╕');
  2130.  PrintXy(11,1,^R'│  '^U'New Stuff...  '^R'│');
  2131.  PrintXy(12,1,^R'╘════════════════╛');
  2132.    cnt:=getnummail(unum);
  2133.    PrintXy(16,13,datestr(now));
  2134.    PrintXy(17,13,timestr(now));
  2135.    PrintXy(18,17,'Scanning..');
  2136.    Delay(666);
  2137.    PrintXy(18,17,'          ');
  2138.    kendo:=gnuf-lastfiles;
  2139.    If ((kendo)>0) Then printxy(18,17,strr(kendo))
  2140.      Else printxy(18,17,'None');
  2141.    PrintXy(19,16,'Scanning..');
  2142.    Delay(666);
  2143.    PrintXy(19,16,'          ');
  2144.    kendo:=gnup-lastposts;
  2145.    If ((kendo)>0) Then printxy(19,16,strr(kendo))
  2146.      Else printxy(19,16,'None');
  2147.    PrintXy(20,14,'Scanning..');
  2148.    Delay(666);
  2149.    PrintXy(20,14,'          ');
  2150.    If ((cnt)>0) Then PrintXy(20,14,strr(cnt))
  2151.      Else PrintXy(20,14,'None');
  2152.  
  2153. (*      BoxIt(1,25,39,3);
  2154.       AnsiColor(30);
  2155.       FuckXy(2,26,' ViSiON BBS Software... ');
  2156.       ansicolor(30-2);
  2157.       write('Version '+versionnum+' ');
  2158.       ansicolor(urec.statusboxcolor);
  2159.       BoxIt(5,35,40,10);
  2160.       FuckXy(6,37,^P'User Online: '^S+Urec.Handle);
  2161.       FuckXy(7,37,^P'Last User: '^S+GetLastCaller);
  2162.       FuckXy(8,37,^P'Main Access Level: '^S+Strr(Ulvl));
  2163.       FuckXy(9,37,^P'File Level: '^S+Strr(Urec.UDLevel));
  2164.       FuckXy(10,37,^P'G-File Level: '^S+Strr(Urec.Glevel));
  2165.       FuckXy(11,37,^P'File Points: '^S+Strr(Urec.UdPoints));
  2166.       ansicolor(urec.statusboxcolor);
  2167.       Boxit(12,25,40,9);
  2168.       fuckxy(14,35,'                             ');
  2169.       FuckXy(13,35,^P'Last Call Date: '^S);
  2170.       subs1.laston:=laston;
  2171.       laston:=now;
  2172.       if datepart(subs1.laston)>0 then write(datestr(subs1.laston)) else write(^G'Never');
  2173.       FuckXy(14,35,^P'Last Call Time: '^S);
  2174.       if timepart(subs1.laston)>0 then write(timestr(subs1.laston)) else write(^G'Never');
  2175.       FuckXy(15,35,^P'Files Downloaded: '^S+Strr(Urec.Downloads));
  2176.       FuckXy(16,35,^P'Files Uploaded: '^S+Strr(Urec.Uploads));
  2177.       FuckXy(17,35,^P'Downloaded K-Bytes: '^S+StrLong(Urec.DnKay));
  2178.       FuckXy(18,27,^P'Uploaded K-Bytes: '^S+StrLong(Urec.UpKay));
  2179.       FuckXy(19,27,^P'Messages Posted: '^S+Strr(Urec.Nbu));
  2180.       laston:=urec.laston;
  2181.       urec.laston:=now;
  2182.       ansicolor(urec.statusboxcolor);
  2183.       boxit(5,2,33,13);
  2184.       fuckxy(12,25,'         ');
  2185.       for kendo:=13 to 16 do fuckxy(kendo,25,' ');
  2186.       FuckXy(6,4,^P'G-Files Sent: '^S+Strr(Urec.Nbu));
  2187.       FuckXy(7,4,^P'G-Files Received: '^S+Strr(Urec.Ndn));
  2188.       FuckXy(8,4,^P'Total Calls to the BBS: '^S+Streal(NumCallers));
  2189.       FuckXy(9,4,^P'Todays Time Limit: '^S+Strr(TimeToday)+' mins.');
  2190.       FuckXy(10,4,^P'Total Time Used: '^S+Streal(TotalTime)+' mins.');
  2191.       FuckXy(11,4,^P'New Callers: '^S);
  2192.       Kendo:=trunc(numcallers)-urec.lastcalno;
  2193.       if kendo>0 then write(Kendo) else write('None');
  2194.       FuckXy(12,4,^P'New Files: '^S);
  2195.       kendo:=gnuf-urec.lastfiles;
  2196.       if kendo>0 then write(Kendo) else Write('None');
  2197.       FuckXy(13,4,^P'New Messages: '^S);
  2198.       kendo:=gnup-urec.lastposts;
  2199.       if kendo>0 then write(Kendo) else write('None');
  2200.       FuckXy(14,4,^P'Total Calls: '^S+Strr(NumOn));
  2201.       FuckXy(15,10,^P' »» User Note ««');
  2202.       FuckXy(16,4,^A'"'^S+Urec.UserNote+^A'"');
  2203.       blowup(1,3,70,3);
  2204.            blowup(4,3,70,6);
  2205.            write(^B);
  2206.            printxy(2,22,'ViSiON Systems v.'+versionnum+' '+date);
  2207.            printxy(5,6,'User Online     :                             Number :');
  2208.            printxy(6,6,'Last User       :                        Your Call # :');
  2209.            printxy(7,6,'Total Time Used :                     Last Call Date :');
  2210.            printxy(8,6,'Todays Time     :                       Last Time on :');
  2211.            blowup(10,3,70,7);
  2212.            printxy(11,6,'Messages Posted :                     Total Uploaded :');
  2213.            printxy(12,6,'G-Files Sent    :                   Total Downloaded :');
  2214.            printxy(13,6,'G-File Downloads:                        File Points :');
  2215.            printxy(14,6,'New Callers     :                       Your Ranking :');
  2216.            printxy(15,6,'New Messages    :                          New Files :');           if hungupon then disconnect;
  2217.            printxy(17,33,' User Note');
  2218.            printzy(5,23,unam);
  2219.            printzy(6,23,getlastcaller);
  2220.            printzy(7,23,streal(totaltime)+' mins.');
  2221.            printzy(8,23,strr(timetoday)+' mins.');
  2222.            if laston>0 then Begin
  2223.            printzy(8,60,timestr(laston));
  2224.            printzy(7,60,datestr(laston));
  2225.            PrintZy(6,60,Strr(NumOn));
  2226.            end Else Begin
  2227.            Printzy(8,60,^G+'Never'+^G);
  2228.            PrintZy(7,60,^G+'Never'+^G);
  2229.            PrintZy(6,60,^G+'Never'+^G);
  2230.            End;
  2231.            printzy(5,60,streal(numcallers));
  2232.            printzy(11,23,strr(urec.nbu));
  2233.            printzy(12,23,strr(urec.nup));
  2234.            printzy(13,23,strr(urec.ndn));
  2235.            kendo:=trunc(numcallers)-urec.lastcalno;
  2236.            if kendo>0 then printzy(14,23,strr(kendo)) else
  2237.            printzy(14,23,'None');
  2238.            kendo:=gnup-urec.lastposts;
  2239.            if kendo<1 then printzy(15,23,'None') else begin
  2240.            printzy(15,23,'');  write(kendo);
  2241.            end;
  2242.            kendo:=gnuf-urec.lastfiles;
  2243.            if kendo<1 then printzy(15,60,'None') else begin
  2244.            printzy(15,60,'');write(kendo);
  2245.            end;
  2246.            printzy(14,60,strr(ulvl));
  2247.            printzy(13,60,strr(urec.udpoints));
  2248.            printzy(12,60,strr(urec.downloads));
  2249.            printzy(11,60,strr(urec.uploads));
  2250.            write(direct,#27,'[19;5H');
  2251.            kcenter (urec.usernote);
  2252. (*           subs1.laston:=laston;laston:=now; *)
  2253. (*           blowup(18,3,70,3); *)
  2254. (*       write(direct,#27,'[21;1H'); write(configset.loginheade); *)
  2255.                      fuckxy(21,1,^A+configset.loginheade);
  2256.                      clearbreak;
  2257.                      fuckxy(22,1,'');
  2258.                      buflen:=0;
  2259.  
  2260.                      writestr(^P+'Press '+^S+'['^A'Return'^S']'^P' :'+^P+'*');
  2261.                                                      end;
  2262.            if not asc    then begin
  2263.           writeln ('┌──────────[ ',versionnum,' ',date,' ]──────────┐');
  2264.       center ('Welcome, '+unam+'.','│','│');
  2265.       center ('Caller number: '+streal(numcallers),'│','│');
  2266.       center ('Last caller: '+getlastcaller,'│','│');
  2267.       center ('This is time on #'+strr(numon)+' for you.','│','│');
  2268.       center ('Total time on: '+streal(totaltime)+' mins.','│','│');
  2269.       if laston<>0 then
  2270.         center ('Last on '+datestr(laston)+' at '+timestr(laston)+
  2271.                     '.','│','│');
  2272.       subs1.laston:=laston;
  2273.       laston:=now;
  2274.       center ('Time for today: '+strr(timetoday)+' mins.','│','│');
  2275.       center ('Your ranking: Level '+strr(ulvl),'│','│');
  2276.       center ('Sysop is: '+inoutstr[sysopisavail],'│','│');
  2277.       writeln ('└─────────────────────────────────────┘'^B^M);
  2278.       end;
  2279.       if urec.udpoints<>urec.lastxferpts then writeln(^G^P'Your '^R'File X-Fer Points'^P' have changed since your last call.');
  2280.       if ulvl<>urec.lastlevel then writeln(^G^P'Your '^R'Access Level'^P' has changed since your last call.');
  2281.       if urec.hackattempts>0 then
  2282.           writeln(^G^P' There have been '^R,urec.hackattempts,^P' failed attempt(s) on your password!');
  2283.       urec.hackattempts:=0;
  2284.       CurrentConference:=Urec.LastConf;
  2285.       If Not Urec.Conf[CurrentConference] or (CurrentConference<1) or (CurrentConference>ConfigSet.NumConfs)
  2286.       then CurrentConference:=1;
  2287.       Urec.LastConf:=CurrentConference;
  2288.       If CurrentConference=1 then Tmp:=ConfigSet.Conf1
  2289.          Else if CurrentConference=2 then Tmp:=ConfigSet.Conf2
  2290.          Else if CurrentConference=3 then Tmp:=ConfigSet.Conf3
  2291.          Else if CurrentConference=4 then Tmp:=ConfigSet.Conf4
  2292.          Else if CurrentConference=5 then Tmp:=ConfigSet.Conf5;
  2293.       WriteLn(^P'Conference ['^R+tmp+^P'] has been joined.');
  2294.       if urec.totaltime<0 then totaltime:=0;
  2295.       if urec.totaltime<0 then urec.totaltime:=0;
  2296.       urec.lastxferpts:=urec.udpoints;
  2297.       urec.lastcalno:=trunc(numcallers);
  2298.       urec.lastlevel:=ulvl;
  2299.       if (datepart(urec.expdate)<>dateval('00/00/00')) and
  2300.       (datepart(urec.expdate)<>dateval('00/00/80')) then
  2301.        writeln(^G^P'Your account expires on '^R,datestr(urec.expdate),^P'!');
  2302.        if urec.revision<>lastrevision then writeln(^G^P'Adaptive upgrade ('^R,date,^P').');
  2303.        if urec.menuhighlight=0 then begin
  2304.         WriteLn(^G^P'Adaptive Upgrade ('^R'9/6/90'^P').');
  2305.     Urec.MenuHighLight:=14;
  2306.     End;
  2307.       if urec.timebank>configset.totalallowed then urec.timebank:=0;
  2308.       if urec.timebank<0 then urec.timebank:=0;
  2309.       urec.revision:=lastrevision;
  2310.       confilesa:=urec.lastfiles;
  2311.       urec.lastfiles:=gnuf;
  2312.       congfilesa:=urec.lastgfiles;
  2313.       urec.lastgfiles:=gnugfiles;
  2314.       conpostsa:=urec.lastposts;
  2315.       urec.lastposts:=gnup;
  2316.       urec.lastbaud:=connectbaud;
  2317.       if (ulvl>=configset.sysopleve) then begin
  2318.         if numfeedback>0 then begin
  2319.           thereisare (numfeedback);
  2320.           writeln ('piece',s(cnt),' of feedback waiting!  Use [%,F] to read.')
  2321.         end;
  2322.         if exist ('Errlog.')
  2323.           then writeln (^B^G'Errors have occured!  Use [%,E] to read.');
  2324.                   if exist(configset.forumdi+'Notices.BBS') then begin
  2325.         clearscr;
  2326.         printfile(configset.forumdi+'NOTICES.BBS');
  2327.         writestr(^M^S'Delete Notices file now? *');
  2328.         if yes then begin
  2329.          assign(fil,configset.forumdi+'NOTICES.BBS');
  2330.          erase(fil);
  2331.          end;
  2332.         end;
  2333.       end;
  2334.       logontime:=timer;
  2335.       logofftime:=timer+timetoday;
  2336.       logonunum:=unum
  2337.     end;
  2338.     if exist ('ad')
  2339.       then writestr ('Buy this software!  Use & to read!');
  2340.     addlastcaller (unam);
  2341.     writeurec;
  2342.     bottomline;
  2343.     if wanted in urec.config then if sysopisavail then begin
  2344.       writeln (^B,configset.sysopnam,' wishes to speak with you.');
  2345.       writeln ('Paging.. please stand by...'^M);
  2346.       for cnt:=1 to 25 do if not keyhit then summonbeep;
  2347.       chatmode:=true
  2348.     end;
  2349.     oneliners;
  2350.     smartnews;
  2351.     WriteLn('One Moment - Scanning For New Users');
  2352.     checkvot;
  2353.         (* newmailre;
  2354.         if tonext>-1 then begin
  2355.             writehdr ('Message from last user');
  2356.             printtext (tonext)
  2357.         end;
  2358.         if sysopisavail then writehdr(configset.sysopi) else writehdr(configset.sysopo); *)
  2359.         disconnected:=false
  2360.   end;
  2361.  
  2362. begin
  2363.     if local then clrscr;
  2364.   if configset.whissl then begin
  2365.      summonbeep;
  2366.      summonbeep;
  2367.      summonbeep;
  2368.   end;
  2369.   stoptimer (numminsidle);
  2370.   writestatus;
  2371.   starttimer (numminsused);
  2372.   if ansigraphics in urec.config then begin
  2373.   fillchar (urec,sizeof(urec),0);
  2374.   urec.statcolor:=configset.defstacolor;
  2375.   urec.regularcolor:=configset.defreg;
  2376.   urec.promptcolor:=configset.defpromp;
  2377.   urec.inputcolor:=configset.definput;
  2378.   urec.blowboard:=configset.defblowbor;
  2379.   urec.blowinside:=configset.defblowin;
  2380.   urec.config:=[lowercase,linefeeds,eightycols,ansigraphics,asciigraphics];
  2381.   end else begin
  2382.   fillchar(urec,sizeof(urec),0);
  2383.   urec.config:=[lowercase,linefeeds,eightycols];
  2384.   end;
  2385.   uselinefeeds:=true;
  2386.   usecapsonly:=false;
  2387.   getsystempassword;
  2388.   clearscr;
  2389.  if usedvmode then writeln('This system is currently Multi-Tasking under Desqview.'^M);
  2390.  writeln('ViSiON BBS Ver.',versionnum,' - ',date,' Online at ',timestr(now),' on ',datestr(now),'!');
  2391.  printfile(configset.textfiledi+'Prelogon.bbs');
  2392.      if configset.autologi and local and (not carrier) then begin
  2393.     unum:=lookupuser (configset.sysopnam);
  2394.     if unum=0
  2395.       then writeln (usr,'User ',configset.sysopnam,' not found!')
  2396.       else begin
  2397.         writeln (usr,'■ SYSOP AUTOLOGIN ■');
  2398.         unum:=1;
  2399.         inituser;
  2400.         exit
  2401.       end
  2402.   end;
  2403.   GoXy(1,23); WriteStr(^R'Press '^P'['^A'Enter'^P'] :*');
  2404.   getunum;
  2405.   if hungupon then exit;
  2406.   if not isnew then getpwd;
  2407.   if hungupon then exit;
  2408.   inituser
  2409. end;
  2410.  
  2411. procedure returnfromdoor;
  2412. var t:sstr;
  2413. begin
  2414.   if not fromdoor then exit;
  2415.   readdataarea;
  2416.   baudrate:=valu(paramstr(2));
  2417.   if (paramstr(2))='38400' then baudrate:=38400;
  2418.   parity:=boolean(valu(paramstr(3)));
  2419.   online:=false;
  2420.   if baudrate<>0 then online:=true;
  2421.   local:=not online;
  2422.   if baudrate=0 then baudrate:=configset.defbaudrat;
  2423.   connectbaud:=baudrate;
  2424.   if (configset.defbaudrat>=9600) then baudrate:=configset.defbaudrat;
  2425.     setparam (configset.useco,baudrate,parity);
  2426.   if unum=valu(paramstr(1)) then readurec else begin
  2427.     unum:=valu(paramstr(1));
  2428.     readurec;
  2429.     if (unum<1) or (unum>numusers) then begin
  2430.       unum:=-1;
  2431.       exit
  2432.     end;
  2433.     logontime:=timer;
  2434.     logofftime:=timer+urec.timetoday
  2435.   end;
  2436.   if hungupon then begin
  2437.     unum:=-1;
  2438.     exit
  2439.   end;
  2440.   fromdoor:=true;
  2441.   t:=paramstr(4);
  2442.   if t=''
  2443.     then returnto:='D'
  2444.     else returnto:=upcase(t[1])
  2445. end;
  2446.  
  2447. begin
  2448. end.
  2449.