home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / TIKTP12A.LZH / TICKETP.PAS < prev    next >
Pascal/Delphi Source File  |  1992-05-13  |  18KB  |  643 lines

  1. (*#module(turbo_comp=>off)*)
  2. Program TICKET(Input,Output) ;
  3.  
  4. (*
  5.      Ticket  Version 1.20 OS/2 Release 1
  6.      Copyright 1989 - Paul J. West  All Rights Reserved
  7.      OS/2 mods Copyright 1992 - Charles L. Renshaw, All Rights Reserved
  8.      Compiled With JPI TopSpeed Pascal for OS/2
  9. *)
  10.  
  11. {$V-}
  12.  
  13. IMPORT
  14.      OS2DEF(ULONG),
  15.      DOS(FILEFINDBUF,HDIR,HDIR_SYSTEM,HDIR_CREATE,EXIT_PROCESS),
  16.      PASDOS(paramcount,paramstr,getdate,gettime),
  17. {     TURBODOS,}
  18.      Utility *,
  19.      FidoNet *,
  20.      TPDate *,
  21.      TURBOSYS(_BLOCKWRITE)
  22.      ;
  23.  
  24. Const
  25.   Version  = 'V1.20.OS2.R1' ;
  26.   MaxNodes = 128 ;
  27.   MaxArea  = 256 ;
  28.  
  29. Var
  30.   LogFile  : text ;
  31.   InboundDir  : maxString;
  32.   Directory   : maxString;
  33.   LogFileName : maxString ;
  34.   Subject     : String[71] ;
  35.   ToUser      : String[35] ;
  36.   FromUser    : String[35] ;
  37.   FileCnt     : Word ;
  38.   Zone        : Word ;
  39.   Net         : Word ;
  40.   Node        : Word ;
  41.   Point       : Word ;
  42.   ToZone      : Word ;
  43.   ToNet       : Word ;
  44.   ToNode      : Word ;
  45.   ToPoint     : Word ;
  46.   Private     : Boolean ;
  47.   KillSent    : Boolean ;
  48.   ZoneGate    : Boolean ;
  49.   NodeCnt     : Word ;
  50.   AreaCnt     : Word ;
  51.   Idx         : Word ;
  52.   MsgHdr      : FidoMessageHeader ;
  53.   MsgFile     : file of char ;
  54.   NodeList    : Array[1..MaxNodes] of FidoNet_Address ;
  55.   AreaList    : Array[1..MaxArea] of String[32] ;
  56.   tstr        : maxstring;
  57.   ztstr       : array[1..255] of char;
  58.   attr        : WORD;
  59.   hndldir     : HDIR;
  60.   reslng, cnt, retn : WORD;
  61.   rsrvd       : ULONG;
  62.   DirInfo     : FILEFINDBUF ;
  63.   TimeDate    : integer ;
  64.   TimeRec     : DateTime ;
  65.   fsize       : ULONG;
  66.  
  67. Procedure GetFileDTTM(fnam : maxstring; VAR fsz : ULONG; VAR dt : datetime);
  68.  
  69. var
  70.   Xthetime    : integer;
  71.   Xdt         : datetime;
  72.   Xtstr       : maxstring;
  73.   Xztstr      : array[1..255] of char;
  74.   Xattr       : WORD;
  75.   Xhndldir    : HDIR;
  76.   Xreslng, Xcnt, Xretn : WORD;
  77.   Xrsrvd      : ULONG;
  78.   XDirInfo    : FILEFINDBUF ;
  79.  
  80. begin
  81.   dt.year := 0;
  82.   fsz := 0;
  83.   Xtstr := fnam;
  84.   StrToZ(Xtstr,Xztstr);
  85.   Xattr := 0;
  86.   Xhndldir := HDIR_CREATE;
  87.   Xcnt := 1;
  88.   Xreslng := size(XDirInfo);
  89.   Xrsrvd := 0;
  90.   Xretn := 0;
  91.   Xretn := dos.FindFirst(Xztstr,Xhndldir,Xattr,
  92.     XDirInfo,Xreslng,Xcnt,Xrsrvd) ;
  93.   if Xretn = 0 then Begin
  94.     Xthetime := XDirinfo.fdateLastWrite;
  95.     Xthetime := Xthetime << 16;
  96.     Xthetime := Xthetime + XDirInfo.ftimeLastWrite;
  97.     unpacktime(Xthetime, Xdt);
  98.     Xdt.year := Xdt.year + 80;
  99.     fsz := XdirInfo.fileSize;
  100.     dt := Xdt;
  101.   end;
  102. end;
  103.  
  104. Procedure Copyright ;
  105.  
  106. Var
  107.   Compiled : DateTime ;
  108.  
  109. Begin
  110.   UnPackTime(CompileTime,Compiled) ;
  111.   WriteLn(Output,'TICKET ',Version,' - File Announcement Program') ;
  112.   WriteLn(Output,'Copyright 1989 - Paul J. West  All Rights Reserved') ;
  113.   WriteLn(Output,'OS/2 Mods Copyright 1992 - Charles L. Renshaw,  All Rights Reserved') ;
  114.   WriteLn(Output,'Compiled ',
  115.     Date_DMA(Compiled.Month),' ',Compiled.Day,', ',Compiled.Year+1980,' at ',
  116.     PadRight(Word_To_Str(Compiled.Hour),2,'0'),':',
  117.     PadRight(Word_To_Str(Compiled.Min) ,2,'0'),':',
  118.     PadRight(Word_To_Str(Compiled.Sec) ,2,'0')) ;
  119.   WriteLn(Output,'') ;
  120. End ;
  121.  
  122. Procedure ReadPlease(KeyWord : MAXSTRING) ;
  123.  
  124. Var
  125.   PleaseFile  : Text ;
  126.   Line        : MAXSTRING ;
  127.   Tmp         : MAXSTRING ;
  128.   Found       : Boolean ;
  129.   Max         : Word ;
  130.   Idx         : Word ;
  131.  
  132. Begin
  133. {$I-}
  134.   IOCheck := FALSE;
  135.   Assign(PleaseFile,'PLEASE.ALL') ;
  136.   Reset(PleaseFile) ;
  137. {$I+}
  138.   IOCheck := TRUE;
  139.   If IOresult <> 0 Then Begin
  140.     WriteLn(Output,'Unable to find PLEASE.ALL') ;
  141.     dos.exit(EXIT_PROCESS,1);
  142.   End ;
  143.  
  144.   { Search For PLEASE Keyword }
  145.  
  146.   KeyWord := UpperCase(KeyWord) ;
  147.   Found := False ;
  148.   While (Not Eof(PleaseFile)) And (Not Found) Do Begin
  149.     ReadLn(PleaseFile,Line) ;
  150.     Line := UpperCase(Trim(Change(Line,chr(9),chr(32)))) ;
  151.     If Field(Line,' ',1) = KeyWord Then
  152.       Found := True ;
  153.   End ;
  154.  
  155.   If Not Found Then Begin
  156.     WriteLn(Output,'The Keyword ',KeyWord,' Was not found in PLEASE.ALL') ;
  157.     dos.exit(EXIT_PROCESS,1);
  158.   End ;
  159.  
  160.   { Process Nodes Listed }
  161.  
  162.   While (Not Eof(PleaseFile)) And Found Do Begin
  163.     ReadLn(PleaseFile,Line) ;
  164.     Line := Trim(Change(Line,chr(9),chr(32))) ;
  165.     Max := DCount(Line,' ') ;
  166.     If Max > 0 Then Begin
  167.       For Idx := 1 To Max Do Begin
  168.         Tmp := Field(Line,' ',Idx) ;
  169.         If Tmp = '.' Then Begin
  170.           Found := False ;
  171.         End Else Begin
  172.           NodeCnt := NodeCnt + 1 ;
  173.           If NodeCnt > MaxNodes Then Begin
  174.             WriteLn(Output,'To Many Nodes Specified - Maximum is ',MaxNodes) ;
  175.             dos.exit(EXIT_PROCESS,1);
  176.           End ;
  177.           Fido_Address(Field(Line,' ',Idx)
  178.                       ,NodeList[NodeCnt].Zone
  179.                       ,NodeList[NodeCnt].Net
  180.                       ,NodeList[NodeCnt].Node
  181.                       ,NodeList[NodeCnt].Point) ;
  182.         End ;
  183.       End ;
  184.     End ;
  185.   End ;
  186.   Close(PleaseFile) ;
  187. End ;
  188.  
  189. Procedure ReadConfig ;
  190.  
  191. Var
  192.   ConfigFile  : Text ;
  193.   Line        : MAXSTRING ;
  194.   KeyWord     : MAXSTRING ;
  195.  
  196. Begin
  197. {$I-}
  198.   IOCheck := FALSE;
  199.   Assign(ConfigFile, 'TIC.CFG') ;
  200.   Reset(ConfigFile) ;
  201. {$I+}
  202.   IOCheck := TRUE;
  203.   If IOresult <> 0 Then Begin
  204.     WriteLn(Output,'Unable to open TIC.CFG') ;
  205.     dos.exit(EXIT_PROCESS,1);
  206.   End ;
  207.  
  208.   While Not Eof(ConfigFile) Do Begin
  209.     ReadLn(ConfigFile,Line) ;
  210.     Line := UpperCase(Trim(Line)) ;
  211.     KeyWord := Field(Line,' ',1) ;
  212.     If KeyWord = 'IN' Then
  213.       InboundDir := Strip(Field(Line,' ',2),'\','T')
  214.     Else If KeyWord = 'NETMAIL' Then
  215.       Directory := Strip(Field(Line,' ',2),'\','T')
  216.     Else If KeyWord = 'NET' Then
  217.       Net := Str_To_Word(Field(Line,' ',2))
  218.     Else If KeyWord = 'NODE' Then
  219.       Node := Str_To_Word(Field(Line,' ',2))
  220.     Else If (KeyWord = 'ZONE') And (Zone = 0) Then
  221.       Zone := Str_To_Word(Field(Line,' ',2)) ;
  222.   End ;
  223.   Close(ConfigFile) ;
  224.  
  225.   ToZone  := Zone ;
  226.   ToNet   := Net ;
  227.   ToNode  := Node ;
  228.   ToPoint := Point ;
  229. End ;
  230.  
  231. Procedure ParseCommandLine ;
  232.  
  233. Var
  234.   Idx     : Word ;
  235.   Cmd     : String[2] ;
  236.   Tmp     : MAXSTRING ;
  237.  
  238. Begin
  239.   For Idx := 1 To ParamCount Do Begin
  240.     Cmd := UpperCase(Copy(ParamStr(Idx),1,2)) ;
  241.  
  242.     If      Cmd = '-M' Then
  243.       Directory  := Strip(Copy(ParamStr(Idx),3,Size(Directory)-1),'\','T')
  244.     Else If Cmd = '-I' Then
  245.       InboundDir := Strip(Copy(ParamStr(Idx),3,Size(InboundDir)-1),'\','T')
  246.     Else If Cmd = '-S' Then
  247.       Subject    := Change(Copy(ParamStr(Idx),3,Size(Subject)-1),'_',' ')
  248.     Else If Cmd = '-F' Then
  249.       FromUser   := Change(Copy(ParamStr(Idx),3,Size(FromUser)-1),'_',' ')
  250.     Else If Cmd = '-T' Then
  251.       ToUser     := Change(Copy(ParamStr(Idx),3,Size(ToUser)-1),'_',' ')
  252.     Else If Cmd = '-P' Then
  253.       Private    := True
  254.     Else If Cmd = '-K' Then
  255.      KillSent   := True
  256.     Else If Cmd = '-Z' Then
  257.       ZoneGate := True
  258.     Else If Cmd = '-A' Then Begin
  259.       AreaCnt := AreaCnt + 1 ;
  260.       If AreaCnt > MaxArea Then Begin
  261.         WriteLn('To Many Areas Specified, Maximum is ',MaxArea) ;
  262.         dos.exit(EXIT_PROCESS,1);
  263.       End ;
  264.       AreaList[AreaCnt] := Copy(ParamStr(Idx),3,Size(AreaList[AreaCnt])-1) ;
  265.     End Else If Cmd = '-L' Then Begin
  266.       LogFileName := Copy(ParamStr(Idx),3,Size(LogFileName)-1) ;
  267.       If LogFileName = '' Then LogFileName := 'TICKET.LOG' ;
  268.     End Else If Cmd = '-Q' Then Begin
  269.       Assign(Output,'NUL') ;
  270.       ReWrite(Output) ;
  271.     End Else If Cmd = '-N' Then Begin
  272.       Tmp := Copy(ParamStr(Idx),3,Size(Tmp)-1) ;
  273.       If Tmp[1] = '*' Then Begin
  274.         Delete(Tmp,1,1) ;
  275.         ReadPlease(Tmp) ;
  276.       End Else Begin
  277.         NodeCnt := NodeCnt + 1 ;
  278.         If NodeCnt > MaxNodes Then Begin
  279.           WriteLn(Output,'To Many Nodes Specified - Maximum is ',MaxNodes) ;
  280.           dos.exit(EXIT_PROCESS,1);
  281.         End ;
  282.         Fido_Address(Tmp,NodeList[NodeCnt].Zone,
  283.                          NodeList[NodeCnt].Net,
  284.                          NodeList[NodeCnt].Node,
  285.                          NodeList[NodeCnt].Point) ;
  286.       End ;
  287.     End ;
  288.   End ;
  289.   If NodeCnt = 0 Then Begin
  290.     NodeCnt := 1 ;
  291.     NodeList[NodeCnt].Zone  := Zone ;
  292.     NodeList[NodeCnt].Net   := Net ;
  293.     NodeList[NodeCnt].Node  := Node ;
  294.     NodeList[NodeCnt].Point := Point ;
  295.   End ;
  296. End ;
  297.  
  298. Function NextMessage: Word ;
  299.  
  300. Var
  301.   FileName : MAXSTRING ;
  302.   MsgNo    : Word ;
  303.   Garbage  : Word ;
  304.   cnt      : word;
  305.   MsgHigh  : Word ;
  306.  
  307. Begin
  308.   MsgHigh:= 1;
  309.   tstr := Directory+'\*.MSG';
  310.   StrToZ(tstr,ztstr);
  311.   attr := 0;
  312.   hndldir := HDIR_CREATE;
  313.   cnt := 1;
  314.   reslng := size(DirInfo);
  315.   rsrvd := 0;
  316.   retn := 0;
  317.   retn := dos.FindFirst(ztstr,hndldir,attr,DirInfo,reslng,cnt,rsrvd) ;
  318.   While retn = 0 Do Begin
  319.     MsgNo := Str_To_Word(Field(DirInfo.Name,'.',1)) ;
  320.     If MsgNo > MsgHigh Then MsgHigh := MsgNo ;
  321.     retn := dos.FindNext(hndldir,DirInfo,reslng,cnt) ;
  322.   End ;
  323.   NextMessage := MsgHigh + 1 ;
  324. End ;
  325.  
  326. Procedure StartMessage ;
  327. Var Count    : Word ;
  328.  
  329. Var
  330.   Year     : Word ;
  331.   Month    : Word ;
  332.   Day      : Word ;
  333.   Dow      : Word ;
  334.   Hour     : Word ;
  335.   Minute   : Word ;
  336.   Second   : Word ;
  337.   Sec100   : Word ;
  338.   MsgNo    : Word ;
  339.   Line     : MAXSTRING ;
  340.   DateTime : String[20] ;
  341.  
  342. Begin
  343.   Count:= 0;
  344.   WriteLn(Output,'Inbound    : ',InboundDir) ;
  345.   WriteLn(Output,'Message    : ',Directory) ;
  346.   WriteLn(Output,'From       : ',FromUser,' of ',Zone,':',Net,'/',Node,'.',Point) ;
  347.   WriteLn(Output,'To         : ',ToUser,' of ',ToZone,':',ToNet,'/',ToNode,'.',ToPoint) ;
  348.   WriteLn(Output,'Subject    : ',Subject) ;
  349.   WriteLn(Output,'') ;
  350.  
  351.   GetDate(Year,Month,Day,Dow) ;
  352.   GetTime(Hour,Minute,Second,Sec100) ;
  353.  
  354.   DateTime := PadRight(Word_To_Str(Day),2,'0')
  355.     + ' '  + Copy(Date_DMA(Month),1,3)
  356.     + ' '  + PadRight(Word_To_Str(Year),2,'0')
  357.     + '  ' + PadRight(Word_To_Str(Hour),2,'0')
  358.     + ':'  + PadRight(Word_To_Str(Minute),2,'0')
  359.     + ':'  + PadRight(Word_To_Str(Second),2,'0') ;
  360.  
  361.   FillChar(MsgHdr,Size(MsgHdr),chr(0)) ;
  362.  
  363.   If (Zone <> ToZone) And ZoneGate Then Begin
  364.     MsgHdr.DestNet   := Zone ;
  365.     MsgHdr.DestNode  := ToZone ;
  366.   End Else Begin
  367.     MsgHdr.DestNet   := ToNet ;
  368.     MsgHdr.DestNode  := ToNode ;
  369.   End ;
  370.  
  371.   MsgHdr.OrigNet   := Net ;
  372.   MsgHdr.OrigNode  := Node ;
  373.  
  374.   MsgHdr.Attribute := Msg_Local ;   { Local Bit }
  375.   If Private  Then MsgHdr.Attribute := MsgHdr.Attribute OR Msg_Private ;
  376.   If KillSent Then MsgHdr.Attribute := MsgHdr.Attribute OR Msg_Killsent ;
  377.  
  378.   Move(FromUser[1],MsgHdr.FromUser,Length(FromUser)) ;
  379.   Move(ToUser[1]  ,MsgHdr.ToUser  ,Length(ToUser)) ;
  380.   Move(Subject[1] ,MsgHdr.Subject ,Length(Subject)) ;
  381.   Move(DateTime[1],MsgHdr.DateTime,Length(DateTime)) ;
  382. {$I-}
  383.   IOCheck := FALSE;
  384.   Assign(MsgFile,Directory + '\TICKET.$$$') ;
  385.   ReWrite(MsgFile) ;
  386. {$I+}
  387.   IOCheck := TRUE;
  388.   If IOresult <> 0 Then Begin
  389.     WriteLn('Unable to create message in ',Directory) ;
  390.     dos.exit(EXIT_PROCESS,1);
  391.   End ;
  392.  
  393.   _BLOCKWRITE(MsgFile,MsgHdr,Size(MsgHdr)) ;
  394.  
  395.   (* Handle FidoNet Addressing Kludges *)
  396.  
  397.   If Zone <> ToZone Then Begin
  398.     Line := chr(1) + 'INTL'
  399.       + ' ' + Word_To_Str(ToZone)
  400.       + ':' + Word_To_Str(ToNet)
  401.       + '/' + Word_To_Str(ToNode)
  402.       + ' ' + Word_To_Str(Zone)
  403.       + ':' + Word_To_Str(Net)
  404.       + '/' + Word_To_Str(Node) + chr(13)+chr(10) ;
  405.     _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  406.   End ;
  407.  
  408.   If Point <> 0 Then Begin
  409.     Line := chr(1) + 'FMPT ' + Word_To_Str(Point) + chr(13)+chr(10) ;
  410.     _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  411.   End ;
  412.  
  413.   If ToPoint <> 0 Then Begin
  414.     Line := chr(1) + 'TOPT ' + Word_To_Str(ToPoint) + chr(13)+chr(10) ;
  415.     _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  416.   End ;
  417.  
  418.   Line := 'The Following Files were received for Processing' + chr(13)+chr(10)+chr(13)+chr(10) ;
  419.   _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  420. End ;
  421.  
  422. Procedure ProcessFile(Extn: MAXSTRING) ;
  423.  
  424. Var
  425.   TicFile  : Text ;
  426.   AreaNum  : Word ;
  427.   Line     : MAXSTRING ;
  428.   DirInfo  : FILEFINDBUF ;
  429.   Tmp      : MAXSTRING ;
  430.   AreaName : String[25] ;
  431.   FileName : String[15] ;
  432.   FileDate : String[8] ;
  433.   FileDesc : String[60] ;
  434.   FileOrig : String[15] ;
  435.   FileByte : INTEGER ;
  436.   Found    : Boolean ;
  437.   Idx      : Word ;
  438.   tstr2    : maxstring;
  439.   fname    : maxstring;
  440.   cnt      : word;
  441.  
  442. Begin
  443.   tstr := InboundDir+'\*.'+Extn;
  444.   StrToZ(tstr,ztstr);
  445.   attr := 0;
  446.   hndldir := HDIR_CREATE;
  447.   cnt := 1;
  448.   reslng := size(DirInfo);
  449.   rsrvd := 0;
  450.   retn := 0;
  451.   retn := dos.FindFirst(ztstr,hndldir,attr,DirInfo,reslng,cnt,rsrvd) ;
  452.   While retn = 0 Do Begin
  453.     fname := DirInfo.Name;
  454.     fname[0] := (DirInfo.cname::char);
  455.     WriteLn(Output,fname);
  456. {$I-}
  457.     IOCheck := FALSE;
  458.     tstr2 := InboundDir+'\'+fname;
  459.     Assign(TicFile,tstr2);
  460.     Reset(TicFile) ;
  461.     If IOresult <> 0 Then Begin
  462.       WriteLn(Output,'Unable to Open ',tstr2);
  463.       dos.exit(EXIT_PROCESS,1);
  464.     End ;
  465. {$I+}
  466.     IOCheck := TRUE;
  467.  
  468.     AreaName := '' ;
  469.     FileName := '' ;
  470.     FileDesc := '' ;
  471.     FileOrig := '' ;
  472.  
  473.     If Extn = 'FLE' Then Begin
  474.       ReadLn(TicFile,Line) ;
  475.       AreaName := Field(Line,' ',2) ;
  476.       ReadLn(TicFile,FileName) ;
  477.       ReadLn(TicFile,FileDesc) ;
  478.     End ;
  479.  
  480.     While Not Eof(TicFile) Do Begin
  481.       ReadLn(TicFile,Line) ;
  482.       Line := Trim(Line) ;
  483.       Tmp := UpperCase(Field(Line,' ',1)) ;
  484.       If (Tmp[Length(Tmp)] = ':') Then Delete(Tmp,Length(Tmp),1) ;
  485.       If Tmp = 'AREA' Then AreaName := Field(Line,' ',2) ;
  486.       If Tmp = 'FILE' Then FileName := Field(Line,' ',2) ;
  487.       If Tmp = 'DESC' Then FileDesc := Trim(Copy(Line,5,Size(FileDesc)-1)) ;
  488.       If Tmp = 'ORIGIN' Then FileOrig := Field(Line,' ',2) ;
  489.     End ;
  490.  
  491.     FileName := UpperCase(FileName) ;
  492.     AreaName := UpperCase(AreaName) ;
  493.  
  494.     If AreaCnt > 0 Then Begin
  495.       Idx := 1 ;
  496.       Found := False ;
  497.       While (Idx <= AreaCnt) And Not Found Do Begin
  498.         WriteLn(AreaName,' ',Idx,AreaList[Idx]) ;
  499.         If AreaName = AreaList[Idx] Then Found := True ;
  500.         Idx := Idx + 1 ;
  501.       End ;
  502.     End Else
  503.       Found := True ;
  504.  
  505.     If Found Then Begin
  506.       GetFileDTTM(InboundDir+'\'+FileName, fsize,TimeRec);
  507.       If TimeRec.Year = 0 Then Begin
  508.         WriteLn(Output,'Unable to Find ',InboundDir,'\',FileName) ;
  509.         FileDate := 'ERROR' ;
  510.         FileByte := 0 ;
  511.       End Else Begin
  512.         FileDate := PadRight(Word_To_Str(TimeRec.Month),2,'0')
  513.             + '/' + PadRight(Word_To_Str(TimeRec.Day),2,'0')
  514.             + '/' + PadRight(Word_To_Str(TimeRec.Year),2,'0') ;
  515.         FileByte := fsize ;
  516.       End ;
  517.  
  518.       Line := PadLeft(FileName,14,' ')
  519.             + PadLeft(FileDate,10,' ')
  520.             + PadLeft('(' + MD(FileByte,0) + ' Bytes)',20,' ')
  521.             + '  Origin: ' + FileOrig + chr(13)+chr(10) ;
  522.       _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  523.  
  524.       Line := '   ' + AreaName + '  ' + FileDesc + chr(13)+chr(10)+chr(13)+chr(10) ;
  525.       _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  526.  
  527.       If LogFileName <> '' Then Begin
  528.  {$I-}
  529.         IOCheck := FALSE;
  530.         Assign(LogFile,LogFileName) ;
  531.         Append(LogFile) ;
  532.  {$I+}
  533.         IOCheck := TRUE;
  534.         If IOresult <> 0 Then Begin
  535.  {$I-}
  536.           IOCheck := FALSE;
  537.           ReWrite(LogFile) ;
  538.  {$I+}
  539.           IOCheck := TRUE;
  540.           If IOresult <> 0 Then Begin
  541.             WriteLn(Output,'Unable to Create LogFile ') ;
  542.             LogFileName := '' ;
  543.           End ;
  544.         End ;
  545.         WriteLn(LogFile,
  546.           PadLeft(FileName,14,' '),
  547.           PadLeft(FileDate,10,' '),
  548.           PadRight(Word_To_Str(FileByte),8,' '),
  549.           '  ',AreaName,' ',FileDesc) ;
  550.         Close(LogFile) ;
  551.       End ;
  552.       FileCnt := FileCnt + 1 ;
  553.     End ;
  554.     Close(TicFile) ;
  555.     retn := dos.FindNext(hndldir,DirInfo,reslng,cnt) ;
  556.   End ;
  557. End ;
  558.  
  559. Procedure WrapUp ;
  560.  
  561. Var
  562.   OriginFile : Text ;
  563.   Line       : MAXSTRING ;
  564.   MsgName    : MAXSTRING ;
  565.   OK         : boolean;
  566.  
  567. Begin
  568.   Line := '--- Ticket ' + Version + chr(13)+chr(10) ;
  569.   _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  570.  
  571. {$I-}
  572.   IOCheck := FALSE;
  573.   Assign(OriginFile,Directory + '\ORIGIN') ;
  574.   Reset(OriginFile) ;
  575. {$I+}
  576.   IOCheck := TRUE;
  577.   If IOresult = 0 Then Begin
  578.     ReadLn(OriginFile,Line) ;
  579.     Close(OriginFile) ;
  580.     Line := ' * Origin: ' + Copy(Line,1,57) + ' '
  581.       + '(' + Word_To_Str(Zone)
  582.       + ':' + Word_To_Str(Net)
  583.       + '/' + Word_To_Str(Node)
  584.       + '.' + Word_To_Str(Point)
  585.       + ')' + chr(13)+chr(10) ;
  586.     _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  587.   End ;
  588.  
  589.   Line := chr(0) ;
  590.   _BLOCKWRITE(MsgFile,Line[1],Length(Line)) ;
  591.  
  592.   Close(MsgFile) ;
  593.   If FileCnt = 0 Then Begin
  594.     Erase(MsgFile) ;
  595.     WriteLn(Output,'No Files Processed') ;
  596.   End Else Begin
  597.     IntToStr(NextMessage,MsgName,10,OK);
  598.     MsgName := Directory + '\' + MsgName + '.MSG' ;
  599.     WriteLn(Output,MsgName) ;
  600.     Rename(MsgFile,MsgName) ;
  601.     WriteLn(Output,FileCnt,' Files Processed') ;
  602.   End ;
  603. End ;
  604.  
  605. Begin
  606.   Idx:= 0;
  607.   AreaCnt:= 0;
  608.   NodeCnt:= 0;
  609.   ZoneGate:= False;
  610.   KillSent:= False;
  611.   Private:= False;
  612.   ToPoint:= 0;
  613.   ToNode:= 0;
  614.   ToNet:= 0;
  615.   ToZone:= 0;
  616.   Point:= 0;
  617.   Node:= 0;
  618.   Net:= 0;
  619.   Zone:= 0;
  620.   FileCnt:= 0;
  621.   FromUser:= 'TICKET V1.20.OS2.1';
  622.   ToUser:= 'All';
  623.   Subject:= 'Files Received For Processing';
  624.   LogFileName:= '';
  625.   Directory:= '.';
  626.   InboundDir:= '.';
  627.   Copyright ;
  628.   ReadConfig ;
  629.   ParseCommandLine ;
  630.   For Idx := 1 To NodeCnt Do Begin
  631.     FileCnt := 0 ;
  632.     ToZone  := NodeList[Idx].Zone ;
  633.     ToNet   := NodeList[Idx].Net ;
  634.     ToNode  := NodeList[Idx].Node ;
  635.     ToPoint := NodeList[Idx].Point ;
  636.     If ToZone = 0 Then ToZone := Zone ;
  637.     StartMessage ;
  638.     ProcessFile('FLE') ;
  639.     ProcessFile('TIC') ;
  640.     WrapUp ;
  641.   End ;
  642. End.
  643.