home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / foss10.zip / DEVELOP / UTILCOLL / STATCONV.PAS < prev    next >
Pascal/Delphi Source File  |  1995-10-20  |  18KB  |  549 lines

  1. {$M 32768,0,655360}
  2. program StatConv;
  3. uses
  4.   TParam, TFileIO,
  5.   Bits,
  6.   Types, ApiInt;
  7.  
  8. type
  9.   PStatConvert    = ^TStatConvert;
  10.   TStatConvert    = object
  11.     NodeNumber    : Word;
  12.     StatType      : ( Clean, PCB12, PCB14, MG );
  13.  
  14.     constructor Init;
  15.     destructor Done;
  16.  
  17.     procedure ReadParams;
  18.     procedure MakeFiles;
  19.   end;
  20.  
  21.   BasArray        = array[1.. 4] of byte;
  22.   Ascii2          = array[1.. 2] of char;
  23.   Ascii4          = array[1.. 4] of char;
  24.   Ascii5          = array[1.. 5] of char;
  25.   Ascii6          = array[1.. 6] of char;
  26.   Ascii8          = array[1.. 8] of char;
  27.   Ascii12         = array[1..12] of char;
  28.   Ascii13         = array[1..13] of char;
  29.   Ascii15         = array[1..15] of char;
  30.   Ascii18         = array[1..18] of char;
  31.   Ascii24         = array[1..24] of char;
  32.   Ascii25         = array[1..25] of char;
  33.   Ascii27         = array[1..27] of char;
  34.   Ascii30         = array[1..30] of char;
  35.   String80        = string[80];
  36.   FileNameType    = string[80];
  37.  
  38. var
  39.   StatConvert      : PStatConvert;
  40.  
  41. constructor TStatConvert.Init;
  42. begin
  43.   dllInit( '', 0 );
  44. end; { contructor Init }
  45.  
  46. destructor TStatConvert.Done;
  47. begin
  48. end; { destructor Done }
  49.  
  50. procedure TStatConvert.ReadParams;
  51. begin
  52.   if Par^.SwAct['T'] then
  53.     if ( Par^.SwStr['T'] = 'PCB12' ) then StatType := PCB12
  54.     else if ( Par^.SwStr['T'] = 'PCB14' ) then StatType := PCB14
  55.     else if ( Par^.SwStr['T'] = 'MG' ) then StatType := MG
  56.     else StatType := PCB14
  57.   else StatType := PCB14;
  58.  
  59.   if Par^.SwAct['C'] then StatType := Clean;
  60.  
  61.   NodeNumber := S2I( Par^.Str[1] );
  62. end; { procedure ReadParams }
  63.  
  64. procedure TStatConvert.MakeFiles;
  65. var
  66.   SysCfg           : SysCfgT;
  67.   NodeCfg          : ModCfgT;
  68.   NStat            : NodeStat;
  69.   User             : LocUsers;
  70.   BBSDir           : string;
  71.   FileDir          : string;
  72.  
  73.   Procedure MKS(PReal : Real; Var BReal : BasArray);
  74.   Var
  75.     X              : Array[1..6] of byte absolute PReal;
  76.   begin { MKS }
  77.   { Flip the exponent byte and try to pretend that X[2] & X[3] never existed   }
  78.       Move(X[4],BReal[1],3);
  79.       BReal[4] := X[1];
  80.   end;  { MKS }
  81.  
  82.   Procedure WritePCB12;
  83.   type
  84.     PCB12FileType   = record             { 128 Bytes for PCBOARD version 12.1  }
  85.            Display  : Ascii2;            { Sysop's Display ON/OFF              }
  86.            Printer  : Ascii2;            { Sysop's Printer ON/OFF              }
  87.            PageBell : Ascii2;            { Sysop's Page Bell ON/OFF            }
  88.            CallAlarm: Ascii2;            { Caller Alarm ON/OFF                 }
  89.            SysopNext: Ascii2;            { Sysop "Next On" Flag                }
  90.            BaudRate : Ascii4;            { "CONNECT" Baud Rate of Caller       }
  91.            Name     : Ascii27;           { Full Name of Caller (plus 2 spaces) }
  92.            FirstName: Ascii15;           { First Name of Caller                }
  93.            Graphics : Ascii2;            { Graphics Mode of Caller             }
  94.            Password : Ascii12;           { Password of Caller                  }
  95.            RecordNum: Integer;           { User's Database Record Number (MKI$)}
  96.            TimeLogOn: BasArray;          { Time User Logged On   (MKS$ seconds)}
  97.            TimeAllow: BasArray;          { User's Allowed Time   (MKS$ seconds)}
  98.            TimeDoor : BasArray;          { Time Exited to Door   (MKS$ seconds)}
  99.            LogONStattattr : Ascii5;            { Time User Logged On          (HH:MM)}
  100.            ConfExit : Ascii2;            { Area Exited to DOS   (not converted)}
  101.            ConfFlags: Ascii18;           { Areas "Joined" Flags (not converted)}
  102.            ConfTime : Ascii2;            { Area "Bonus" Time    (not converted)}
  103.            ByteLmtDL: Ascii8;            { Daily Download Limit (not converted)}
  104.            TimeCred : Integer;           { Upload Time Bonus Earned      (MKI$)}
  105.            Language : Ascii4;            { Language Version Being Used         }
  106.            ModemType: Ascii2;            { Error Correcting Modem YES/NO       }
  107.            NodeChat : Char;              { Node Chat Status Flag               }
  108.          end;
  109.  
  110.   var
  111.     SS             : string;
  112.     P12            : PCB12FileType;
  113.     P12F           : file of PCB12FileType;
  114.     BR             : BasArray;
  115.  
  116.   begin
  117.     With P12 Do
  118.     begin
  119.       Display:='-1';
  120.       Printer:=' 0';
  121.       PageBell:=' 0';
  122.       CallAlarm:=' 0';
  123.       SysopNext:='N '; { 'N ', 'X ', '  '}
  124.       if (NStat.ConnectSpeed.ModemSpeed=0) then
  125.         BaudRate:='Loca'
  126.       Else
  127.       begin
  128.         SS:=Fill(I2S(NStat.ConnectSpeed.ModemSpeed,0),5,#32);
  129.         Move(SS[1],BaudRate,4);
  130.       end;
  131.       SS:=Fill(NStat.UserName,27,#32);
  132.       Move(SS[1],Name,27);
  133.       SS:=Fill(GetFirst(SS),15,#32);
  134.       Move(SS[1],FirstName,15);
  135.       if not (IBM In NStat.Graphics) then
  136.         Graphics:='7E'
  137.       Else if not (ANSI In NStat.Graphics) then
  138.         Graphics:=' 0'
  139.       Else
  140.         Graphics:='-1';
  141.       Password:='            ';
  142.       if (UpStr(NStat.UserName) = SysCfg.SysOpName) then
  143.         RecordNum:=1
  144.       Else
  145.         RecordNum:=2;
  146.       MKS(NStat.Connected,BR);
  147.       TimeLogOn:=BR;
  148.       MKS(NStat.TimeAllowed * 60,BR);
  149.       TimeAllow:=BR;
  150.       MKS(TimeNow,BR);
  151.       TimeDoor:=BR;
  152.       SS:=TimeStr(NStat.Connected);
  153.       Move(SS[1],LogONStattattr,5);
  154.       ConfExit:='  ';
  155.       ConfFlags:='                  ';
  156.       ConfTime:='  ';
  157.       ByteLmtDL:='0       ';
  158.       TimeCred:=0;
  159.       Language:='.   ';
  160.       Language[2] := User.Language;
  161. {      if NStat.ConnectSpeed.MNP then
  162.         ModemType:='-1'
  163.       Else}
  164.         ModemType:=' 0';
  165.       NodeChat:='U';
  166.     end;
  167.  
  168.     Assign(P12F,'TEMP\' + I2S( NStat.NodeNo, 3 ) + '\PCBOARD.'+I2S(NStat.NodeNo,0));
  169.     ReWrite(P12F);
  170.     Write(P12F,P12);
  171.     Close(P12F);
  172.  
  173.     Writeln('PCBoard version 12.0 - PCBOARD.SYS file written');
  174.   end; { Procedure WritePCB12 }
  175.  
  176.   Procedure WritePCB14;
  177.   type
  178.     PCB14FileType   = record             { 128 Bytes for PCBOARD version 14.0  }
  179.            Display  : Ascii2;            { Sysop's Display ON/OFF              }
  180.            Printer  : Ascii2;            { Sysop's Printer ON/OFF              }
  181.            PageBell : Ascii2;            { Sysop's Page Bell ON/OFF            }
  182.            CallAlarm: Ascii2;            { Caller Alarm ON/OFF                 }
  183.            SysopNext: Char;              { Sysop "Next On" Flag                }
  184.            ModemType: Ascii2;            { Error Correcting Modem YES/NO       }
  185.            Graphics : Char;              { Graphics Mode of Caller             }
  186.            NodeChat : Char;              { Available for Node Chat YES/NO      }
  187.            BaudOpen : Ascii5;            { Baud Rate to Open Modem at          }
  188.            BaudRate : Ascii5;            { "CONNECT" Baud Rate of Caller       }
  189.            RecordNum: Integer;           { User's Database Record Number (MKI$)}
  190.            FirstName: Ascii15;           { First Name of Caller                }
  191.            Password : Ascii12;           { Password of Caller                  }
  192.            TimeLogOn: Integer;           { Time User Logged On   (MKI$ minutes)}
  193.            TimeUsed : Integer;           { Time Used Today       (MKI$ minutes)}
  194.            LogONStattattr : Ascii5;            { Time User Logged On       (HH:MM:SS)}
  195.            TimeLimit: Integer;           { Daily Time Limit      (MKI$ minutes)}
  196.            ByteLmtDL: Integer;           { Daily Download Limit  (MKI$ K-bytes)}
  197.            ConfExit : Char;              { Conference (Area) User Exited From  }
  198.            ConfFlags: Ascii5;            { Areas User Has "Joined" Today       }
  199.            ConfScan : Ascii5;            { Areas User Has Scanned for New Mail }
  200.            ConfTime : Integer;           { Area "Bonus" Time     (MKI$ minutes)}
  201.            TimeCred : Integer;           { Upload Time Credit    (MKI$ minutes)}
  202.            Language : Ascii4;            { Language Version Being Used         }
  203.            Name     : Ascii25;           { Full Name of Caller   (First & Last)}
  204.            TimeLeft : Integer;           { Session Time Remaining(MKI$ minutes)}
  205.            NodeNum  : Char;              { BBS Node Number That Caller is Using}
  206.            EventTime: Ascii5;            { Scheduled EVENT Time         (HH:MM)}
  207.            EventFlag: Ascii2;            { Is EVENT Time Active?               }
  208.            EventMove: Ascii2;            { Delay EVENT Until User Logs Off?    }
  209.            MsgRecall: BasArray;          { "Memorized" Message Number    (MKS$)}
  210.            ComPortID: Char;              { Com Port Number (0, 1, 2)           }
  211.            Reserved : Ascii2;            { Reserved for Future Use             }
  212.          end;
  213.  
  214.     PCB14UsersType  = record
  215.            Name     : Ascii25;
  216.            CityState: Ascii24;
  217.            Password : Ascii12;
  218.            WPhone   : Ascii13;
  219.            HPhone   : Ascii13;
  220.            LastDate : Ascii6;
  221.            LastTime : Ascii5;
  222.            Expert   : Char;
  223.            Protocol : Char;
  224.            RFU1     : Char;
  225.            LastNew  : Ascii6;
  226.            SecLevel : Byte;
  227.            Times    : Integer;
  228.            PageLen  : Byte;
  229.            Uploads  : Integer;
  230.            Downloads: Integer;
  231.            DailyDown: Ascii8;
  232.            ToDayDown: Ascii8;
  233.            UserCom  : Ascii30;
  234.            SysOpCom : Ascii30;
  235.            TimeUsed : Integer;
  236.            SubDate  : Ascii6;
  237.            SubLevel : Byte;
  238.            Area     : Byte;
  239.            AreaReg  : Ascii5;
  240.            AreaExp  : Ascii5;
  241.            AreaScan : Ascii5;
  242.            DownByte : Ascii8;
  243.            UpByte   : Ascii8;
  244.            DelFlag  : Char;
  245.            LastRead : array[0..39] of BasArray;
  246.            RFU2     : array[1..15] of Char;
  247.          end;
  248.  
  249.   var
  250.     SS             : string;
  251.     P14            : PCB14FileType;
  252.     P14F           : file of PCB14FileType;
  253.     U14            : PCB14UsersType;
  254.     U14F           : file of PCB14UsersType;
  255.     BR             : BasArray;
  256.     TT             : Text;
  257.     LL             : Integer;
  258.  
  259.   begin
  260.     { '-1'= On, ' 0'= Off }
  261.  
  262.     With P14 Do
  263.     begin
  264.       Display:='-1';
  265.       Printer:=' 0';
  266.       PageBell:=' 0';
  267.       CallAlarm:=' 0';
  268.       SysopNext:='N';
  269. {      if NStat.ConnectSpeed.MNP then
  270.         ModemType:='-1'
  271.       Else}
  272.         ModemType:=' 0';
  273.       if not (IBM In NStat.Graphics) then
  274.         Graphics:='7'
  275.       Else if not (ANSI In NStat.Graphics) then
  276.         Graphics:='N'
  277.       Else
  278.         Graphics:='Y';
  279.       NodeChat:='U';
  280.       SS:=Fill(I2S(NStat.BaudRate,0),5,#32);
  281.       Move(SS[1],BaudOpen,5);
  282.       if (NStat.ConnectSpeed.ModemSpeed=0) then
  283.         BaudRate:='Local'
  284.       Else
  285.       begin
  286.         SS:=Fill(I2S(NStat.ConnectSpeed.ModemSpeed,0),5,#32);
  287.         Move(SS[1],BaudRate,5);
  288.       end;
  289.       if (UpStr(NStat.UserName) = SysCfg.SysOpName) then
  290.         RecordNum:=1
  291.       Else
  292.         RecordNum:=2;
  293.       SS:=NStat.UserName;
  294.       SS:=Fill(GetFirst(SS),15,#32);
  295.       Move(SS[1],FirstName,15);
  296.       Password:='            ';
  297.       TimeLogOn:=NStat.Connected div 60;
  298.       TimeUsed:=-(NStat.TimeAllowed-NStat.TimeLeft);
  299.       SS:=TimeStr(NStat.Connected);
  300.       Move(SS[1],LogONStattattr,5);
  301.       TimeLimit:=NStat.TimeAllowed;
  302.       ByteLmtDL:=0;
  303.       ConfExit:=' ';
  304.       ConfFlags:='     ';
  305.       ConfScan:='     ';
  306.       ConfTime:=0;
  307.       TimeCred:=0;
  308.       Language:='.   ';
  309.       Language[2] := User.Language;
  310.       SS:=Fill(NStat.UserName,25,#32);
  311.       Move(SS[1],Name,25);
  312.       TimeLeft:=NStat.TimeLeft;
  313.       SS:=Char(Byte(NStat.NodeNo));
  314.       Move(SS[1],NodeNum,1);
  315.       EventTime:='00:00';
  316.       EventFlag:=' 0';
  317.       EventMove:='-1';
  318.       MKS(0,BR);
  319.       MsgRecall:=BR;
  320.       SS:=I2S(NStat.ComPort,1);
  321.       Move(SS[1],ComPortID,1);
  322.       Reserved:='  ';
  323.     end;
  324.  
  325.     Assign(P14F,'TEMP\' + I2S( NStat.NodeNo, 3 ) + '\PCBOARD.SYS');
  326.     ReWrite(P14F);
  327.     Write(P14F,P14);
  328.     Close(P14F);
  329.  
  330.     Writeln('PCBoard version 14.0 - PCBOARD.SYS file written');
  331.  
  332.     Assign(TT,'TEMP\' + I2S( NStat.NodeNo, 3 ) +'\PCBOARD.DAT');
  333.     ReWrite(TT);
  334.  
  335.     Writeln(TT,'*** PCBoard Version 14.0 data pcbfile ***');
  336.     Writeln(TT,'SysOp');
  337.     Writeln(TT,'PASSWORD');
  338.     Writeln(TT,'-1');
  339.     Writeln(TT,'-1');
  340.  
  341.     For LL:=1 To 18 Do
  342.       Writeln(TT,'100');
  343.  
  344.     GetDir( 0, SS );
  345.     SS:= SS + '\TEMP\' + I2S( NStat.NodeNo, 3 ) + '\';
  346.  
  347.     For LL:=1 To 5 Do
  348.       Writeln(TT,SS);
  349.  
  350.     Writeln(TT,SS+'USERS');
  351.     Writeln(TT,SS+'CALLER');
  352.     Writeln(TT,SS+'CNAMES');
  353.     Writeln(TT,SS+'PWRD');
  354.     Writeln(TT,SS+'FSEC');
  355.     Writeln(TT,SS+'UPSEC');
  356.     Writeln(TT,SS+'TCAN');
  357.     Writeln(TT,SS+'WELCOME');
  358.     Writeln(TT,SS+'NEWUSER');
  359.     Writeln(TT,SS+'CLOSED');
  360.     Writeln(TT,SS+'WARNING');
  361.     Writeln(TT,SS+'EXPIRED');
  362.     Writeln(TT,SS+'USERNET.DAT');
  363.     Writeln(TT,SS+'CNFN');
  364.     Writeln(TT,SS+'NEWASK');
  365.     Writeln(TT,SS+'NEWREG');
  366.     Writeln(TT,SS+'PCBPROT.DAT');
  367.     Writeln(TT,SS+'DOWNLOAD.TXT');
  368.     Writeln(TT,SS+'SCRIPT0');
  369.     Writeln(TT,SS+'ANStattatWER0');
  370.     Writeln(TT,SS+'PCBML.DAT');
  371.     Writeln(TT,SS+'GTOPIC');
  372.  
  373.     Writeln(TT,'15');
  374.  
  375.     Writeln(TT,'COM'+I2S(NStat.ComPort,1)+':');
  376.     Writeln(TT,I2S(NStat.BaudRate,0));
  377.     Writeln(TT,'-1');
  378.     Writeln(TT,'ATM0H0');
  379.     Writeln(TT,'ATM0H1');
  380.  
  381.     For LL:=1 To 9 Do
  382.       Writeln(TT,'0');
  383.  
  384.     Writeln(TT,'00:01');
  385.     Writeln(TT,'23:59');
  386.     Writeln(TT,'0');
  387.     Writeln(TT,'0');
  388.     Writeln(TT,'-1');
  389.     Writeln(TT,'0');
  390.     Writeln(TT,'0');
  391.     Writeln(TT,'-1');
  392.     Writeln(TT,'0');
  393.     Writeln(TT,'0');
  394.     Writeln(TT,'-1');
  395.     Writeln(TT,'0');
  396.     Writeln(TT,'0');
  397.     Writeln(TT,'-1');
  398.     Writeln(TT,'0');
  399.     Writeln(TT,'-1');
  400.     Writeln(TT,'-1');
  401.     Writeln(TT,'-1');
  402.     Writeln(TT,'-1');
  403.     Writeln(TT,'0');
  404.     Writeln(TT,'-1');
  405.     Writeln(TT,'-1');
  406.     Writeln(TT,'0');
  407.     Writeln(TT,'5');
  408.     Writeln(TT,'-1');
  409.     Writeln(TT,I2S(NStat.NodeNo,0));
  410.     Writeln(TT,'20');
  411.     Writeln(TT,'99');
  412.     Writeln(TT,'Bits & Bytes');
  413.     Writeln(TT,'Leave a comment for the sysops (Enter)=no');
  414.     Writeln(TT,'What is your PCBoard S/N');
  415.     For LL:=1 To 10 Do
  416.       Writeln(TT,'');
  417.     Writeln(TT,'X');
  418.     Writeln(TT,'9');
  419.     Writeln(TT,'99');
  420.     Writeln(TT,'37');
  421.     Writeln(TT,'0');
  422.     Writeln(TT,' 0');
  423.     Writeln(TT,'16:30');
  424.     Writeln(TT,'1');
  425.     Writeln(TT,'0');
  426.     Writeln(TT,'0');
  427.     Writeln(TT,'8');
  428.     Writeln(TT,'0');
  429.     Writeln(TT,'1');
  430.     Writeln(TT,'0');
  431.  
  432.     For LL:=1 To 30 Do
  433.       Writeln(TT,'9');
  434.  
  435.     Close(TT);
  436.  
  437.     Writeln('PCBoard version 14.0 - PCBOARD.DAT file written');
  438.  
  439.     With U14 Do
  440.     begin
  441.       SS:=Fill(NStat.UserName,25,#32);
  442.       Move(SS[1],Name,25);
  443.       SS:=Fill(NStat.City,24,#32);
  444.       Move(SS[1],CityState,24);
  445.       WPhone   :='             ';
  446.       HPhone   :='             ';
  447.       LastDate :='810101';
  448.       LastTime :='01:01';
  449.       Expert   :='Y';
  450.       Protocol :='Z';
  451.       LastNew  :='810101';
  452.       SecLevel :=9;
  453.       Times    :=1;
  454.       PageLen  :=23;
  455.       UpLoads  :=0;
  456.       Downloads:=0;
  457.       DailyDown:='        ';
  458.       TodayDown:='        ';
  459.       UserCom  :='                              ';
  460.       SysOpCom :='                              ';
  461.       TimeUsed :=0;
  462.       SubDate  :='810101';
  463.       SubLevel :=9;
  464.       Area     :=0;
  465.       AreaReg  :=#0#0#0#0#0;
  466.       AreaExp  :=#0#0#0#0#0;
  467.       AreaScan :=#0#0#0#0#0;
  468.       DownByte :='        ';
  469.       UpByte   :='        ';
  470.       DelFlag  :='N';
  471.       MKS(0,BR);
  472.       For LL:=0 To 39 Do
  473.         LastRead[LL]:=BR;
  474.     end;
  475.  
  476.     Assign(U14F,'TEMP\' + I2S( NStat.NodeNo, 3 ) +'\USERS');
  477.     ReWrite(U14F);
  478.     Write(U14F,U14);
  479.     Write(U14F,U14);
  480.     Close(U14F);
  481.  
  482.     Writeln('PCBoard version 14.0 - USERS file written');
  483.   end; { Procedure WritePCB14 }
  484.  
  485. {}procedure WriteMG;
  486.   var
  487.     MGFile         : TFile;
  488.  
  489.   begin
  490.     with MGFile do
  491.     begin
  492.       Assign( FileDir + '\USERINFO.TXT',
  493.               fmWriteOnly or fmExclusive,
  494.               1,
  495.               faNormalAccess,
  496.               ftMaxTimeout );
  497.       ReWrite;
  498.       WriteTextln( NStat.UserName );
  499.       WriteTextln( I2S( NStat.BaudRate, 0 ));
  500.       WriteTextln( '8');
  501.       WriteTextln( I2S( NStat.TimeAllowed * 60 - TimeUsed( NStat.Connected, TimeNow ), 0 ));
  502.       Close;
  503.     end;
  504.     Writeln('Milton Gameworks - USERINFO.TXT file written');
  505. {}end; { Procedure WriteMG }
  506.  
  507. begin
  508.   if not fioReadMainCfg( SysCfg ) or
  509.      not fioReadNodeCfg( NodeCfg, NodeNumber ) or
  510.      not fioGetNodeStatus( NStat, NodeNumber ) or
  511.      not fioReadLocalUsr( User, NStat.UserPos ) then
  512.   begin
  513.     Writeln( 'Unable to collect information' );
  514.     Exit;
  515.   end;
  516.  
  517.   GetDir( 0, BBSDir );
  518.   FileDir := BBSDir + '\TEMP\' + I2S( NodeNumber, 3 );
  519.  
  520.   case StatType of
  521.     Clean:;
  522.     PCB12: WritePCB12;
  523.     PCB14: WritePCB14;
  524.     MG: WriteMG;
  525.   end;
  526. end; { procedure MakeFiles }
  527.  
  528. begin
  529.   Writeln;
  530.   Writeln( 'StatConv v1.03 - Create files for door usage' );
  531.   Writeln;
  532.  
  533.   if not ( Par^.Count = 1 ) then
  534.   begin
  535.     Writeln( 'Usage:' );
  536.     Writeln( '   StatConv {-T[PCB12|PCB14|MG]|-C} [node#]' );
  537.     Writeln;
  538.     Writeln( '   -T           Type of door-info files to make (PCBoard v12, v14 or Milton Gameworks)' );
  539.     Writeln( '                (Default: PCBoard v14)' );
  540.     Writeln( '   -C           Clean up alle StatConv made files' );
  541.     Writeln( '   node#        Number of node' );
  542.     Exit;
  543.   end;
  544.  
  545.   New( StatConvert, Init );
  546.   StatConvert^.ReadParams;
  547.   StatConvert^.MakeFiles;
  548.   Dispose( StatConvert, Done );
  549. end. { program StatConv }