home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / burroughs / b79ker.alg < prev    next >
Text File  |  2020-01-01  |  295KB  |  3,646 lines

  1.  $RESET LIST                                                            00000100
  2. %#PP                                  %LOCAL PATCH IN DCALGOL-COMPILER. 00000200
  3.                                       %THIS PATCH MAKES THIS PROGRAM    00000300
  4.                                       %PRIVILEGED,NECESSARY TO CALL     00000400
  5.                                       %DIRREQUEST.                      00000500
  6.                                       %IF YOU DON'T HAVE THIS PATCH,    00000600
  7.                                       %COMPILE THIS PROGRAM WITH ALGOL  00000700
  8.                                       %AND PP THE PROGRAM ON THE SPO.   00000800
  9.                                                                         00000900
  10.                                                                         00001000
  11.                                                                         00001100
  12. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00001200
  13. %       THIS PROGRAM USES A LIBRARY CALLED  DIRSEARCH.              %   00001300
  14. %       DIRREQUEST : GETS THE REQUESTED DIRECTORY.                  %   00001400
  15. %       GETTITLE   : GIVES THE NEXT TITLE IN THE DIRECTORY.         %   00001500
  16. %       TITLESTART : WHERE TO FIND THE TITLE.                       %   00001600
  17. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00001700
  18.                                                                         00001800
  19.                                                                         00001900
  20.                                                                         00002000
  21. $PAGE                                                                   00002100
  22. BEGIN                                                                   00002200
  23. LIBRARY DIRSEARCH (TITLE="*LIBRARY/DIRSEARCH ON APPL.");                00002300
  24. BOOLEAN PROCEDURE DIRREQUEST (PDEST, SPEC); VALUE PDEST, SPEC;          00002400
  25. %                 ----------                                            00002500
  26. POINTER PDEST; BOOLEAN SPEC; LIBRARY DIRSEARCH;                         00002600
  27. BOOLEAN PROCEDURE DIRSIZE (FILES, SEGS); INTEGER FILES, SEGS;           00002700
  28. %                 -------                                               00002800
  29. LIBRARY DIRSEARCH;                                                      00002900
  30. INTEGER PROCEDURE DISPLAYFILEKIND (INFO, DEST); VALUE INFO, DEST;       00003000
  31. %                 ---------------                                       00003100
  32. REAL INFO; POINTER DEST; LIBRARY DIRSEARCH;                             00003200
  33. INTEGER PROCEDURE DISPLAYREQUEST (PT); VALUE PT; POINTER PT;            00003300
  34. %                 --------------                                        00003400
  35. LIBRARY DIRSEARCH;                                                      00003500
  36. BOOLEAN PROCEDURE GETDIRECTORY (US); ARRAY US [0];                      00003600
  37. %                 -------------                                         00003700
  38. LIBRARY DIRSEARCH;                                                      00003800
  39. BOOLEAN PROCEDURE GETTITLE (H); ARRAY H [0]; LIBRARY DIRSEARCH;         00003900
  40. %                 --------                                              00004000
  41. BOOLEAN PROCEDURE INITDIR (MSK); VALUE MSK; REAL MSK;                   00004100
  42. %                 -------                                               00004200
  43. LIBRARY DIRSEARCH;                                                      00004300
  44. INTEGER PROCEDURE TITLESTART; LIBRARY DIRSEARCH;                        00004400
  45. %                 ----------                                            00004500
  46. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00004600
  47. %                                                                     % 00004700
  48. %     K E R M I T  -  B U R .                                         % 00004800
  49. %     -----------------------                                         % 00004900
  50. %     File  Transfer Utility .                                        % 00005000
  51. %                                                                     % 00005100
  52. %     Burroughs 7900  KERMIT, Eindhoven University of Technology,     % 00005200
  53. %     Netherland, 1984 .                                              % 00005300
  54. %                                                                 THS % 00005400
  55. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00005500
  56. %                                                                       00005600
  57. %                                                                       00005700
  58. %                                                                       00005800
  59.  FILE    FILOUT   ( KIND = REMOTE           ,                           00005900
  60.                     MAXRECSIZE = 1628       ,                           00006000
  61.                     FILETYPE = 3            ,                           00006100
  62.                     UNITS = CHARACTERS      ,                           00006200
  63.                     MYUSE = OUT     )       ,                           00006300
  64.                                                                         00006400
  65.          FILIN    ( KIND = REMOTE           ,                           00006500
  66.                     MAXRECSIZE  = 96        ,                           00006600
  67.                     FILETYPE = 3            ,                           00006700
  68.                     UNITS = CHARACTERS      ,                           00006800
  69.                     MYUSE = IN      )       ,                           00006900
  70.                                                                         00007000
  71.          FILSTORE ( KIND = DISK             ,                           00007100
  72.                     PROTECTION =SAVE)       ,                           00007200
  73.                                                                         00007300
  74.          FILGET   ( KIND = DISK     )       ,                           00007400
  75.                                                                         00007500
  76.          JOURNAAL ( KIND = PRINTER          ,                           00007600
  77.                     MAXRECSIZE = 135        ,                           00007700
  78.                     FILETYPE = 3            ,                           00007800
  79.                     UNITS = CHARACTERS      ,                           00007900
  80.                     MYUSE = OUT             ,                           00008000
  81.                     TITLE = "KERMIT/LOG."   ,                           00008100
  82.                     PROTECTION = SAVE)      ,                           00008200
  83.                                                                         00008300
  84.          WARNINGS ( KIND = DISK             ,                           00008400
  85.                     MAXRECSIZE = 80         ,                           00008500
  86.                     BLOCKSIZE  = 240        ,                           00008600
  87.                     UNITS = 1               ,                           00008700
  88.                     NEWFILE    = FALSE      ,                           00008800
  89.                     PROTECTION = SAVE       ,                           00008900
  90.                     TITLE = "KERMIT/WARNINGS."),                        00009000
  91.                                                                         00009100
  92.          KERMHELP ( KIND = DISK             ,                           00009200
  93.                     FILETYPE = 7            ,                           00009300
  94.                     TITLE ="DATA/KERMITHELP ON APPL.");                 00009400
  95.                                                                         00009500
  96. $PAGE                                                                   00009600
  97. EBCDIC ARRAY                                                            00009700
  98.          COMMAND    ,                    % FOR THE PROCESINPUT          00009800
  99.                                                                         00009900
  100.          RECVPACKET [ 1:96 ] ,           % RECEIVE PACKET WITHOUT EOL   00010000
  101.                                                                         00010100
  102.          SENDPACKET ,                    % SENDING PACKET WITH EOL      00010200
  103.          OLDPACKET  [ 1:97 ] ,           % FOR RESENDING A PACKET       00010300
  104.          PADARR     [1:20],              % CONTAINS PADDING CHARACTERS  00010400
  105.          RECSTORE   ,                    % FOR WRITING TO DISKFILE      00010500
  106.          RECBUF     [ 1:255 ],           % FOR READING FROM DISKFILE    00010600
  107.          BINRECSTORE,                                                   00010700
  108.          BINRECBUF  [ 1:512 ],                                          00010800
  109.                                          % AND BUFFER DATAPART OF PACKET00010900
  110.                                                                         00011000
  111.          SCRATCH    ,                                                   00011100
  112.          DIRIN      [ 1:100 ] ;          % CONTAINS FILEID OR DIRECTORY 00011200
  113.                                          % OF FILE(S) TO BE SEND        00011300
  114. REAL ARRAY                                                              00011400
  115.          DIRTITEL   [ 0:99 ] ;           %                              00011500
  116. %                                                                       00011600
  117. POINTER   PSEND       ,                                                 00011700
  118.           PRECV       ,                                                 00011800
  119.           POLD        ,                                                 00011900
  120.           PCMD        ,                                                 00012000
  121.           PCALC       ,                                                 00012100
  122.           PSTORE      ,                                                 00012200
  123.           PRCBUF      ,                                                 00012300
  124.           PBINRECBUF  ,                                                 00012400
  125.           PBINRECSTORE,                                                 00012500
  126.           PDIRTITEL   ,                                                 00012600
  127.           PSCRATCH    ,                                                 00012700
  128.           PDIRIN      ,                                                 00012800
  129.           HOLDPDIRIN  ;                                                 00012900
  130. %                                                                       00013000
  131. BOOLEAN   BEXIT       ,                  % EXIT FROM KERMIT             00013100
  132.           QUOTESEEN   ,                  % TRUE IF QCTL SEEN            00013200
  133.           CRSEEN      ,                  % TRUE IF CR SEEN              00013300
  134.           REPTSEEN    ,                  % TRUE IF REPT SEEN            00013400
  135.           CHARBIT8    ,                  % TRUE IF 8th BIT IS SET       00013500
  136.           RECV        ,                  % TRUE = GOOD PACKET ARRIVAL   00013600
  137.           EMPTYBUF    ,                  % TRUE = REC OR DATAPACK EMPTY 00013700
  138.           BEOF        ,                  % END OF FILE                  00013800
  139.           DOEOL       ,                  % END OF RECORD ENCOUNTERED    00013900
  140.           WAITWITHEOL ,                  % DO EOL AFTERWARDS            00014000
  141.           DEBUG       ,                  % TRUE = LOG WANTED            00014100
  142.           SERVERMODE  ,                  % TRUE = SEND ERRORPACKET      00014200
  143.           DIRREQUESTRESULT,                                             00014300
  144.           FIRSTFILETOSEND,               % TRUE = SEND INIT             00014400
  145.           DIRECTORY,                     % TRUE = SEND DIRECTORY        00014500
  146.           BINARY,                        % TRUE = I WANT TO DO          00014600
  147.                                          %        8-BIT QUOTING         00014700
  148.           STOPBINARY,                    % TRUE = THE OTHER SIDE CAN'T  00014800
  149.                                          %        DO 8-BIT QUOTING      00014900
  150.           REPEAT,                        % TRUE = DO DATA COMPRESSION   00015000
  151.           RECEIVEMODE,                   % TRUE = RECEIVING             00015100
  152.           EXTENSION,                     % TRUE = EXTEND WITH FILEKIND  00015200
  153.           RECDIR,                        % TRUE = RECeive DIRectory SET 00015300
  154.           SENDDIR,                       % TRUE = SEND DIRectory SET    00015400
  155.           SKIPFIRSTFILE ;                % TRUE = FILEID. AND DIRECTORY 00015500
  156.                                          %        ARE IDENTICAL         00015600
  157. $PAGE                                                                   00015700
  158. INTEGER   DELAY       ,                                                 00015800
  159. %                                                                       00015900
  160.           SENDCOUNT   ,                  % (LENGTH - 2) OF SENDPACKET   00016000
  161.           RECVCOUNT   ,                  % (LENGTH - 2) OF RECVPACKET   00016100
  162.           OLDCOUNT    ,                  % LENGTH OF RESENDPACKET       00016200
  163.           LEN         ,                  % LENGTH OD DATA - PART        00016300
  164. %                                                                       00016400
  165.           SEQNUM      ,                                                 00016500
  166.           SENDSEQ     ,                                                 00016600
  167.           RECVSEQ     ,                                                 00016700
  168. %                                                                       00016800
  169.           SENDPACKSIZE,                                                 00016900
  170.           RECVPACKSIZE,                                                 00017000
  171. %                                                                       00017100
  172.           MYTIMEOUT   ,                                                 00017200
  173.           THEIRTIMEOUT,                                                 00017300
  174. %                                                                       00017400
  175.           MYPAD       ,                                                 00017500
  176.           SENDPAD     ,               % NUMBER OF PADDING CHARACTERS    00017600
  177. %                                                                       00017700
  178.           CHECK       ,                                                 00017800
  179.           RECVCHECK   ,                                                 00017900
  180.           CHECKTYPE   ,                                                 00018000
  181.           RECVCHKTYPE ,                                                 00018100
  182. %                                                                       00018200
  183.           RUNSTATE    ,                                                 00018300
  184.           STATE       ,                                                 00018400
  185. %                                                                       00018500
  186.           NUMCHAR     ,                                                 00018600
  187.           ROOM        ,                                                 00018700
  188. %                                                                       00018800
  189.           NUMTRY      ,                                                 00018900
  190.           MAXTRY      ,                                                 00019000
  191. %                                                                       00019100
  192.           NUMSENDPACK ,                                                 00019200
  193.           NUMRECVPACK ,                                                 00019300
  194.           NUMACK      ,                                                 00019400
  195.           NUMNAK      ,                                                 00019500
  196.           NUMACKRECV  ,                                                 00019600
  197.           NUMNAKRECV  ,                                                 00019700
  198.           NUMBADRECV  ,                                                 00019800
  199. %                                                                       00019900
  200.           SENDFILEKINDV   ,              %                              00020000
  201.           RECFILEKINDV    ,              %                              00020100
  202.           SENDMAXRECSIZEV ,              % NECESSARY TO                 00020200
  203.           RECMAXRECSIZEV  ,              % HANDLE FILE                  00020300
  204.           MAXRECCHAR  ,                  % TRANSPORT ON                 00020400
  205.           RECTYPE      ,                 % THE B7700                    00020500
  206.           TEXTWIDTH   ,                  %                              00020600
  207.           SEQWIDTH    ,                  %                              00020700
  208.           SSEQ        ,                  %                              00020800
  209.           SEQCOUNT    ,                  %                              00020900
  210. %                                                                       00021000
  211.           CRLFSEEN    ,                  % TO AVOID SUPERFLUOUS NEWLINES00021100
  212.           K           ,                                                 00021200
  213.           LOFSCRATCH  ,                  % LENGTH OF RECeive DIRectory  00021300
  214.           LOFSENDDIR  ,                  % LENGTH OF SEND DIRectory     00021350
  215.           COUNT       ;                  % FOR REPEAT COUNT PROCESSING  00021400
  216. $PAGE                                                                   00021500
  217. REAL      MYSOP       ,                                                 00021600
  218.           SENDSOP     ,                                                 00021700
  219. %                                                                       00021800
  220.           PACKETTYPE  ,                                                 00021900
  221.           RECVPTYPE   ,                                                 00022000
  222.           SENDPTYPE   ,                                                 00022100
  223. %                                                                       00022200
  224.           MYPADCHAR   ,                                                 00022300
  225.           SENDPADCHAR ,                                                 00022400
  226. %                                                                       00022500
  227.           MYEOL       ,                                                 00022600
  228.           SENDEOL     ,                                                 00022700
  229. %                                                                       00022800
  230.           MYQUOTE     ,                                                 00022900
  231.           SENDQUOTE   ,                                                 00023000
  232. %                                                                       00023100
  233.           MY8BQ       ,                                                 00023200
  234.           SEND8BQ     ,                                                 00023300
  235. %                                                                       00023400
  236.           MYREPT      ,                                                 00023500
  237.           SENDREPT    ,                                                 00023600
  238. %                                                                       00023700
  239.           HELPPARM    ,                  % PARAMETER FOR THE HELPPROC.  00023800
  240.           LASTCHAR    ,                                                 00023900
  241.           TSV         ;                  % TITLE START VALUE            00024000
  242.                                          % START OF FILENAME IN DIRTITEL00024100
  243.                                          % (NORMAL = 30)                00024200
  244.                                                                         00024300
  245. %                                                                       00024400
  246. TRANSLATETABLE LTOU ( EBCDIC TO EBCDIC,                                 00024500
  247.                      "abcdefghijklmnopqrstuvwxyz" TO                    00024600
  248.                       "ABCDEFGHIJKLMNOPQRSTUVWXYZ") ;                   00024700
  249. TRANSLATETABLE HPR  (EBCDIC TO EBCDIC,48"00"TO 48"4B",48"0D"TO 48"40"); 00024800
  250. %                                                                       00024900
  251. TRUTHSET TIETEL        (ALPHA OR " " OR "/" OR "(" OR ")" OR "*"),      00025000
  252.          TIETELNOSPACE (TIETEL AND NOT " ");                            00025100
  253. $PAGE                                                                   00025200
  254.       % DEFINES ON CHARACTERS  IN ASCII - CODE **                       00025300
  255.                                                                         00025400
  256. DEFINE     LF          = 48"0A"  # ,    % LINEFEED                      00025500
  257.            CR          = 48"0D"  # ,    % CARRIAGE RETURN               00025600
  258.            CRLF        = 48"OD0A"# ,    % CRLF                          00025700
  259.            SOH         = 48"01"  # ,    % START OF HEADER               00025800
  260.            DEL         = 48"7F"  # ,    % DELETE                        00025900
  261.            BLANK       = 48"20"  # ,    % SPATIE                        00026000
  262.            NULL        = 48"00"  # ,    % NULL                          00026100
  263.            SLASH       = 48"2F"  # ,    % ASCII - "/"                   00026200
  264.            ASCRP       = 48"29"  # ,    % ASCII - ")"                   00026300
  265.            ASCDOT      = 48"2E"  # ,    % ASCII - "."                   00026400
  266.            ASCJ        = 48"4A"  # ,    % ASCII - J                     00026500
  267.            ASCM        = 48"4D"  # ,    % ASCII - M                     00026600
  268.                                                                         00026700
  269.        % DEFINES OF THE DEFAULTVALUES OF KERMIT  **                     00026800
  270.                                                                         00026900
  271.            MAXPACK     = 94      # ,    % MAXIMUM PACKET-LENGTH         00027000
  272.            MINPACK     = 10      # ,    % MINIMUM PACKET-LENGTH         00027100
  273.            DEFPAD      = 0       # ,    % NUMBER OF PADDING = 0         00027200
  274.            DEFPADCHAR  = 0       # ,    % PADCHAR = 0                   00027300
  275.            DEFEOL      = CR      # ,    % EOL = CR                      00027400
  276.            DEFSOP      = SOH     # ,    % SOP = SOH                     00027500
  277.            DEFQUOTE    = 48"23"  # ,    % QUOTE = #                     00027600
  278.            DEF8BQ      = 48"4E"  # ,    % NO 8-bit QUOTING              00027700
  279.            DEFREPT     = 48"7E"  # ,    % REPT = ~                      00027800
  280.            DEFCHKTYPE  = 48"31"  # ,    % SINGLE-ARITHMETIC CHECKSUM = 100027900
  281.            DEFTRY      = 5       # ,    % NUMBER OF TRIES OF SAME PACKET00028000
  282.            DEFINITTRY  = 10      # ,    % NUMBER OF TRIES OF INIT-PACKET00028100
  283.            DEFTIMEOUT  = 15      # ,    % TIMEOUT = 15 SEC              00028200
  284.            DEFDELAY    = 5       # ,    % DELAY = 5 SEC                 00028300
  285.            NUMPARAM    = 9       # ,    % NUMBER OF PARMS IN INITPACKET 00028400
  286.                                                                         00028500
  287.       % DEFINES  FOR THE PACKET - TYPES IN ASCII-CODE   **              00028600
  288.                                                                         00028700
  289.            ACK         = 48"59"  # ,    % ACK          = "Y"            00028800
  290.            NAK         = 48"4E"  # ,    % NAK          = "N"            00028900
  291.            DATA        = 48"44"  # ,    % DATA         = "D"            00029000
  292.            SINIT       = 48"53"  # ,    % INIT         = "S"            00029100
  293.            FILEHEAD    = 48"46"  # ,    % FILEHEADER   = "F"            00029200
  294.            ERROR       = 48"45"  # ,    % ERROR        = "E"            00029300
  295.            EOF         = 48"5A"  # ,    % EOF          = "Z"            00029400
  296.            BRK         = 48"42"  # ,    % BRK          = "B"            00029500
  297.            RINIT       = 48"52"  # ,    % RINIT        = "R"            00029600
  298.            IINIT       = 48"49"  # ,    % IINIT        = "I"            00029700
  299.            GENERIC     = 48"47"  # ,    % GENERIC      = "G"            00029800
  300.            TEXT        = 48"58"  # ,    % TEXT         = "X"            00029900
  301.                                                                         00030000
  302.       % DEFINES FOR COMMANDS IN GENERIC - PACKETS IN ASCII-CODE   **    00030100
  303.                                                                         00030200
  304.            FINISH      = 48"46"  # ,    % FINISH       = "F"            00030300
  305.            LOGOUT      = 48"4C"  # ,    % LOGOUT       = "L"            00030400
  306.                                                                         00030500
  307.       % DEFINES  FOR  THE COMMAND - STATE  **                           00030600
  308.                                                                         00030700
  309.            SET         = 11      # ,                                    00030800
  310.            SHOW        = 12      # ,                                    00030900
  311.            SEND        = 13      # ,                                    00031000
  312.            RECEIVE     = 14      # ,                                    00031100
  313.            SERVER      = 15      # ,                                    00031200
  314.            HELP        = 16      # ,                                    00031300
  315.            EXIT        = 17      # ,                                    00031400
  316.            SPATIE      = 18      # ,                                    00031500
  317.                                                                         00031600
  318.        %  DEFINES FOR THE STATE-TABLE   **                              00031700
  319.                                                                         00031800
  320.            NEXTFILE    = 19      # ,                                    00031900
  321.            INIT        = 20      # ,                                    00032000
  322.            FILEHEADER  = 21      # ,                                    00032100
  323.            FILEDATA    = 22      # ,                                    00032200
  324.            EOFFILE     = 23      # ,                                    00032300
  325.            BREAK       = 24      # ,                                    00032400
  326.            COMPLETE    = 25      # ,                                    00032500
  327.            ABORT       = 26      # ,                                    00032600
  328.                                                                         00032700
  329. $PAGE                                                                   00032800
  330.        % DEFINES FOR ERRORMESSAGES ON COMMANDS  **                      00032900
  331.                                                                         00033000
  332.            NOCOMMAND     = 40    # ,                                    00033100
  333.            TOOPARM       = 41    # ,                                    00033200
  334.            PARMEXPECT    = 42    # ,                                    00033300
  335.            INVPARM       = 43    # ,                                    00033400
  336.            TOOVALUE      = 44    # ,                                    00033500
  337.            VALUEXPECT    = 45    # ,                                    00033600
  338.            INVVALUE      = 46    # ,                                    00033700
  339.            FNOTEX        = 47    # ,                                    00033800
  340.            ERRDIRREQUEST = 48    # ,                                    00033900
  341.            NOFILEKIND    = 49    # ,                                    00034000
  342.            NOFILE        = 50    # ,                                    00034100
  343.            NOFILENAME    = 51    # ,                                    00034200
  344.                                                                         00034300
  345.        % DEFINES FOR ERRORMESSAGES ON FILE-TRANSPORT  **                00034400
  346.                                                                         00034500
  347.            CANTRECVINIT= 52      # ,                                    00034600
  348.            CANTRECVFH  = 53      # ,                                    00034700
  349.            CANTRECVDATA= 54      # ,                                    00034800
  350.            CANTSENDINIT= 56      # ,                                    00034900
  351.            CANTSENDFH  = 57      # ,                                    00035000
  352.            CANTSENDDATA= 58      # ,                                    00035100
  353.            CANTSENDEOF = 59      # ,                                    00035200
  354.            CANTSENDBRK = 60      # ,                                    00035300
  355.            NOTIMPLEM   = 62      # ,                                    00035400
  356.            SOPWRONG    = 65      # ,                                    00035500
  357.            READTIMEOUT = 66      # ,                                    00035600
  358.            READERROR   = 67      # ,                                    00035700
  359.            TRANSMITERR = 68      # ,                                    00035800
  360.            NOQUOTE     = 72      # ,                                    00035900
  361.            CANTNAMEFILE= 75      # ,                                    00036000
  362.            BINFAULT    = 76      # ,                                    00036100
  363. $PAGE                                                                   00036200
  364.       %  DEFINES FOR PROGRAMMER      **                                 00036300
  365.                                                                         00036400
  366.            P          = POINTER                 # ,                     00036500
  367.            DEBLANK(P) = SCAN P:P WHILE= " "     # ,                     00036600
  368.            CTL(X)     = ((X + 64) MOD 128)      # ,                     00036700
  369.            CHAR(X)    = (X + 32)                # ,                     00036800
  370.            BITSSHIFT(X)    = X.[7:48] FOR 1           # ,               00036900
  371.            CHARSHIFT(X)    = (X + 32).[7:48] FOR 1    # ,               00037000
  372.            UNCHAR(X)  = (REAL( X,1 ) - 32)      # ,                     00037100
  373.            CTLSHIFT(X)     = ((X + 64) MOD 128).[7:48] FOR 1 # ,        00037200
  374.            TRANSTOEBCDIC( X, Y, Z )                                     00037300
  375.                       = REPLACE X[Y] BY X[Y]                            00037400
  376.                           FOR Z WITH ASCIITOEBCDIC; # ,                 00037500
  377.            TRANSTOASCII( X, Y, Z )                                      00037600
  378.                       = REPLACE X[Y] BY X[Y]                            00037700
  379.                           FOR Z WITH EBCDICTOASCII; # ,                 00037800
  380.            CONTROL(X) = (X = DEL) OR (X < BLANK)# ,                     00037900
  381.            GETCHAR(X) = BEGIN                                           00038000
  382.                           X := REAL( PRCBUF,1 ) ;                       00038100
  383.                           PRCBUF := * + 1 ;                             00038200
  384.                           NUMCHAR := * - 1                              00038300
  385.                         END                     # ,                     00038400
  386.            GETBINCHAR(X) = BEGIN                                        00038500
  387.                              X := REAL(PBINRECBUF,1);                   00038600
  388.                              PBINRECBUF := * + 1;                       00038700
  389.                              NUMCHAR := * - 1                           00038800
  390.                            END                  # ,                     00038900
  391.            BIT8       = (IF CHARBIT8 THEN 1 ELSE 0)  # ,                00039000
  392.            CALCSUM( X, Y )                                              00039100
  393.                       = BEGIN                                           00039200
  394.                         CHECK := 0 ;                                    00039300
  395.                         PCALC := X[2] ;                                 00039400
  396.                         FOR K := 0 STEP 1 UNTIL ( Y - 1 ) DO            00039500
  397.                               CHECK := * + REAL( PCALC + K, 1 ) ;       00039600
  398.                         CHECK := ( CHECK + CHECK.[7:2] ) MOD 64 ;       00039700
  399.                         END                     # ;                     00039800
  400.                                                                         00039900
  401. $PAGE                                                                   00040000
  402. %************** PROCEDURE - DECLARATIES   ****************************  00040100
  403.                                                                         00040200
  404.                                                                         00040300
  405. PROCEDURE ERRORHANDLER(ERRMSG);                                         00040400
  406. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00040500
  407. %                                                                    %  00040600
  408. %      ERROR HANDLER                                                 %  00040700
  409. %                                                                THS %  00040800
  410. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00040900
  411.                                                                         00041000
  412.    INTEGER  ERRMSG ;                                                    00041100
  413.                                                                         00041200
  414. BEGIN                                                                   00041300
  415.   EBCDIC  ARRAY                                                         00041400
  416.            MSG [ 1:36 ] ;                                               00041500
  417.                                                                         00041600
  418.   POINTER PMSG ;                                                        00041700
  419.                                                                         00041800
  420.   DEFINE  PUTMSG(X) = REPLACE PMSG:= MSG[1] BY X FOR 36 # ;             00041900
  421.                                                                         00042000
  422. BEGIN                                                                   00042100
  423.   IF  (ERRMSG < 52)                                                     00042200
  424.       THEN BEGIN                                                        00042300
  425.         CASE   ERRMSG   OF                                              00042400
  426.            BEGIN                                                        00042500
  427.         NOCOMMAND    : PUTMSG ( "ERROR ** NO COMMAND                 ");00042600
  428.         TOOPARM      : PUTMSG ( "ERROR ** TOO MANY PARAMETERS        ");00042700
  429.         PARMEXPECT   : PUTMSG ( "ERROR ** PARAMETERS EXPECTED        ");00042800
  430.         INVPARM      : PUTMSG ( "ERROR ** INVALID PARAMETERS         ");00042900
  431.         VALUEXPECT   : PUTMSG ( "ERROR ** VALUE EXPECTED             ");00043000
  432.         INVVALUE     : PUTMSG ( "ERROR ** INVALID VALUE              ");00043100
  433.         FNOTEX       : PUTMSG ( "ERROR ** NOT EXISTING FILE(S)       ");00043200
  434.         ERRDIRREQUEST: PUTMSG ( "ERROR ** DIRREQUEST FAILED          ");00043300
  435.         TOOVALUE     : PUTMSG ( "ERROR ** VALUE TOO LARGE            ");00043400
  436.         NOFILENAME   : PUTMSG ( "ERROR ** NO FILE - NAME             ");00043500
  437.         NOFILE       : PUTMSG ( "ERROR ** NO FILE                    ");00043600
  438.         NOFILEKIND   : PUTMSG ( "ERROR ** NO FILE - KIND             ");00043700
  439.            END CASE ;                                                   00043800
  440.         IF NOT SERVERMODE                                               00043900
  441.           THEN BEGIN                                                    00044000
  442.                 WRITE( FILOUT, 36, MSG[*] ) ;                           00044100
  443.                 IF DEBUG THEN                                           00044200
  444.                 WRITE( JOURNAAL[SPACE 2], < X3, A36>, MSG[*] ) ;        00044300
  445.                END                                                      00044400
  446.           ELSE BEGIN                                                    00044500
  447.                 REPLACE RECBUF[1] BY MSG[1] FOR 36                      00044600
  448.                                                 WITH EBCDICTOASCII ;    00044700
  449.                 IF DEBUG THEN                                           00044800
  450.                 WRITE(JOURNAAL[SPACE 2],<"SERVER",X3,A36>,MSG[*]);      00044900
  451.                END;                                                     00045000
  452.            END                                                          00045100
  453.       ELSE BEGIN                                                        00045200
  454.         CASE  ERRMSG  OF                                                00045300
  455.            BEGIN                                                        00045400
  456.         CANTRECVINIT : PUTMSG ( "ERROR ** CAN'T RECEIVE INIT         ");00045500
  457.         CANTRECVFH   : PUTMSG ( "ERROR ** CAN'T RECEIVE F-HEAD       ");00045600
  458.         CANTRECVDATA : PUTMSG ( "ERROR ** CAN'T RECEIVE F-DATA       ");00045700
  459.         CANTSENDINIT : PUTMSG ( "ERROR ** CAN'T SEND INIT-PACK       ");00045800
  460.         CANTSENDFH   : PUTMSG ( "ERROR ** CAN'T SEND FILENAME        ");00045900
  461.         CANTSENDDATA : PUTMSG ( "ERROR ** CAN'T SEND DATA            ");00046000
  462.         CANTSENDEOF  : PUTMSG ( "ERROR ** CAN'T SEND EOF             ");00046100
  463.         CANTSENDBRK  : PUTMSG ( "ERROR ** CAN'T SEND BREAK           ");00046200
  464.         NOTIMPLEM    : PUTMSG ( "ERROR ** NOT IMPLEMENTED            ");00046300
  465.         SOPWRONG     : PUTMSG ( "ERROR ** START OF PACKET WRONG      ");00046400
  466.         READTIMEOUT  : PUTMSG ( "ERROR ** READACTION TIMED OUT       ");00046500
  467.         READERROR    : PUTMSG ( "ERROR ** ERROR ON READACTION        ");00046600
  468.         TRANSMITERR  : PUTMSG ( "ERROR ** CHECKS DON'T MATCH         ");00046700
  469.         NOQUOTE      : PUTMSG ( "ERROR ** FORGOTTEN TO QUOTE         ");00046800
  470.         CANTNAMEFILE : PUTMSG ( "ERROR ** CANT CHANGE FILENAME       ");00046900
  471.         BINFAULT     : PUTMSG ( "ERROR ** BINARY FILE ISN'T DATA     ");00047000
  472.           END CASE;                                                     00047100
  473.         IF  NOT  SERVERMODE THEN                                        00047200
  474.               IF DEBUG THEN                                             00047300
  475.                  WRITE( JOURNAAL[SPACE 2],<"*******",X3,A36>,MSG[*])    00047400
  476.                        ELSE                                             00047500
  477.                             ELSE                                        00047600
  478.                BEGIN                                                    00047700
  479.                REPLACE RECBUF[1] BY MSG[1] FOR 36                       00047800
  480.                                                WITH EBCDICTOASCII ;     00047900
  481.                IF DEBUG THEN                                            00048000
  482.                WRITE( JOURNAAL[SPACE 2],<"SERVER*",X3,A36>,MSG[*]);     00048100
  483.                END;                                                     00048200
  484.            END ;                                                        00048300
  485. END;                                                                    00048400
  486. END ERRORHANDLER ;                                                      00048500
  487. $PAGE                                                                   00048600
  488. PROCEDURE PRINTLOGHEADING(B); VALUE B; BOOLEAN B;                       00048700
  489. BEGIN                                                                   00048800
  490.     VALUE ARRAY                                                         00048900
  491.          MONTHS ("JANU  ","FEBRU ","MARCH ","APRIL ","MAY   ",          00049000
  492.                  "JUNE  ","JULY  ","AUGUST","SEPTEM","OCTO  ",          00049100
  493.                  "NOVEM ","DECEM "),                                    00049200
  494.          DAYS   ("SUN   ","MON   ","TUES  ","WEDNES","THURS ",          00049300
  495.                  "FRI   ","SATUR  "),                                   00049400
  496.          TAGS   ("ARY   ","      ","BER   ");                           00049500
  497.     EBCDIC ARRAY SCRATCH [1:135];                                       00049600
  498.     POINTER PSCRATCH;                                                   00049700
  499.     INTEGER M;                                                          00049800
  500.     REAL T;                                                             00049900
  501.                                                                         00050000
  502.     REPLACE PSCRATCH := SCRATCH[1] BY " " FOR 135;                      00050100
  503.     IF B THEN                                                           00050200
  504.     WRITE (JOURNAAL ,<"LOGGING/STATISTICS OF Kermit-Bur AT:">)          00050300
  505.          ELSE                                                           00050400
  506.     WRITE(WARNINGS  ,<"WARNING OF Kermit-Bur AT:">);                    00050500
  507.     T := TIME(7);                                                       00050600
  508.     REPLACE PSCRATCH BY                                                 00050700
  509.             POINTER(DAYS[T.[5:6]]) FOR 6 UNTIL = " ",  % DAY OF WEEK    00050800
  510.             "DAY ",                                                     00050900
  511.             POINTER(MONTHS[(M := T.[35:6]) - 1 ])                       00051000
  512.                                    FOR 6 UNTIL = " ",  % MONTH          00051100
  513.             POINTER(TAGS[FIRSTONE(M - 1) DIV 2])                        00051200
  514.                                    FOR 3 UNTIL = " ",                   00051300
  515.             " ",                                                        00051400
  516.             T.[29:6] FOR * DIGITS,                   % DATE             00051500
  517.             ", 19",                                                     00051600
  518.             T.[47:12] FOR 2 DIGITS;                                     00051700
  519.             IF B THEN                                                   00051800
  520.             WRITE(JOURNAAL,135,SCRATCH[*])                              00051900
  521.                  ELSE                                                   00052000
  522.             WRITE(WARNINGS,135,SCRATCH[*]);                             00052100
  523.             REPLACE PSCRATCH := SCRATCH[1] BY " " FOR 135;              00052200
  524.             REPLACE PSCRATCH BY                                         00052300
  525.                     "TIME:   ",                                         00052400
  526.                     T.[23:6] FOR 2 DIGITS,":",        % HOUR            00052500
  527.                     T.[17:6] FOR 2 DIGITS,":",        % MINUTE          00052600
  528.                     T.[11:6] FOR 2 DIGITS;            % SECOND          00052700
  529.             IF B THEN                                                   00052800
  530.             WRITE(JOURNAAL,135,SCRATCH[*])                              00052900
  531.                  ELSE                                                   00053000
  532.             WRITE(WARNINGS,135,SCRATCH[*])                              00053100
  533. END  PRINTLOGHEADING;                                                   00053200
  534.                                                                         00053300
  535. $PAGE                                                                   00053400
  536. PROCEDURE GETCANDEPARAM (TYPE);                                         00053500
  537. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00053600
  538. %                                                                    %  00053700
  539. %  GETCANDEPARAM ASSIGNS THE PROPER FILE ATRIBUTES  TO  THE GLOBALS  %  00053800
  540. %  ACCORDING TO THE CANDE SPECIFICATIONS.                            %  00053900
  541. %                                                                THS %  00054000
  542. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00054100
  543.  VALUE                                                                  00054200
  544.      TYPE ;                                                             00054300
  545.                                                                         00054400
  546.   INTEGER                                                               00054500
  547.      TYPE ;                                                             00054600
  548.                                                                         00054700
  549.   BEGIN                                                                 00054800
  550.     VALUE ARRAY                             % LAYOUT :                  00054900
  551.        CANDEPARAM(                                                      00055000
  552.           "101072","072008","015000"        % TYPE     ,                00055100
  553.          ,"103072","072008","015000"        % TEXTWIDTH  ,              00055200
  554.          ,"108066","000006","014000"        % STARTSEQ-1 ,              00055300
  555.          ,"109072","072008","014000"        % SEQWIDTH   ,              00055400
  556.          ,"114068","000004","014000"        % MAXRECSIZE .              00055500
  557.          ,"115080","082008","015000"                                    00055600
  558.          ,"116080","000000","080000"                                    00055700
  559.          ,"117072","072008","014000"                                    00055800
  560.          ,"118084","000000","084000"                                    00055900
  561.          ,"119074","000005","080000"                                    00056000
  562.          ,"120072","072008","015000");                                  00056100
  563.                                                                         00056200
  564.     ARRAY                                                               00056300
  565.        TEMP[0:0] ;                                                      00056400
  566.                                                                         00056500
  567.     POINTER                                                             00056600
  568.        TEMPP ;                                                          00056700
  569.                                                                         00056800
  570.     INTEGER                                                             00056900
  571.        PLACE ;                                                          00057000
  572.                                                                         00057100
  573.     REPLACE TEMPP := POINTER (TEMP) BY TYPE FOR 3 DIGITS,               00057200
  574.       "000";                                                            00057300
  575.     IF PLACE := MASKSEARCH (TEMP[0] , 48"FFFFFF000000" , CANDEPARAM)    00057400
  576.       GEQ 0 AND (PLACE MOD 3) EQL 0 THEN                                00057500
  577.     BEGIN                                                               00057600
  578.       TEMPP := POINTER (CANDEPARAM [PLACE]) + 3;                        00057700
  579.       TEXTWIDTH   := INTEGER (TEMPP , 3); TEMPP := * + 3;               00057800
  580.       SSEQ        := INTEGER (TEMPP , 3); TEMPP := * + 3;               00057900
  581.       SEQWIDTH    := INTEGER (TEMPP , 3); TEMPP := * + 3;               00058000
  582.       RECMAXRECSIZEV := INTEGER (TEMPP , 3)                             00058100
  583.     END;                                                                00058200
  584.  END GETCANDEPARAM ;                                                    00058300
  585.                                                                         00058400
  586. $PAGE                                                                   00058500
  587. BOOLEAN  PROCEDURE GETFILEKIND (TAIP) ;                                 00058600
  588. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00058700
  589. %                                                                    %  00058800
  590. %  GETFILEKIND SEARCHES FOR THE PROPER VALUE OF THE FILEKIND         %  00058900
  591. %  OF STORE. ALSO MYTYPE IS ASSIGNED.                                %  00059000
  592. %                                                                    %  00059100
  593. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00059200
  594.  ARRAY                                                                  00059300
  595.      TAIP[*] ;                                                          00059400
  596.                                                                         00059500
  597.   BEGIN                                                                 00059600
  598.     VALUE ARRAY                                         % LAYOUT :      00059700
  599.        TYPES(                                                           00059800
  600.           "ALGOL ","064101"                             % NAME     ,    00059900
  601.          ,"PL/I  ","068103"                             % FILEKIND ,    00060000
  602.          ,"COBOL ","065108"                             % MYTYPE   .    00060100
  603.          ,"FORTRA","066109"                                             00060200
  604.          ,"BASIC ","073114"                                             00060300
  605.          ,"JOB   ","075115"                                             00060400
  606.          ,"DATA  ","192116"                                             00060500
  607.          ,"SEQ   ","193117"                                             00060600
  608.          ,"CDATA ","197118"                                             00060700
  609.          ,"CSEQ  ","198119"                                             00060800
  610.          ,"PASCAL","081120"                                             00060900
  611.          ,"BINARY","192121") ;                                          00061000
  612.                                                                         00061100
  613.     INTEGER                                                             00061200
  614.          TEMP ;                                                         00061300
  615.                                                                         00061400
  616.     POINTER                                                             00061500
  617.          PA   ;                                                         00061600
  618.                                                                         00061700
  619.     IF TEMP:=MASKSEARCH(TAIP[0],48"FFFFFF000000",TYPES)                 00061800
  620.       GEQ 0 AND (TEMP MOD 2) EQL 0 THEN                                 00061900
  621.     BEGIN                                                               00062000
  622.       PA := POINTER (TYPES[TEMP+1]);                                    00062100
  623.       RECFILEKINDV    := INTEGER(PA,3); PA := PA + 3;                   00062200
  624.       RECTYPE         := INTEGER(PA,3);                                 00062300
  625.       GETFILEKIND    := TRUE ;                                          00062400
  626.     END                                                                 00062500
  627.     ELSE  GETFILEKIND := FALSE ;                                        00062600
  628.  END GETFILEKIND;                                                       00062700
  629. $PAGE                                                                   00062800
  630. PROCEDURE SHOWPROC ;                                                    00062900
  631. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00063000
  632. %                                                                    %  00063100
  633. %    SHOWS THE VALUES OF THE  SET - PARAMETERS                       %  00063200
  634. %                                                                THS %  00063300
  635. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00063400
  636. BEGIN                                                                   00063500
  637.   EBCDIC ARRAY                                                          00063600
  638.            QUOTEHLP [1:1] ;                                             00063700
  639.                                                                         00063800
  640.   VALUE ARRAY                                                           00063900
  641.            NAMES(                                                       00064000
  642.                101,"ALGOL       ",                                      00064100
  643.                103,"PL/I        ",                                      00064200
  644.                108,"COBOL       ",                                      00064300
  645.                109,"FORTRAN     ",                                      00064400
  646.                114,"BASIC       ",                                      00064500
  647.                115,"JOB         ",                                      00064600
  648.                116,"DATA        ",                                      00064700
  649.                117,"SEQ         ",                                      00064800
  650.                118,"CDATA       ",                                      00064900
  651.                119,"CSEQ        ",                                      00065000
  652.                120,"PASCAL      ",                                      00065100
  653.                121,"BINARY      ");                                     00065200
  654.   INTEGER I;                                                            00065300
  655.   POINTER PA;                                                           00065400
  656.                                                                         00065500
  657. BEGIN                                                                   00065600
  658.   WRITE( FILOUT, <" DELAY       = ", J3>, DELAY );                      00065700
  659.   IF DEBUG THEN                                                         00065800
  660.   WRITE( FILOUT, <" DEBUG IS ON ">)                                     00065900
  661.            ELSE                                                         00066000
  662.   WRITE( FILOUT, <" DEBUG IS OFF ">);                                   00066100
  663.   IF EXTENSION THEN                                                     00066102
  664.   WRITE( FILOUT, <" EXTENSION IS ON ">)                                 00066104
  665.                ELSE                                                     00066106
  666.   WRITE( FILOUT, <" EXTENSION IS OFF ">);                               00066108
  667.   IF RECDIR THEN                                                        00066110
  668.   WRITE( FILOUT, <" RECeive DIRectory IS : ",A*>,LOFSCRATCH,SCRATCH[*]) 00066112
  669.             ELSE                                                        00066114
  670.   WRITE( FILOUT, <" RECeive DIRectory IS <empty> ">);                   00066116
  671.   IF SENDDIR THEN                                                       00066118
  672.   WRITE( FILOUT, <" SEND DIRectory IS : ",A*>,LOFSENDDIR,DIRIN[*])      00066120
  673.              ELSE                                                       00066122
  674.   WRITE( FILOUT, <" SEND DIRectory IS <empty> ">);                      00066124
  675.   IF BINARY THEN                                                        00066200
  676.   BEGIN                                                                 00066300
  677.       IF STOPBINARY THEN                                                00066400
  678.       BEGIN                                                             00066500
  679.           WRITE(FILOUT, <" NO BINARY TRANSPORT POSSIBLE !! ">);         00066600
  680.           WRITE(FILOUT, <" THE OTHER KERMIT CAN'T DO IT ">);            00066700
  681.       END           ELSE                                                00066800
  682.       WRITE(FILOUT, <" BINARY TRANSPORT IS POSSIBLE ">)                 00066900
  683.   END       ELSE                                                        00067000
  684.   WRITE(FILOUT,  <" NO BINARY TRANSPORT ">);                            00067100
  685.   I := MASKSEARCH(RECTYPE,REAL(NOT FALSE),NAMES[*]);                    00067200
  686.   PA := POINTER(NAMES[I + 1]);                                          00067300
  687.   WRITE(FILOUT,<" TYPE OF FILE(S) TO BE RECEIVED IS : ",A16>,PA);       00067400
  688.   WRITE(FILOUT[STOP],<" RECORDLENGTH OF FILE(S) TO BE RECEIVED IS : ",  00067500
  689.                               J3>,RECMAXRECSIZEV);                      00067600
  690.   IF (RECFILEKINDV = VALUE(DATA)) OR (RECMAXRECSIZEV > 20) THEN         00067700
  691.       WRITE(FILOUT,<" CHARACTERS ">)                       ELSE         00067800
  692.       WRITE(FILOUT,<" WORDS ">);                                        00067900
  693.   WRITE( FILOUT, <" TIMEOUT Other Kermit = ",J3>,THEIRTIMEOUT);         00068000
  694.   WRITE( FILOUT, <" TIMEOUT Kermit-Bur   = ",J3>,MYTIMEOUT);            00068100
  695.   WRITE( FILOUT, <" PAKLEN      = ", J2>, SENDPACKSIZE );               00068200
  696.   REPLACE QUOTEHLP[1] BY BITSSHIFT( SENDQUOTE ) ;                       00068300
  697.   TRANSTOEBCDIC( QUOTEHLP, 1, 1 ) ;                                     00068400
  698.   WRITE( FILOUT, <" QUOTE       = ", A1>, QUOTEHLP[*] );                00068500
  699.   WRITE( FILOUT, <" PADDING     = ", J3>, SENDPAD );                    00068600
  700.   WRITE( FILOUT, <" PADCHAR     = ", J3>, SENDPADCHAR );                00068700
  701.   WRITE( FILOUT, <" EOL         = ", J3>, SENDEOL );                    00068800
  702.   WRITE( FILOUT, <" SOP         = ", J3>, SENDSOP );                    00068900
  703. END ;                                                                   00069000
  704. END SHOWPROC ;                                                          00069100
  705. $PAGE                                                                   00069200
  706. PROCEDURE WRITERECORDTOFILE;                                            00069300
  707.   BEGIN                                                                 00069400
  708.       SEQCOUNT := * + 100 ;                                             00069500
  709.       TRANSTOEBCDIC( RECSTORE, 1, 135 );                                00069600
  710.       REPLACE RECSTORE[ SSEQ + 1 ] BY SEQCOUNT                          00069700
  711.                                    FOR SEQWIDTH DIGITS ;                00069800
  712.       WRITE( FILSTORE, RECMAXRECSIZEV, RECSTORE[*] );                   00069900
  713.       REPLACE PSTORE := RECSTORE[1] BY BLANK FOR 135 ;                  00070000
  714.       IF ( SSEQ EQL 0 ) THEN PSTORE := * + SEQWIDTH ;                   00070100
  715.       ROOM := MAXRECCHAR ;                                              00070200
  716.   END;                                                                  00070300
  717. $PAGE                                                                   00070400
  718. PROCEDURE WRITEBINRECORDTOFILE;                                         00070500
  719. BEGIN                                                                   00070600
  720.     WRITE(FILSTORE,RECMAXRECSIZEV,BINRECSTORE[*]);                      00070700
  721.     REPLACE PBINRECSTORE := BINRECSTORE[1] BY NULL FOR RECMAXRECSIZEV;  00070800
  722.     ROOM := RECMAXRECSIZEV                                              00070900
  723. END;                                                                    00071000
  724. $PAGE                                                                   00071100
  725. PROCEDURE PUTCHARSINSTORE(C); VALUE C; REAL C;                          00071200
  726. BEGIN                                                                   00071300
  727.     INTEGER I;                                                          00071400
  728.     IF ROOM = 0 THEN WRITERECORDTOFILE;                                 00071500
  729.     WHILE (ROOM LSS COUNT) DO                                           00071600
  730.     BEGIN                                                               00071700
  731.         I := ROOM;                                                      00071800
  732.         WHILE I NEQ 0 DO                                                00071900
  733.         BEGIN                                                           00072000
  734.             REPLACE PSTORE:PSTORE BY C.[7:48] FOR 1;                    00072100
  735.             I := * - 1                                                  00072200
  736.         END;                                                            00072300
  737.         COUNT := * - ROOM;                                              00072400
  738.         WRITERECORDTOFILE                                               00072500
  739.     END;                                                                00072600
  740.     I := COUNT;                                                         00072700
  741.     WHILE I NEQ 0 DO                                                    00072800
  742.     BEGIN                                                               00072900
  743.         REPLACE PSTORE:PSTORE BY C.[7:48] FOR 1;                        00073000
  744.         I := * - 1                                                      00073100
  745.     END;                                                                00073200
  746.     ROOM := * - COUNT;                                                  00073300
  747.     COUNT := 1;                                                         00073400
  748.     CRLFSEEN := 0                                                       00073500
  749. END   PUTCHARSINSTORE;                                                  00073600
  750. $PAGE                                                                   00073700
  751. PROCEDURE PUTBINCHARSINSTORE(C); VALUE C; REAL C;                       00073800
  752. BEGIN                                                                   00073900
  753.     INTEGER I;                                                          00074000
  754.     IF CHARBIT8 THEN C := C & 1[7:1];                                   00074100
  755.     IF ROOM = 0 THEN WRITEBINRECORDTOFILE;                              00074200
  756.     WHILE (ROOM LSS COUNT) DO                                           00074300
  757.     BEGIN                                                               00074400
  758.         I := ROOM;                                                      00074500
  759.         WHILE I NEQ 0 DO                                                00074600
  760.         BEGIN                                                           00074700
  761.             REPLACE PBINRECSTORE:PBINRECSTORE BY C.[7:48] FOR 1;        00074800
  762.             I := * - 1                                                  00074900
  763.         END;                                                            00075000
  764.         COUNT := * - ROOM;                                              00075100
  765.         WRITEBINRECORDTOFILE                                            00075200
  766.     END;                                                                00075300
  767.     I := COUNT;                                                         00075400
  768.     WHILE I NEQ 0 DO                                                    00075500
  769.     BEGIN                                                               00075600
  770.         REPLACE PBINRECSTORE:PBINRECSTORE BY C.[7:48] FOR 1;            00075700
  771.         I := * - 1                                                      00075800
  772.     END;                                                                00075900
  773.     ROOM := * - COUNT;                                                  00076000
  774.     COUNT := 1; CHARBIT8 := FALSE                                       00076100
  775. END    PUTBINCHARSINSTORE;                                              00076200
  776. $PAGE                                                                   00076300
  777. BOOLEAN PROCEDURE PUTCHARSINSENDPACKET;                                 00076400
  778. BEGIN                                                                   00076500
  779.     BOOLEAN PACKFULL,SPECIALCHAR,CHARISCONTROL,CHARISQUOTE,             00076600
  780.             CHARISREPT;                                                 00076700
  781.     BEGIN                                                               00076800
  782.         CHARISCONTROL := CONTROL(LASTCHAR);                             00076900
  783.         CHARISQUOTE := (LASTCHAR = SENDQUOTE);                          00077000
  784.         CHARISREPT := (LASTCHAR = SENDREPT);                            00077100
  785.         SPECIALCHAR := CHARISCONTROL OR CHARISQUOTE                     00077200
  786.                                      OR CHARISREPT;                     00077300
  787.         IF COUNT LSS 4 THEN                                             00077400
  788.         BEGIN                                                           00077500
  789.             IF SPECIALCHAR THEN                                         00077600
  790.             BEGIN                                                       00077700
  791.                 IF (COUNT * 2 + SENDCOUNT + 1) > SENDPACKSIZE THEN      00077800
  792.                     PACKFULL := TRUE                          ELSE      00077900
  793.                 BEGIN                                                   00078000
  794.                     WHILE COUNT NEQ 0 DO                                00078100
  795.                     BEGIN                                               00078200
  796.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE);    00078300
  797.                         IF CHARISCONTROL THEN                           00078400
  798.                         REPLACE PSEND:PSEND BY CTLSHIFT(LASTCHAR)       00078500
  799.                                          ELSE                           00078600
  800.                         IF CHARISQUOTE   THEN                           00078700
  801.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE)     00078800
  802.                                          ELSE                           00078900
  803.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT);     00079000
  804.                         SENDCOUNT := * + 2;                             00079100
  805.                         COUNT := * - 1                                  00079200
  806.                     END;                                                00079300
  807.                 END                                                     00079400
  808.              END            ELSE                                        00079500
  809.              BEGIN                                                      00079600
  810.                  IF (COUNT + SENDCOUNT +1) > SENDPACKSIZE THEN          00079700
  811.                      PACKFULL := TRUE                     ELSE          00079800
  812.                  BEGIN                                                  00079900
  813.                      WHILE COUNT NEQ 0 DO                               00080000
  814.                      BEGIN                                              00080100
  815.                          REPLACE PSEND:PSEND BY BITSSHIFT(LASTCHAR);    00080200
  816.                          SENDCOUNT := * + 1;                            00080300
  817.                          COUNT := * - 1                                 00080400
  818.                      END;                                               00080500
  819.                  END                                                    00080600
  820.              END                                                        00080700
  821.         END            ELSE             % COUNT GEQ 4                   00080800
  822.         BEGIN                                                           00080900
  823.             IF SPECIALCHAR THEN                                         00081000
  824.             BEGIN                                                       00081100
  825.                 IF (SENDCOUNT + 5) > SENDPACKSIZE THEN                  00081200
  826.                     PACKFULL := TRUE              ELSE                  00081300
  827.                 BEGIN                                                   00081400
  828.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT),         00081500
  829.                             CHARSHIFT(COUNT),BITSSHIFT(SENDQUOTE);      00081600
  830.                     IF CHARISCONTROL THEN                               00081700
  831.                     REPLACE PSEND:PSEND BY CTLSHIFT(LASTCHAR)           00081800
  832.                                      ELSE                               00081900
  833.                     IF CHARISQUOTE   THEN                               00082000
  834.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE)         00082100
  835.                                      ELSE                               00082200
  836.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT);         00082300
  837.                     SENDCOUNT := * + 4;                                 00082400
  838.                 END                                                     00082500
  839.             END                                   ELSE                  00082600
  840.             BEGIN                                                       00082700
  841.                 IF (SENDCOUNT + 4) > SENDPACKSIZE THEN                  00082800
  842.                     PACKFULL := TRUE              ELSE                  00082900
  843.                 BEGIN                                                   00083000
  844.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT),         00083100
  845.                             CHARSHIFT(COUNT),BITSSHIFT(LASTCHAR);       00083200
  846.                     SENDCOUNT := * + 3;                                 00083300
  847.                 END                                                     00083400
  848.             END                                                         00083500
  849.         END                                                             00083600
  850.     END;                                                                00083700
  851.     PUTCHARSINSENDPACKET := PACKFULL                                    00083800
  852. END        PUTCHARSINSENDPACKET;                                        00083900
  853. $PAGE                                                                   00084000
  854. BOOLEAN PROCEDURE PUTBINCHARSINSENDPACKET;                              00084100
  855. BEGIN                                                                   00084200
  856.     BOOLEAN PACKFULL,SPECIALCHAR,CHARISCONTROL,CHARISQUOTE,             00084300
  857.             CHARISREPT,CHARIS8BQ;                                       00084400
  858.     REAL CHAR;                                                          00084500
  859.                                                                         00084600
  860.     BEGIN                                                               00084700
  861.         CHAR := LASTCHAR;                                               00084800
  862.         IF (CHARBIT8 := CHAR.[7:1] = 1) THEN                            00084900
  863.             CHAR := CHAR & 0 [7:1];                                     00085000
  864.         CHARISCONTROL := CONTROL(CHAR);                                 00085100
  865.         CHARISQUOTE := (CHAR = SENDQUOTE);                              00085200
  866.         CHARISREPT  := (CHAR = SENDREPT);                               00085300
  867.         CHARIS8BQ   := (CHAR = SEND8BQ);                                00085400
  868.         SPECIALCHAR := CHARISCONTROL OR CHARISQUOTE                     00085500
  869.                                      OR CHARISREPT                      00085600
  870.                                      OR CHARIS8BQ;                      00085700
  871.         IF COUNT LSS 4 THEN                                             00085800
  872.         BEGIN                                                           00085900
  873.             IF SPECIALCHAR THEN                                         00086000
  874.             BEGIN                                                       00086100
  875.                 IF(COUNT*(2 + BIT8) + SENDCOUNT + 1) > SENDPACKSIZE THEN00086200
  876.                    PACKFULL := TRUE                                 ELSE00086300
  877.                 BEGIN                                                   00086400
  878.                     WHILE COUNT NEQ 0 DO                                00086500
  879.                     BEGIN                                               00086600
  880.                         IF CHARBIT8 THEN                                00086700
  881.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00086800
  882.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE);    00086900
  883.                         IF CHARISCONTROL THEN                           00087000
  884.                         REPLACE PSEND:PSEND BY CTLSHIFT(CHAR)           00087100
  885.                                          ELSE                           00087200
  886.                         IF CHARISQUOTE   THEN                           00087300
  887.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE)     00087400
  888.                                          ELSE                           00087500
  889.                         IF CHARISREPT    THEN                           00087600
  890.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT)      00087700
  891.                                          ELSE                           00087800
  892.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00087900
  893.                         SENDCOUNT := * + 2 + BIT8;                      00088000
  894.                         COUNT := * - 1                                  00088100
  895.                     END                                                 00088200
  896.                 END                                                     00088300
  897.             END            ELSE                                         00088400
  898.             BEGIN                                                       00088500
  899.                 IF (COUNT*(1+BIT8) + SENDCOUNT + 1) > SENDPACKSIZE THEN 00088600
  900.                     PACKFULL := TRUE                               ELSE 00088700
  901.                 BEGIN                                                   00088800
  902.                     WHILE COUNT NEQ 0 DO                                00088900
  903.                     BEGIN                                               00089000
  904.                         IF CHARBIT8 THEN                                00089100
  905.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00089200
  906.                         REPLACE PSEND:PSEND BY BITSSHIFT(CHAR);         00089300
  907.                         SENDCOUNT := * + 1 + BIT8;                      00089400
  908.                         COUNT := * - 1                                  00089500
  909.                     END                                                 00089600
  910.                 END                                                     00089700
  911.             END                                                         00089800
  912.         END            ELSE                 % COUNT GEQ 4               00089900
  913.         BEGIN                                                           00090000
  914.             IF SPECIALCHAR THEN                                         00090100
  915.             BEGIN                                                       00090200
  916.                 IF (SENDCOUNT + 5 + BIT8) > SENDPACKSIZE THEN           00090300
  917.                     PACKFULL := TRUE                     ELSE           00090400
  918.                 BEGIN                                                   00090500
  919.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT),         00090600
  920.                                            CHARSHIFT(COUNT);            00090700
  921.                     IF CHARBIT8 THEN                                    00090800
  922.                     REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);          00090900
  923.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE);        00091000
  924.                     IF CHARISCONTROL THEN                               00091100
  925.                     REPLACE PSEND:PSEND BY CTLSHIFT(CHAR)               00091200
  926.                                      ELSE                               00091300
  927.                     IF CHARISQUOTE THEN                                 00091400
  928.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE)         00091500
  929.                                    ELSE                                 00091600
  930.                     IF CHARISREPT THEN                                  00091700
  931.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT)          00091800
  932.                                   ELSE                                  00091900
  933.                     REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);          00092000
  934.                     SENDCOUNT := * + 4 + BIT8;                          00092100
  935.                 END                                                     00092200
  936.             END            ELSE                                         00092300
  937.             BEGIN                                                       00092400
  938.                 IF (SENDCOUNT + 4 + BIT8) > SENDPACKSIZE THEN           00092500
  939.                     PACKFULL := TRUE                     ELSE           00092600
  940.                 BEGIN                                                   00092700
  941.                     REPLACE PSEND:PSEND BY BITSSHIFT(SENDREPT),         00092800
  942.                                            CHARSHIFT(COUNT);            00092900
  943.                     IF CHARBIT8 THEN                                    00093000
  944.                     REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);          00093100
  945.                     REPLACE PSEND:PSEND BY BITSSHIFT(CHAR);             00093200
  946.                     SENDCOUNT := * + 3 + BIT8                           00093300
  947.                 END                                                     00093400
  948.             END                                                         00093500
  949.         END                                                             00093600
  950.     END;                                                                00093700
  951.     PUTBINCHARSINSENDPACKET := PACKFULL                                 00093800
  952. END    PUTBINCHARSINSENDPACKET;                                         00093900
  953. $PAGE                                                                   00094000
  954. PROCEDURE STOREBININRECORD;                                             00094100
  955. BEGIN                                                                   00094200
  956.     REAL C;                                                             00094300
  957.     PRCBUF := RECBUF[1]; NUMCHAR := RECVCOUNT - 3;                      00094400
  958.     WHILE (NUMCHAR > 0 ) AND (STATE NEQ ABORT) DO                       00094500
  959.     BEGIN                                                               00094600
  960.         IF (ROOM = 0) THEN WRITEBINRECORDTOFILE;                        00094700
  961.         GETCHAR(C);                                                     00094800
  962.         IF QUOTESEEN THEN                                               00094900
  963.         BEGIN                                                           00095000
  964.             IF (C EQL MYQUOTE) OR (C EQL MY8BQ)                         00095100
  965.                THEN PUTBINCHARSINSTORE(C)                               00095200
  966.                ELSE PUTBINCHARSINSTORE(CTL(C));                         00095300
  967.             QUOTESEEN := FALSE                                          00095400
  968.         END          ELSE                                               00095500
  969.         IF (C EQL MY8BQ) THEN CHARBIT8 := TRUE                          00095600
  970.                      ELSE                                               00095700
  971.         IF (C EQL MYQUOTE) THEN QUOTESEEN := TRUE                       00095800
  972.                      ELSE                                               00095900
  973.         IF CONTROL(C) THEN                                              00096000
  974.         BEGIN                                                           00096100
  975.             STATE := ABORT;                                             00096200
  976.             ERRORHANDLER(NOQUOTE);                                      00096300
  977.             CLOSE(FILSTORE,CRUNCH)                                      00096400
  978.         END           ELSE                                              00096500
  979.         PUTBINCHARSINSTORE(C)                                           00096600
  980.     END                                                                 00096700
  981. END      STOREBININRECORD;                                              00096800
  982. $PAGE                                                                   00096900
  983. PROCEDURE REPSTOREBININRECORD;                                          00097000
  984. BEGIN                                                                   00097100
  985.     REAL C;                                                             00097200
  986.     PRCBUF := RECBUF[1];  NUMCHAR := RECVCOUNT - 3;                     00097300
  987.     WHILE (NUMCHAR > 0) AND (STATE NEQ ABORT) DO                        00097400
  988.     BEGIN                                                               00097500
  989.         IF (ROOM = 0) THEN WRITEBINRECORDTOFILE;                        00097600
  990.         GETCHAR(C);                                                     00097700
  991.         IF QUOTESEEN THEN                                               00097800
  992.         BEGIN                                                           00097900
  993.             IF (C EQL MYQUOTE) OR (C EQL MY8BQ) OR (C EQL MYREPT)       00098000
  994.                THEN PUTBINCHARSINSTORE(C)                               00098100
  995.                ELSE PUTBINCHARSINSTORE(CTL(C));                         00098200
  996.             QUOTESEEN := FALSE                                          00098300
  997.         END          ELSE                                               00098400
  998.         IF REPTSEEN  THEN                                               00098500
  999.         BEGIN                                                           00098600
  1000.             COUNT := C - 32;          % UNCHAR(C)                       00098700
  1001.             REPTSEEN := FALSE                                           00098800
  1002.         END          ELSE                                               00098900
  1003.         IF (C EQL MYQUOTE) THEN QUOTESEEN := TRUE                       00099000
  1004.                      ELSE                                               00099100
  1005.         IF (C EQL MY8BQ) THEN CHARBIT8 := TRUE                          00099200
  1006.                      ELSE                                               00099300
  1007.         IF (C EQL MYREPT) THEN REPTSEEN := TRUE                         00099400
  1008.                      ELSE                                               00099500
  1009.         IF CONTROL(C) THEN                                              00099600
  1010.         BEGIN                                                           00099700
  1011.             STATE := ABORT;                                             00099800
  1012.             ERRORHANDLER(NOQUOTE);                                      00099900
  1013.             CLOSE(FILSTORE,CRUNCH)                                      00100000
  1014.         END          ELSE                                               00100100
  1015.         PUTBINCHARSINSTORE(C)                                           00100200
  1016.     END                                                                 00100300
  1017. END     REPSTOREBININRECORD;                                            00100400
  1018. $PAGE                                                                   00100500
  1019. PROCEDURE STOREINRECORD;                                                00100600
  1020. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         00100700
  1021. %     PUTS THE DATA FROM RECBUF(DATAFIELD) IN RECSTORE        %         00100800
  1022. %        - RECORD TOO BIG :DIVIDE INCOMING RECORD OVER TWO OR %         00100900
  1023. %          MORE RECORDS IN FILSTORE                           %         00101000
  1024. %        - IF NO QUOTING IS DONE : CLOSE,CRUNCH AND ABORT     %         00101100
  1025. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         00101200
  1026. BEGIN                                                                   00101300
  1027.     REAL C;                                                             00101400
  1028.     LABEL EXCHAR;                                                       00101500
  1029.                                                                         00101600
  1030.     PRCBUF := RECBUF[1]; NUMCHAR := RECVCOUNT - 3;                      00101700
  1031.     WHILE (NUMCHAR > 0) AND (STATE NEQ ABORT) DO                        00101800
  1032.     BEGIN                                                               00101900
  1033.         GETCHAR(C);                                                     00102000
  1034.                                                                         00102100
  1035.     EXCHAR:                                                             00102200
  1036.                                                                         00102300
  1037.         IF (QUOTESEEN AND CRSEEN) THEN                                  00102400
  1038.         BEGIN                                                           00102500
  1039.             IF (C NEQ ASCJ) THEN                                        00102600
  1040.             BEGIN                                                       00102700
  1041.                 PUTCHARSINSTORE(CR);                                    00102800
  1042.                 CRSEEN := FALSE;                                        00102900
  1043.                 GO TO EXCHAR                                            00103000
  1044.             END                                                         00103100
  1045.                             ELSE                                        00103200
  1046.             BEGIN                                                       00103300
  1047.                 CRLFSEEN := * + 1;                                      00103400
  1048.                 IF (CRLFSEEN = 1) AND (ROOM = MAXRECCHAR) THEN          00103500
  1049.                                                           ELSE          00103600
  1050.                 WRITERECORDTOFILE;                                      00103700
  1051.                 QUOTESEEN := CRSEEN := FALSE                            00103800
  1052.             END                                                         00103900
  1053.         END                                                             00104000
  1054.                                   ELSE                                  00104100
  1055.         IF QUOTESEEN THEN                                               00104200
  1056.         BEGIN                                                           00104300
  1057.             IF (C EQL ASCM) THEN CRSEEN := TRUE                         00104400
  1058.                             ELSE                                        00104500
  1059.             IF (C EQL MYQUOTE) THEN PUTCHARSINSTORE(C)                  00104600
  1060.                                ELSE PUTCHARSINSTORE(CTL(C));            00104700
  1061.             QUOTESEEN := FALSE                                          00104800
  1062.         END                                                             00104900
  1063.                                   ELSE                                  00105000
  1064.         IF CRSEEN THEN                                                  00105100
  1065.         BEGIN                                                           00105200
  1066.             IF (C EQL MYQUOTE) THEN QUOTESEEN := TRUE                   00105300
  1067.                                ELSE                                     00105400
  1068.             BEGIN                                                       00105500
  1069.                 PUTCHARSINSTORE(CR);                                    00105600
  1070.                 CRSEEN := FALSE;                                        00105700
  1071.                 GO TO EXCHAR                                            00105800
  1072.             END                                                         00105900
  1073.         END                                                             00106000
  1074.                                   ELSE                                  00106100
  1075.         IF (C EQL MYQUOTE)    THEN                                      00106200
  1076.            QUOTESEEN := TRUE  ELSE                                      00106300
  1077.         BEGIN                                                           00106400
  1078.             IF CONTROL(C) THEN                                          00106500
  1079.             BEGIN                                                       00106600
  1080.                 STATE := ABORT;                                         00106700
  1081.                 ERRORHANDLER(NOQUOTE);                                  00106800
  1082.                 CLOSE(FILSTORE,CRUNCH)                                  00106900
  1083.             END                                                         00107000
  1084.                           ELSE                                          00107100
  1085.             PUTCHARSINSTORE(C)                                          00107200
  1086.         END                                                             00107300
  1087.      END                                                                00107400
  1088. END   STOREINRECORD;                                                    00107500
  1089. $PAGE                                                                   00107600
  1090. PROCEDURE REPSTOREINRECORD;                                             00107700
  1091. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          00107800
  1092. %     PUTS THE DATA(TEXT) FROM RECBUF(DATAFIELD) IN RECSTORE %          00107900
  1093. %        - RECORD TOO BIG : DIVIDE INCOMING RECORD OVER      %          00108000
  1094. %          MORE RECORDS IN FILSTORE.                         %          00108100
  1095. %        - HANDLES REPEATCOUNT                               %          00108200
  1096. %        - IF NO QUOTING IS DONE: CLOSE, CRUNCH AND ABORT    %          00108300
  1097. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          00108400
  1098. BEGIN                                                                   00108500
  1099.     LABEL EXCHAR;                                                       00108600
  1100.     REAL C;                                                             00108700
  1101.                                                                         00108800
  1102.     PRCBUF := RECBUF[1]; NUMCHAR := RECVCOUNT - 3;                      00108900
  1103.     WHILE (NUMCHAR > 0) AND (STATE NEQ ABORT) DO                        00109000
  1104.     BEGIN                                                               00109100
  1105.         GETCHAR(C);                                                     00109200
  1106.                                                                         00109300
  1107.     EXCHAR:                                                             00109400
  1108.                                                                         00109500
  1109.         IF (QUOTESEEN AND CRSEEN) THEN                                  00109600
  1110.         BEGIN                                                           00109700
  1111.             IF (C NEQ ASCJ) THEN                                        00109800
  1112.             BEGIN                                                       00109900
  1113.                 PUTCHARSINSTORE(CR);                                    00110000
  1114.                 CRSEEN := FALSE;                                        00110100
  1115.                 GO TO EXCHAR                                            00110200
  1116.             END             ELSE                                        00110300
  1117.             BEGIN                                                       00110400
  1118.                 CRLFSEEN := * + 1;                                      00110500
  1119.                 IF (CRLFSEEN = 1) AND (ROOM = MAXRECCHAR) THEN          00110600
  1120.                                                          ELSE           00110700
  1121.                 WRITERECORDTOFILE;                                      00110800
  1122.                 QUOTESEEN := CRSEEN := FALSE                            00110900
  1123.             END                                                         00111000
  1124.         END                       ELSE                                  00111100
  1125.         IF QUOTESEEN THEN                                               00111200
  1126.         BEGIN                                                           00111300
  1127.             IF (C EQL ASCM) THEN CRSEEN := TRUE                         00111400
  1128.                             ELSE                                        00111500
  1129.             IF ((C EQL MYREPT) OR                                       00111600
  1130.                 (C EQL MYQUOTE)) THEN PUTCHARSINSTORE(C)                00111700
  1131.                                  ELSE PUTCHARSINSTORE(CTL(C));          00111800
  1132.             QUOTESEEN := FALSE                                          00111900
  1133.         END          ELSE                                               00112000
  1134.         IF CRSEEN THEN                                                  00112100
  1135.         BEGIN                                                           00112200
  1136.             IF (C EQL MYQUOTE) THEN QUOTESEEN := TRUE                   00112300
  1137.                                ELSE                                     00112400
  1138.             BEGIN                                                       00112500
  1139.                 PUTCHARSINSTORE(CR);                                    00112600
  1140.                 CRSEEN := FALSE;                                        00112700
  1141.                 GO TO EXCHAR                                            00112800
  1142.             END                                                         00112900
  1143.         END       ELSE                                                  00113000
  1144.         IF REPTSEEN THEN                                                00113100
  1145.         BEGIN                                                           00113200
  1146.             COUNT := C - 32;            % UNCHAR(C)                     00113300
  1147.             REPTSEEN := FALSE                                           00113400
  1148.         END         ELSE                                                00113500
  1149.         IF (C EQL MYREPT) THEN REPTSEEN := TRUE                         00113600
  1150.                           ELSE                                          00113700
  1151.         IF (C EQL MYQUOTE) THEN QUOTESEEN := TRUE                       00113800
  1152.                            ELSE                                         00113900
  1153.         BEGIN                                                           00114000
  1154.             IF CONTROL(C) THEN                                          00114100
  1155.             BEGIN                                                       00114200
  1156.                 STATE := ABORT;                                         00114300
  1157.                 ERRORHANDLER(NOQUOTE);                                  00114400
  1158.                 CLOSE(FILSTORE,CRUNCH)                                  00114500
  1159.             END           ELSE                                          00114600
  1160.             PUTCHARSINSTORE(C)                                          00114700
  1161.         END                                                             00114800
  1162.     END                                                                 00114900
  1163. END     REPSTOREINRECORD;                                               00115000
  1164. $PAGE                                                                   00115100
  1165. PROCEDURE READNEXTREC;                                                  00115200
  1166. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00115300
  1167. %                                                                     % 00115400
  1168. %   READ NEXT RECORD; IF EOF THEN BEOF := TRUE                        % 00115500
  1169. %                                                                 THS % 00115600
  1170. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00115700
  1171.                                                                         00115800
  1172.  BEGIN                                                                  00115900
  1173.    REPLACE RECBUF[1] BY " "  FOR 255 ;                                  00116000
  1174.    IF BEOF := READ(FILGET, SENDMAXRECSIZEV, RECBUF[*]) THEN ELSE        00116100
  1175.    BEGIN                                                                00116200
  1176.    NUMCHAR := MAXRECCHAR - 1 ;                                          00116300
  1177.    PRCBUF := RECBUF[1] ;                                                00116400
  1178.    WHILE ((PRCBUF + NUMCHAR) EQL " ")  AND                              00116500
  1179.           ( NUMCHAR GEQ 0 )  DO                                         00116600
  1180.        NUMCHAR := NUMCHAR - 1 ;                                         00116700
  1181.    TRANSTOASCII( RECBUF, 1, 255 ) ;                                     00116800
  1182.    END;                                                                 00116900
  1183.    EMPTYBUF := FALSE ;                                                  00117000
  1184.  END  READNEXTREC ;                                                     00117100
  1185.                                                                         00117200
  1186. $PAGE                                                                   00117300
  1187. PROCEDURE READNEXTBINRECORD;                                            00117400
  1188. BEGIN                                                                   00117500
  1189.     REPLACE BINRECBUF[1] BY NULL FOR SENDMAXRECSIZEV;                   00117600
  1190.     IF BEOF := READ(FILGET,SENDMAXRECSIZEV,BINRECBUF[*]) THEN ELSE      00117700
  1191.     BEGIN                                                               00117800
  1192.         PBINRECBUF := BINRECBUF[1];                                     00117900
  1193.         NUMCHAR := (IF FILGET.UNITS = 0 THEN 6*SENDMAXRECSIZEV          00118000
  1194.                                         ELSE SENDMAXRECSIZEV)           00118100
  1195.     END;                                                                00118200
  1196.     EMPTYBUF := FALSE                                                   00118300
  1197. END    READNEXTBINRECORD;                                               00118400
  1198. $PAGE                                                                   00118500
  1199. BOOLEAN PROCEDURE NOTEOLDONE ;                                          00118600
  1200. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00118700
  1201. %                                                                     % 00118800
  1202. %    TRY TO PUT AN EOL IN THE DATAFIELD OF THE SEND-PACKET            % 00118900
  1203. %    WHEN THIS ISN'T POSSIBLE   ( THE PACKET IS FULL )                % 00119000
  1204. %              THEN DOEOL  AND NOTEOLDONE BECOMES TRUE                % 00119100
  1205. %              ELSE THEY BECOME  FALSE                                % 00119200
  1206. %                                                                 THS % 00119300
  1207. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00119400
  1208.                                                                         00119500
  1209. BEGIN                                                                   00119600
  1210.                                                                         00119700
  1211.   REAL    FCR ,                                                         00119800
  1212.           FLF ;                                                         00119900
  1213. BEGIN                                                                   00120000
  1214.     NOTEOLDONE := FALSE ;                                               00120100
  1215.     FCR := CR ;                                                         00120200
  1216.     FLF := LF ;                                                         00120300
  1217.     IF ((SENDCOUNT + 5) > SENDPACKSIZE)                                 00120400
  1218.        THEN NOTEOLDONE := TRUE                                          00120500
  1219.        ELSE BEGIN                                                       00120600
  1220.               REPLACE PSEND:PSEND BY BITSSHIFT( SENDQUOTE ),            00120700
  1221.                                      CTLSHIFT( FCR ),                   00120800
  1222.                                      BITSSHIFT( SENDQUOTE ),            00120900
  1223.                                      CTLSHIFT( FLF );                   00121000
  1224.               SENDCOUNT := * + 4 ;                                      00121100
  1225.               DOEOL := FALSE ;                                          00121200
  1226.             END ;                                                       00121300
  1227. END;                                                                    00121400
  1228. END NOTEOLDONE ;                                                        00121500
  1229.                                                                         00121600
  1230. $PAGE                                                                   00121700
  1231. BOOLEAN PROCEDURE PUTINPACKET ;                                         00121800
  1232. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00121900
  1233. %                                                                     % 00122000
  1234. %   PUTS A RECORD IN THE                                              % 00122100
  1235. %   DATAFIELD OF THE SEND - PACKET .                                  % 00122200
  1236. %                                                                     % 00122300
  1237. %   END OF RECORD : - EMPTYBUF AND DOEOL BECOME TRUE                  % 00122400
  1238. %                   - TRY TO DO AN EOL, WHEN NOT POSSIBLE             % 00122500
  1239. %                     PACKFULL BECOMES TRUE AND DOEOL STAYES TRUE.    % 00122600
  1240. %   PUT CHARACTERS IN DATAFIELD UNTIL RECORD IS EMPTY                 % 00122700
  1241. %   OR DATAFIELD OF THE PACKET IF FULL .                              % 00122800
  1242. %                                                                 THS % 00122900
  1243. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00123000
  1244.                                                                         00123100
  1245. BEGIN                                                                   00123200
  1246.                                                                         00123300
  1247.   REAL    C ;                                                           00123400
  1248.                                                                         00123500
  1249.   BOOLEAN PACKFULL ;                                                    00123600
  1250.                                                                         00123700
  1251. BEGIN                                                                   00123800
  1252.   PACKFULL := FALSE ;                                                   00123900
  1253.   IF  DOEOL                                                             00124000
  1254.       THEN  PACKFULL := NOTEOLDONE ;                                    00124100
  1255.   WHILE (NOT EMPTYBUF) AND ( NOT PACKFULL ) DO                          00124200
  1256.       BEGIN                                                             00124300
  1257.         IF NUMCHAR  < 0                                                 00124400
  1258.            THEN   DOEOL := EMPTYBUF := TRUE                             00124500
  1259.            ELSE   GETCHAR( C ) ;                                        00124600
  1260.         IF  DOEOL                                                       00124700
  1261.             THEN  PACKFULL := NOTEOLDONE                                00124800
  1262.         ELSE                                                            00124900
  1263.         IF CONTROL( C )                                                 00125000
  1264.           THEN BEGIN                                                    00125100
  1265.                 IF ((SENDCOUNT + 3) > SENDPACKSIZE)                     00125200
  1266.                     THEN BEGIN                                          00125300
  1267.                            PACKFULL := TRUE;                            00125400
  1268.                            PRCBUF := * - 1 ;                            00125500
  1269.                            NUMCHAR := * + 1 ;                           00125600
  1270.                          END                                            00125700
  1271.                     ELSE BEGIN                                          00125800
  1272.                          REPLACE PSEND:PSEND BY BITSSHIFT( SENDQUOTE ), 00125900
  1273.                                                 CTLSHIFT( C );          00126000
  1274.                          SENDCOUNT := * + 2                             00126100
  1275.                          END;                                           00126200
  1276.                END                                                      00126300
  1277.         ELSE                                                            00126400
  1278.         IF (C = SENDQUOTE )                                             00126500
  1279.            THEN BEGIN                                                   00126600
  1280.                   IF ((SENDCOUNT + 3) > SENDPACKSIZE)                   00126700
  1281.                      THEN BEGIN                                         00126800
  1282.                             PACKFULL := TRUE ;                          00126900
  1283.                             PRCBUF := * - 1 ;                           00127000
  1284.                             NUMCHAR := * + 1 ;                          00127100
  1285.                           END                                           00127200
  1286.                      ELSE BEGIN                                         00127300
  1287.                           REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE),  00127400
  1288.                                                  BITSSHIFT(SENDQUOTE) ; 00127500
  1289.                           SENDCOUNT := * + 2                            00127600
  1290.                           END ;                                         00127700
  1291.                 END                                                     00127800
  1292.         ELSE BEGIN                                                      00127900
  1293.                IF  ((SENDCOUNT + 2) > SENDPACKSIZE)                     00128000
  1294.                    THEN BEGIN                                           00128100
  1295.                           PACKFULL := TRUE ;                            00128200
  1296.                           PRCBUF := * - 1 ;                             00128300
  1297.                           NUMCHAR := * + 1 ;                            00128400
  1298.                         END                                             00128500
  1299.                    ELSE BEGIN                                           00128600
  1300.                           REPLACE PSEND:PSEND BY BITSSHIFT( C );        00128700
  1301.                           SENDCOUNT := * + 1 ;                          00128800
  1302.                         END ;                                           00128900
  1303.              END ;                                                      00129000
  1304.        END;                                                             00129100
  1305.   PUTINPACKET := PACKFULL ;                                             00129200
  1306. END;                                                                    00129300
  1307. END  PUTINPACKET ;                                                      00129400
  1308.                                                                         00129500
  1309. $PAGE                                                                   00129600
  1310. BOOLEAN PROCEDURE REPPUTINPACKET ;                                      00129700
  1311. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%             00129800
  1312. %   PUTS A RECORD IN THE DATAFIELD OF THE SEND - PACKET.  %             00129900
  1313. %                                                         %             00130000
  1314. %   END OF RECORD: - EMPTYBUF AND DOEOL BECOME TRUE       %             00130100
  1315. %                  - TRY TO DO AN EOL ,WHEN NOT POSSIBLE  %             00130200
  1316. %                    PACKFULL BECOMES TRUE AND DOEOL      %             00130300
  1317. %                    STAYES TRUE.                         %             00130400
  1318. %   PUT CHARACTERS IN DATAFIELD UNTIL RECORD IS EMPTY     %             00130500
  1319. %   OR DATAFIELD OF THE PACKET IS FULL.                   %             00130600
  1320. %   DOES FILE-COMPRESSION.                                %             00130700
  1321. %                                                         %             00130800
  1322. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%             00130900
  1323.                                                                         00131000
  1324. BEGIN                                                                   00131100
  1325.     REAL C;                                                             00131200
  1326.     BOOLEAN PACKFULL;                                                   00131300
  1327.     BEGIN                                                               00131400
  1328.         PACKFULL := FALSE;                                              00131500
  1329.         IF WAITWITHEOL THEN IF (PACKFULL := PUTCHARSINSENDPACKET) THEN  00131600
  1330.                                                                   ELSE  00131700
  1331.                             BEGIN                                       00131800
  1332.                                 WAITWITHEOL := FALSE;                   00131900
  1333.                                 COUNT := 0; LASTCHAR := 0               00132000
  1334.                             END;                                        00132100
  1335.         IF DOEOL THEN PACKFULL := NOTEOLDONE;                           00132200
  1336.         WHILE (NOT EMPTYBUF) AND (NOT PACKFULL) DO                      00132300
  1337.         BEGIN                                                           00132400
  1338.             IF NUMCHAR < 0 THEN                                         00132500
  1339.             BEGIN                                                       00132600
  1340.                 IF (PACKFULL := PUTCHARSINSENDPACKET) THEN              00132700
  1341.                     WAITWITHEOL := TRUE               ELSE              00132800
  1342.                     BEGIN COUNT := 0; LASTCHAR := 0 END;                00132900
  1343.                 DOEOL := EMPTYBUF := TRUE                               00133000
  1344.             END            ELSE GETCHAR(C);                             00133100
  1345.             IF DOEOL THEN IF PACKFULL THEN ELSE PACKFULL:=NOTEOLDONE    00133200
  1346.                      ELSE                                               00133300
  1347.             BEGIN                                                       00133400
  1348.                 IF COUNT = 0 THEN                                       00133500
  1349.                 BEGIN LASTCHAR := C; COUNT := 1 END                     00133600
  1350.                              ELSE                                       00133700
  1351.                 BEGIN                                                   00133800
  1352.                     IF C = LASTCHAR THEN                                00133900
  1353.                     BEGIN                                               00134000
  1354.                         COUNT := * + 1;                                 00134100
  1355.                         IF COUNT = 94 THEN                              00134200
  1356.                            IF (PACKFULL := PUTCHARSINSENDPACKET) THEN   00134300
  1357.                            BEGIN                                        00134400
  1358.                                PRCBUF := * - 1;                         00134500
  1359.                                NUMCHAR := * + 1;                        00134600
  1360.                                COUNT := * - 1                           00134700
  1361.                            END                                   ELSE   00134800
  1362.                            BEGIN COUNT := 0; LASTCHAR := 0 END          00134900
  1363.                     END              ELSE                               00135000
  1364.                     BEGIN                                               00135100
  1365.                         IF (PACKFULL := PUTCHARSINSENDPACKET) THEN      00135200
  1366.                         BEGIN PRCBUF := * - 1; NUMCHAR := * + 1 END     00135300
  1367.                                                               ELSE      00135400
  1368.                         BEGIN LASTCHAR := C; COUNT := 1 END             00135500
  1369.                     END                                                 00135600
  1370.                  END                                                    00135700
  1371.              END                                                        00135800
  1372.          END;                                                           00135900
  1373.          REPPUTINPACKET := PACKFULL;                                    00136000
  1374.     END                                                                 00136100
  1375. END        REPPUTINPACKET;                                              00136200
  1376. $PAGE                                                                   00136300
  1377. BOOLEAN PROCEDURE PUTBININPACKET;                                       00136400
  1378. BEGIN                                                                   00136500
  1379.     REAL C;                                                             00136600
  1380.     BOOLEAN PACKFULL;                                                   00136700
  1381.     BEGIN                                                               00136800
  1382.         PACKFULL := FALSE;                                              00136900
  1383.         WHILE (NOT EMPTYBUF) AND (NOT PACKFULL) DO                      00137000
  1384.         BEGIN                                                           00137100
  1385.             IF NUMCHAR = 0 THEN EMPTYBUF := TRUE                        00137200
  1386.                            ELSE GETBINCHAR(C);                          00137300
  1387.             IF EMPTYBUF THEN  ELSE                                      00137400
  1388.             BEGIN                                                       00137500
  1389.                 IF (CHARBIT8 := C.[7:1] =1) THEN C := C & 0[7:1];       00137600
  1390.                 IF CONTROL(C) THEN                                      00137700
  1391.                 BEGIN                                                   00137800
  1392.                     IF (SENDCOUNT + 3 + BIT8) > SENDPACKSIZE THEN       00137900
  1393.                     BEGIN                                               00138000
  1394.                         PACKFULL := TRUE;                               00138100
  1395.                         PBINRECBUF := * - 1;                            00138200
  1396.                         NUMCHAR := * + 1                                00138300
  1397.                     END                                      ELSE       00138400
  1398.                     BEGIN                                               00138500
  1399.                         IF CHARBIT8 THEN                                00138600
  1400.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00138700
  1401.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE),    00138800
  1402.                                                CTLSHIFT(C);             00138900
  1403.                         SENDCOUNT := * + 2 + BIT8                       00139000
  1404.                     END                                                 00139100
  1405.                 END           ELSE                                      00139200
  1406.                 IF (C= SENDQUOTE) OR (C = SEND8BQ) THEN                 00139300
  1407.                 BEGIN                                                   00139400
  1408.                     IF (SENDCOUNT + 3 + BIT8) > SENDPACKSIZE THEN       00139500
  1409.                     BEGIN                                               00139600
  1410.                         PACKFULL := TRUE;                               00139700
  1411.                         PBINRECBUF := * - 1;                            00139800
  1412.                         NUMCHAR := * + 1                                00139900
  1413.                     END                                      ELSE       00140000
  1414.                     BEGIN                                               00140100
  1415.                         IF CHARBIT8 THEN                                00140200
  1416.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00140300
  1417.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE);    00140400
  1418.                         IF (C = SENDQUOTE) THEN                         00140500
  1419.                         REPLACE PSEND:PSEND BY BITSSHIFT(SENDQUOTE)     00140600
  1420.                                            ELSE                         00140700
  1421.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00140800
  1422.                         SENDCOUNT := * + 2 + BIT8                       00140900
  1423.                     END                                                 00141000
  1424.                 END                                ELSE                 00141100
  1425.                 BEGIN                                                   00141200
  1426.                     IF (SENDCOUNT + 2 + BIT8) > SENDPACKSIZE THEN       00141300
  1427.                     BEGIN                                               00141400
  1428.                         PACKFULL := TRUE;                               00141500
  1429.                         PBINRECBUF := * - 1;                            00141600
  1430.                         NUMCHAR := * + 1                                00141700
  1431.                     END                                      ELSE       00141800
  1432.                     BEGIN                                               00141900
  1433.                         IF CHARBIT8 THEN                                00142000
  1434.                         REPLACE PSEND:PSEND BY BITSSHIFT(SEND8BQ);      00142100
  1435.                         REPLACE PSEND:PSEND BY BITSSHIFT(C);            00142200
  1436.                         SENDCOUNT := * + 1 + BIT8                       00142300
  1437.                     END                                                 00142400
  1438.                 END                                                     00142500
  1439.             END                                                         00142600
  1440.         END;                                                            00142700
  1441.         PUTBININPACKET := PACKFULL;                                     00142800
  1442.     END                                                                 00142900
  1443. END       PUTBININPACKET;                                               00143000
  1444. $PAGE                                                                   00143100
  1445. BOOLEAN PROCEDURE REPPUTBININPACKET;                                    00143200
  1446. BEGIN                                                                   00143300
  1447.     REAL C;                                                             00143400
  1448.     BOOLEAN PACKFULL;                                                   00143500
  1449.     BEGIN                                                               00143600
  1450.         PACKFULL := FALSE;                                              00143700
  1451.         WHILE (NOT EMPTYBUF) AND (NOT PACKFULL) DO                      00143800
  1452.         BEGIN                                                           00143900
  1453.             IF NUMCHAR = 0 THEN EMPTYBUF := TRUE                        00144000
  1454.                            ELSE GETBINCHAR(C);                          00144100
  1455.             IF EMPTYBUF THEN  ELSE                                      00144200
  1456.             BEGIN                                                       00144300
  1457.                 IF COUNT = 0 THEN                                       00144400
  1458.                 BEGIN LASTCHAR := C;COUNT := 1 END                      00144500
  1459.                              ELSE                                       00144600
  1460.                 BEGIN                                                   00144700
  1461.                     IF C = LASTCHAR THEN                                00144800
  1462.                     BEGIN                                               00144900
  1463.                         COUNT := * + 1;                                 00145000
  1464.                         IF COUNT = 94 THEN                              00145100
  1465.                            IF (PACKFULL := PUTBINCHARSINSENDPACKET) THEN00145200
  1466.                            BEGIN                                        00145300
  1467.                                PBINRECBUF := * - 1;                     00145400
  1468.                                NUMCHAR := * + 1;                        00145500
  1469.                                COUNT := * - 1                           00145600
  1470.                            END                                      ELSE00145700
  1471.                            BEGIN LASTCHAR := 0;COUNT := 0 END           00145800
  1472.                     END             ELSE                                00145900
  1473.                     BEGIN                                               00146000
  1474.                         IF (PACKFULL := PUTBINCHARSINSENDPACKET) THEN   00146100
  1475.                         BEGIN                                           00146200
  1476.                             PBINRECBUF := * - 1;                        00146300
  1477.                             NUMCHAR := * + 1                            00146400
  1478.                         END                                      ELSE   00146500
  1479.                         BEGIN LASTCHAR := C; COUNT := 1 END             00146600
  1480.                     END                                                 00146700
  1481.                 END                                                     00146800
  1482.             END                                                         00146900
  1483.         END;                                                            00147000
  1484.         REPPUTBININPACKET := PACKFULL;                                  00147100
  1485.     END                                                                 00147200
  1486. END       REPPUTBININPACKET;                                            00147300
  1487. $PAGE                                                                   00147400
  1488. PROCEDURE BUILDPACKET;                                                  00147500
  1489. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00147600
  1490. %                                                                     % 00147700
  1491. %   BUILDS THE PACKETS AND CALCULATES THE CHECKSUM FOR                % 00147800
  1492. %             THE  SEND - PROCEDURE  .                                % 00147900
  1493. %                                                                 THS % 00148000
  1494. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00148100
  1495. BEGIN                                                                   00148200
  1496.                                                                         00148300
  1497.   VALUE ARRAY                               % LAYOUT                    00148400
  1498.            FILEKINDNAME(                    % FILEKIND,                 00148500
  1499.                                             % . FIRST 3 LETTERS OF      00148600
  1500.                                             % FILEKIND IN ASCII-CODE    00148700
  1501.                64,48"2E414C472020",         % .ALG                      00148800
  1502.                68,48"2E504C492020",         % .PLI                      00148900
  1503.                65,48"2E434F422020",         % .COB                      00149000
  1504.                66,48"2E464F522020",         % .FOR                      00149100
  1505.                73,48"2E4241532020",         % .BAS                      00149200
  1506.                75,48"2E4A4F422020",         % .JOB                      00149300
  1507.                81,48"2E5041532020",         % .PAS                      00149400
  1508.               192,48"2E4441542020",         % .DAT                      00149500
  1509.               193,48"2E5345512020",         % .SEQ                      00149600
  1510.               197,48"2E4344412020",         % .CDA                      00149700
  1511.               198,48"2E4353452020");        % .CSE                      00149800
  1512.                                                                         00149900
  1513.   EBCDIC ARRAY                                                          00150000
  1514.             HULP [1:92];                                                00150100
  1515.                                                                         00150200
  1516.   POINTER   PHULP ,                                                     00150300
  1517.             PLASTID ,        % POINTS TO LAST IDENTIFIER                00150400
  1518.             PLASTIDBO ;      % POINTS TO LAST IDENTIFIER BUT ONE        00150500
  1519.                                                                         00150600
  1520.   BOOLEAN   FULLPACKET ,                                                00150700
  1521.             OK ;                                                        00150800
  1522.                                                                         00150900
  1523.   INTEGER   K, J ,I ,                                                   00151000
  1524.             NOI ,            % NUMBER OF IDENTIFIERS IN FILEID.         00151100
  1525.             LOLASTID ,       % LENGTH OF LAST IDENTIFIER                00151200
  1526.             LOLASTIDBO ;     % LENGTH OF LAST IDENTIFIER BUT ONE        00151300
  1527.                                                                         00151400
  1528.   TRUTHSET  ASCSBD     ( SLASH OR BLANK OR ASCDOT ) ,                   00151500
  1529.             BLANKORDOT ( BLANK OR ASCDOT ) ;                            00151600
  1530. BEGIN                                                                   00151700
  1531. IF DEBUG THEN                                                           00151800
  1532.   WRITE( JOURNAAL[SPACE 2], <"********* BUILDING"> );                   00151900
  1533.   PSEND := SENDPACKET[1] ;                                              00152000
  1534.   CASE STATE OF                                                         00152100
  1535.       BEGIN                                                             00152200
  1536.         INIT       :                                                    00152300
  1537.                BEGIN                                                    00152400
  1538.                  SEQNUM := SENDSEQ := 0 ;                               00152500
  1539.                  SENDPTYPE := SINIT ;                                   00152600
  1540.                  SENDCOUNT := NUMPARAM + 3;                             00152700
  1541.                  REPLACE PSEND:PSEND BY BITSSHIFT( SENDSOP )      ,     00152800
  1542.                                         CHARSHIFT( SENDCOUNT )    ,     00152900
  1543.                                         CHARSHIFT( SENDSEQ )      ,     00153000
  1544.                                         BITSSHIFT( SENDPTYPE )    ,     00153100
  1545.                                         CHARSHIFT( RECVPACKSIZE ) ,     00153200
  1546.                                         CHARSHIFT( THEIRTIMEOUT )    ,  00153300
  1547.                                         CHARSHIFT( MYPAD )        ,     00153400
  1548.                                         CTLSHIFT( MYPADCHAR )     ,     00153500
  1549.                                         CHARSHIFT( MYEOL )        ,     00153600
  1550.                                         BITSSHIFT( MYQUOTE )      ,     00153700
  1551.                                         BITSSHIFT( MY8BQ )        ,     00153800
  1552.                                         BITSSHIFT( CHECKTYPE )    ,     00153900
  1553.                                         BITSSHIFT( MYREPT )     ;       00154000
  1554.                END ;                                                    00154100
  1555.                                                                         00154200
  1556.                  %  GET THE NEXT FILENAME AND MAKE IT ACCEPTABLE        00154300
  1557.         FILEHEADER :                                                    00154400
  1558.                BEGIN                                                    00154500
  1559.                  SENDPTYPE := FILEHEAD;                                 00154600
  1560.                  SENDCOUNT := 2;                                        00154700
  1561.                  PSEND     := * + 2;                                    00154800
  1562.                  REPLACE SENDPACKET[1] BY BITSSHIFT( SENDSOP );         00154900
  1563.                  REPLACE PSEND:PSEND BY CHARSHIFT( SENDSEQ ),           00155000
  1564.                                         BITSSHIFT( SENDPTYPE );         00155100
  1565.                                                                         00155200
  1566.                  REPLACE PHULP:=HULP[1]  BY " " FOR 92 ;                00155300
  1567.                  REPLACE PHULP:=HULP[1]  BY FILGET.TITLE ;              00155400
  1568.                  TRANSTOASCII( HULP, 1, 92 );                           00155500
  1569.                  SCAN PHULP:PHULP FOR K:92 UNTIL= ASCRP ;               00155600
  1570.                  IF ( K EQL 0 ) THEN BEGIN                              00155700
  1571.                                        K := 93 ;                        00155800
  1572.                                        PHULP := HULP[1] ;               00155900
  1573.                                      END                                00156000
  1574.                                 ELSE PHULP := * + 1 ;                   00156100
  1575.                  OK := FALSE ;NOI := 1 ;PLASTIDBO := PHULP;             00156200
  1576.                  WHILE ( NOT OK )  DO      % SEARCH LAST IDENTIFIER     00156300
  1577.                                            % OF FILEIDENTIFIER          00156400
  1578.                    BEGIN                                                00156500
  1579.                      J := K - 1; PLASTID := PHULP;                      00156600
  1580.                      SCAN PHULP:PHULP FOR K:J UNTIL IN ASCSBD ;         00156700
  1581.                      IF NOI = 1 THEN LOLASTIDBO := J - K                00156800
  1582.                                 ELSE LOLASTID := J - K;                 00156900
  1583.                      IF (REAL( PHULP, 1 ) IN BLANKORDOT )               00157000
  1584.                          THEN OK := TRUE                                00157100
  1585.                          ELSE BEGIN                                     00157200
  1586.                                   PHULP := * + 1;                       00157300
  1587.                                   NOI := * + 1;                         00157400
  1588.                                   IF NOI = 2                            00157500
  1589.                                     THEN ELSE                           00157600
  1590.                                          BEGIN PLASTIDBO := PLASTID ;   00157700
  1591.                                                LOLASTIDBO:= LOLASTID    00157800
  1592.                                          END                            00157900
  1593.                               END                                       00158000
  1594.                    END ;                                                00158100
  1595.                  IF EXTENSION THEN                                      00158200
  1596.                  BEGIN                                                  00158300
  1597.                      IF NOI = 1 THEN                                    00158400
  1598.                      BEGIN                                              00158500
  1599.                          REPLACE PSEND:PSEND BY                         00158600
  1600.                                       PLASTIDBO FOR LOLASTIDBO;         00158700
  1601.                          SENDCOUNT := * + LOLASTIDBO                    00158800
  1602.                      END        ELSE                                    00158900
  1603.                      BEGIN                                              00159000
  1604.                          REPLACE PSEND:PSEND BY                         00159100
  1605.                                       PLASTID FOR LOLASTID;             00159200
  1606.                          SENDCOUNT := * + LOLASTID                      00159300
  1607.                      END ;                                              00159400
  1608.                      I := MASKSEARCH(SENDFILEKINDV,REAL(NOT FALSE),     00159500
  1609.                                      FILEKINDNAME[*]);                  00159600
  1610.                      PHULP := POINTER(FILEKINDNAME[I + 1]);             00159700
  1611.                      REPLACE PSEND:PSEND BY PHULP FOR 4;                00159800
  1612.                      SENDCOUNT := * + 4                                 00159900
  1613.                  END          ELSE                                      00160000
  1614.                  BEGIN                                                  00160100
  1615.                      REPLACE PSEND:PSEND BY PLASTIDBO FOR LOLASTIDBO;   00160200
  1616.                      SENDCOUNT := * + LOLASTIDBO;                       00160300
  1617.                      IF NOI GEQ 2 THEN                                  00160400
  1618.                      BEGIN                                              00160500
  1619.                          REPLACE PSEND:PSEND BY 48"2E" FOR 1;  % .      00160600
  1620.                          SENDCOUNT := * + 1;                            00160700
  1621.                          IF LOLASTID GEQ 3 THEN                         00160800
  1622.                          BEGIN                                          00160900
  1623.                              REPLACE PSEND:PSEND BY PLASTID FOR 3 ;     00161000
  1624.                              SENDCOUNT := * + 3                         00161100
  1625.                          END               ELSE                         00161200
  1626.                          BEGIN                                          00161300
  1627.                              REPLACE PSEND:PSEND BY                     00161400
  1628.                                           PLASTID FOR LOLASTID;         00161500
  1629.                              SENDCOUNT := * + LOLASTID                  00161600
  1630.                          END                                            00161700
  1631.                      END;                                               00161800
  1632.                  END;                                                   00161900
  1633.                  SENDCOUNT := * + 1;                                    00162000
  1634.                  REPLACE SENDPACKET[2] BY CHARSHIFT( SENDCOUNT );       00162100
  1635.                  EMPTYBUF := TRUE ;                                     00162200
  1636.                  BEOF := FALSE ;                                        00162300
  1637.                END;                                                     00162400
  1638.                                                                         00162500
  1639.                     % BUILD THE DATA-PACKETS UNTIL EOF                  00162600
  1640.         FILEDATA   :                                                    00162700
  1641.                BEGIN                                                    00162800
  1642.                  FULLPACKET := FALSE ;                                  00162900
  1643.                  SENDPTYPE  := DATA ;                                   00163000
  1644.                  SENDCOUNT  := 2 ;                                      00163100
  1645.                  PSEND      := * + 2 ;                                  00163200
  1646.                  REPLACE SENDPACKET[1] BY BITSSHIFT( SENDSOP );         00163300
  1647.                  REPLACE PSEND:PSEND BY CHARSHIFT( SENDSEQ ),           00163400
  1648.                                         BITSSHIFT( SENDPTYPE );         00163500
  1649.                  IF BINARY THEN                                         00163600
  1650.                  BEGIN                                                  00163700
  1651.                      IF EMPTYBUF THEN READNEXTBINRECORD;                00163800
  1652.                      WHILE ((NOT BEOF) AND (NOT FULLPACKET)) DO         00163900
  1653.                      BEGIN                                              00164000
  1654.                          FULLPACKET := IF REPEAT THEN REPPUTBININPACKET 00164100
  1655.                                                  ELSE PUTBININPACKET;   00164200
  1656.                          IF EMPTYBUF THEN READNEXTBINRECORD             00164300
  1657.                      END ;                                              00164400
  1658.                      IF BEOF THEN                                       00164500
  1659.                      BEGIN                                              00164600
  1660.                          IF FULLPACKET THEN ELSE                        00164700
  1661.                             IF ( REPEAT AND (COUNT NEQ 0)) THEN         00164800
  1662.                                 IF FULLPACKET :=PUTBINCHARSINSENDPACKET 00164900
  1663.                                    THEN ELSE COUNT :=0                  00165000
  1664.                      END                                                00165100
  1665.                  END       ELSE                                         00165200
  1666.                  BEGIN                                                  00165300
  1667.                  IF EMPTYBUF                                            00165400
  1668.                      THEN READNEXTREC ;                                 00165500
  1669.                  WHILE ((NOT BEOF) AND (NOT FULLPACKET)) DO             00165600
  1670.                    BEGIN                                                00165700
  1671.                      FULLPACKET := IF REPEAT THEN REPPUTINPACKET        00165800
  1672.                                              ELSE PUTINPACKET;          00165900
  1673.                      IF EMPTYBUF                                        00166000
  1674.                          THEN READNEXTREC ;                             00166100
  1675.                    END ;                                                00166200
  1676.                  IF BEOF THEN                                           00166300
  1677.                  BEGIN                                                  00166400
  1678.                      IF FULLPACKET THEN ELSE                            00166500
  1679.                      BEGIN                                              00166600
  1680.                          EMPTYBUF := TRUE;                              00166700
  1681.                          IF REPEAT THEN REPPUTINPACKET                  00166800
  1682.                                    ELSE PUTINPACKET                     00166900
  1683.                      END                                                00167000
  1684.                  END                                                    00167100
  1685.                  END;                                                   00167200
  1686.                  SENDCOUNT := * + 1 ;                                   00167300
  1687.                  REPLACE SENDPACKET[2] BY CHARSHIFT( SENDCOUNT );       00167400
  1688.                END ;                                                    00167500
  1689.                                                                         00167600
  1690.         EOFFILE    :                                                    00167700
  1691.                BEGIN                                                    00167800
  1692.                  SENDPTYPE := EOF ;                                     00167900
  1693.                  SENDCOUNT := 3;                                        00168000
  1694.                  REPLACE PSEND:PSEND BY BITSSHIFT( SENDSOP ),           00168100
  1695.                                         CHARSHIFT( SENDCOUNT ),         00168200
  1696.                                         CHARSHIFT( SENDSEQ ),           00168300
  1697.                                         BITSSHIFT( SENDPTYPE );         00168400
  1698.                END;                                                     00168500
  1699.                                                                         00168600
  1700.         BREAK      :                                                    00168700
  1701.                BEGIN                                                    00168800
  1702.                  SENDPTYPE := BRK ;                                     00168900
  1703.                  SENDCOUNT := 3;                                        00169000
  1704.                  REPLACE PSEND:PSEND BY BITSSHIFT( SENDSOP ),           00169100
  1705.                                         CHARSHIFT( SENDCOUNT ),         00169200
  1706.                                         CHARSHIFT( SENDSEQ ),           00169300
  1707.                                         BITSSHIFT( SENDPTYPE );         00169400
  1708.                END;                                                     00169500
  1709.       END CASE ;                                                        00169600
  1710.   CALCSUM ( SENDPACKET, SENDCOUNT );                                    00169700
  1711.    REPLACE PSEND:PSEND BY CHARSHIFT( CHECK );                           00169800
  1712. END;                                                                    00169900
  1713. END  BUILDPACKET ;                                                      00170000
  1714.                                                                         00170100
  1715. $PAGE                                                                   00170200
  1716. PROCEDURE RESENDPACKET ;                                                00170300
  1717. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00170400
  1718. %                                                                     % 00170500
  1719. %       RESENDS THE PACKET BECAUSE OF BAD TRANSMISSION                % 00170600
  1720. %                                                                 THS % 00170700
  1721. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00170800
  1722.                                                                         00170900
  1723. BEGIN                                                                   00171000
  1724.   NUMSENDPACK := * + 1;                                                 00171100
  1725.   IF ( SENDPAD NEQ 0 ) THEN                                             00171200
  1726.             WRITE ( FILOUT[ STOP ], SENDPAD , PADARR[*] );              00171300
  1727.   WRITE( FILOUT[STOP], OLDCOUNT, OLDPACKET[*] ) ;                       00171400
  1728.   IF DEBUG THEN                                                         00171500
  1729.   WRITE(JOURNAAL[SPACE 2 ], <"RESEND **"> );                            00171600
  1730. END  RESENDPACKET ;                                                     00171700
  1731.                                                                         00171800
  1732. $PAGE                                                                   00171900
  1733. PROCEDURE TRANSMITPACKET ;                                              00172000
  1734. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00172100
  1735. %                                                                     % 00172200
  1736. %      TRANSMISSION OF A PACKET                                       % 00172300
  1737. %      AND IF NECESSARY GIVES PADDING                                 % 00172400
  1738. %                                                                 THS % 00172500
  1739. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00172600
  1740. BEGIN                                                                   00172700
  1741.   REPLACE POLD:=OLDPACKET[1] BY NULL FOR 97 ;                           00172800
  1742.   REPLACE PSEND:PSEND BY BITSSHIFT( SENDEOL );                          00172900
  1743.   TRANSTOEBCDIC( SENDPACKET, 1, SENDCOUNT + 3 ) ;                       00173000
  1744.   NUMSENDPACK := * + 1;                                                 00173100
  1745.   IF ( SENDPAD NEQ 0 ) THEN                                             00173200
  1746.             WRITE ( FILOUT[ STOP ], SENDPAD, PADARR[*] ) ;              00173300
  1747.   WRITE( FILOUT[STOP], SENDCOUNT + 3, SENDPACKET[*] ) ;                 00173400
  1748.   REPLACE POLD:=OLDPACKET[1] BY PSEND:=SENDPACKET[1] FOR 97 ;           00173500
  1749.   OLDCOUNT := SENDCOUNT + 3 ;                                           00173600
  1750.   IF DEBUG THEN                                                         00173700
  1751.   BEGIN                                                                 00173800
  1752.   PACKETTYPE := REAL( SENDPACKET[ 4 ],1 );                              00173900
  1753.   REPLACE SENDPACKET[1] BY SENDPACKET[1] FOR 97 WITH HPR ;              00174000
  1754.   WRITE(JOURNAAL[SPACE 2], < X8, "*", X2, A1, X3, A97 >,                00174100
  1755.                             PACKETTYPE, SENDPACKET[*] );                00174200
  1756.   END;                                                                  00174300
  1757.   REPLACE PSEND:= SENDPACKET[1] BY NULL FOR 97 ;                        00174400
  1758. END  TRANSMITPACKET;                                                    00174500
  1759. $PAGE                                                                   00174600
  1760. PROCEDURE SENDANSWER ( SEQ, TYPE );                                     00174700
  1761. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00174800
  1762. %                                                                     % 00174900
  1763. %        SENDS AN ACK ON A GOOD ARRIVAL OF A PACKET                   % 00175000
  1764. %        SENDS A NAK ON A BAD ARRIVAL OF A PACKET                     % 00175100
  1765. %                                                                THS  % 00175200
  1766. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00175300
  1767.                                                                         00175400
  1768. INTEGER                                                                 00175500
  1769.        SEQ ;                                                            00175600
  1770.                                                                         00175700
  1771. REAL                                                                    00175800
  1772.        TYPE ;                                                           00175900
  1773.                                                                         00176000
  1774. BEGIN                                                                   00176100
  1775.   IF  ( TYPE EQL NAK ) THEN NUMNAK := * + 1                             00176200
  1776.                        ELSE NUMACK := * + 1 ;                           00176300
  1777.   PSEND := SENDPACKET[1] ;                                              00176400
  1778.   SENDCOUNT := 3 ;                                                      00176500
  1779.   REPLACE PSEND:PSEND BY BITSSHIFT( SENDSOP ),                          00176600
  1780.                          CHARSHIFT( SENDCOUNT ),                        00176700
  1781.                          CHARSHIFT( SEQ ),                              00176800
  1782.                          BITSSHIFT( TYPE );                             00176900
  1783.   CALCSUM ( SENDPACKET, SENDCOUNT );                                    00177000
  1784.   REPLACE PSEND:PSEND BY CHARSHIFT( CHECK );                            00177100
  1785.   TRANSMITPACKET ;                                                      00177200
  1786.                                                                         00177300
  1787.  END  SENDANSWER ;                                                      00177400
  1788.                                                                         00177500
  1789. $PAGE                                                                   00177600
  1790. PROCEDURE SENDERROR( SEQ, ERRSERVER ) ;                                 00177700
  1791. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00177800
  1792. %                                                                     % 00177900
  1793. %     SEND AN ERROR - PACKET BECAUSE AN ERROR                         % 00178000
  1794. %     OCCURED WHILE IN SERVER MODE .                                  % 00178100
  1795. %                                                                 THS % 00178200
  1796. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00178300
  1797. INTEGER                                                                 00178400
  1798.      SEQ        ,                                                       00178500
  1799.      ERRSERVER ;                                                        00178600
  1800.                                                                         00178700
  1801. BEGIN                                                                   00178800
  1802.   SENDPTYPE := ERROR ;                                                  00178900
  1803.   PSEND := SENDPACKET[ 3 ] ;                                            00179000
  1804.   SENDCOUNT := 3 ;                                                      00179100
  1805.   REPLACE SENDPACKET[ 1 ] BY BITSSHIFT( SENDSOP );                      00179200
  1806.   REPLACE PSEND:PSEND BY CHARSHIFT( SEQ ),                              00179300
  1807.                          BITSSHIFT( SENDPTYPE )  ;                      00179400
  1808.   ERRORHANDLER( ERRSERVER );                                            00179500
  1809.   REPLACE PSEND:PSEND BY RECBUF[ 1 ] FOR 30 ;                           00179600
  1810.   SENDCOUNT := * + 30 ;                                                 00179700
  1811.   REPLACE SENDPACKET[ 2 ] BY CHARSHIFT( SENDCOUNT ) ;                   00179800
  1812.   CALCSUM( SENDPACKET, SENDCOUNT ) ;                                    00179900
  1813.   REPLACE PSEND:PSEND BY CHARSHIFT( CHECK ) ;                           00180000
  1814.   TRANSMITPACKET ;                                                      00180100
  1815. END SENDERROR ;                                                         00180200
  1816.                                                                         00180300
  1817.                                                                         00180400
  1818. $PAGE                                                                   00180500
  1819. BOOLEAN PROCEDURE RECEIVEPACKET;                                        00180600
  1820. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00180700
  1821. %                                                                     % 00180800
  1822. %      THIS PROCEDURE CHECKS IF A PACKET HAS A GOOD ARRIVAL           % 00180900
  1823. %      IT GIVES AN ERRORMESSAGE BY THE FOLOWING ERRORS :              % 00181000
  1824. %          - TIMEOUT ,                                                % 00181100
  1825. %          - ERROR DURING THE READACTION ,                            % 00181200
  1826. %          - WRONG START OF PACKET ,                                  % 00181300
  1827. %          - WRONG CHECKSUM .                                         % 00181400
  1828. %      WHEN IT HAS A GOOD ARRIVAL IT PUTS THE DATAFIELD IN            % 00181500
  1829. %      ARRAY   RECBUF .                                               % 00181600
  1830. %                                                                 THS % 00181700
  1831. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00181800
  1832.                                                                         00181900
  1833. BEGIN                                                                   00182000
  1834.   BOOLEAN                                                               00182100
  1835.        EC ;                                                             00182200
  1836. %                                                                       00182300
  1837. BEGIN                                                                   00182400
  1838.    RECEIVEPACKET := FALSE ;                                             00182500
  1839.    REPLACE RECVPACKET[1] BY " " FOR 96;                                 00182600
  1840.    PRECV := RECVPACKET[1] ;                                             00182700
  1841.    IF SERVERMODE THEN                                                   00182800
  1842.       EC := READ(FILIN[TIMELIMIT 60],96,RECVPACKET[*])                  00182900
  1843.                  ELSE                                                   00183000
  1844.       EC := READ(FILIN[TIMELIMIT MYTIMEOUT],96,RECVPACKET[*]);          00183100
  1845.    IF EC THEN                                                           00183200
  1846.         BEGIN                                                           00183300
  1847.           IF EC.[15:1]                                                  00183400
  1848.              THEN IF SERVERMODE THEN SENDANSWER(SEQNUM,NAK)             00183500
  1849.                                 ELSE ERRORHANDLER (READTIMEOUT)         00183600
  1850.              ELSE                                                       00183700
  1851.                     ERRORHANDLER (READERROR)                            00183800
  1852.         END                                                             00183900
  1853.    ELSE                                                                 00184000
  1854.                %  THROW AWAY  THE LEADING PACKETS AND TAKE ONLY         00184100
  1855.                %  THE LAST PACKET WHICH IS THE ONE YOU WANT .           00184200
  1856.    BEGIN                                                                00184300
  1857.        IF FILIN.CENSUS = 0 THEN                                         00184400
  1858.                            ELSE                                         00184450
  1859.        BEGIN                                                            00184475
  1860.            THRU (FILIN.CENSUS - 1) DO READ( FILIN );      %SKIP         00184500
  1861.            EC := READ(FILIN,96,RECVPACKET[*]);                          00184600
  1862.        END;                                                             00184650
  1863.        IF EC THEN ERRORHANDLER(READERROR)                               00184675
  1864.              ELSE                                                       00184700
  1865.        BEGIN                                                            00184900
  1866.        PACKETTYPE := REAL( RECVPACKET[ 4 ], 1 );                        00185000
  1867.        IF DEBUG THEN                                                    00185100
  1868.        WRITE(JOURNAAL[SPACE 2], <"RECEIVE *", X2, A1, X3, A96>,         00185200
  1869.                                 PACKETTYPE, RECVPACKET[*] );            00185300
  1870.        TRANSTOASCII( RECVPACKET, 1, 96 );                               00185400
  1871.        NUMRECVPACK := * + 1;                                            00185500
  1872.        IF (MYSOP = REAL( RECVPACKET[1],1 ))                             00185600
  1873.          THEN BEGIN                                                     00185700
  1874.            RECVCOUNT := UNCHAR( RECVPACKET[2] );                        00185800
  1875.            RECVPTYPE := REAL( RECVPACKET[4], 1 );                       00185900
  1876.            RECVCHECK := UNCHAR(RECVPACKET[RECVCOUNT + 2]);              00186000
  1877.            CALCSUM( RECVPACKET, RECVCOUNT );                            00186100
  1878.            IF CHECK = RECVCHECK                                         00186200
  1879.               THEN BEGIN                                                00186300
  1880.                     RECEIVEPACKET := TRUE;                              00186400
  1881.                     RECVSEQ := UNCHAR( RECVPACKET[3] ) ;                00186500
  1882.                     LEN := RECVCOUNT -3 ;                               00186600
  1883.                     REPLACE RECBUF[1] BY RECVPACKET[5] FOR LEN;         00186700
  1884.                    END                                                  00186800
  1885.               ELSE BEGIN                                                00186900
  1886.                      ERRORHANDLER (TRANSMITERR);                        00187000
  1887.                      NUMBADRECV := * + 1;                               00187100
  1888.                    END                                                  00187200
  1889.               END                                                       00187300
  1890.          ELSE BEGIN                                                     00187400
  1891.                 ERRORHANDLER (SOPWRONG);                                00187500
  1892.                 NUMBADRECV := * + 1 ;                                   00187600
  1893.               END ;                                                     00187700
  1894.      END;                                                               00187800
  1895.    END;                                                                 00187900
  1896. END;                                                                    00188000
  1897. END RECEIVEPACKET;                                                      00188100
  1898.                                                                         00188200
  1899. $PAGE                                                                   00188300
  1900. PROCEDURE  ENCODEPARM;                                                  00188400
  1901. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00188500
  1902. %                                                                     % 00188600
  1903. %     BUILD A RECEIVE-INIT PACKET                                     % 00188700
  1904. %                                                                 THS % 00188800
  1905. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00188900
  1906.                                                                         00189000
  1907. BEGIN  REPLACE SENDPACKET[1] BY NULL FOR 96;                            00189100
  1908.        PSEND := SENDPACKET[1] ;                                         00189200
  1909.        SENDCOUNT := NUMPARAM + 3 ;                                      00189300
  1910.        REPLACE PSEND:PSEND BY BITSSHIFT( SENDSOP )       ,              00189400
  1911.                               CHARSHIFT( SENDCOUNT )     ,              00189500
  1912.                               CHARSHIFT( SENDSEQ )       ,              00189600
  1913.                               BITSSHIFT( SENDPTYPE )     ,              00189700
  1914.                               CHARSHIFT( RECVPACKSIZE )  ,              00189800
  1915.                               CHARSHIFT( THEIRTIMEOUT )     ,           00189900
  1916.                               CHARSHIFT( MYPAD )         ,              00190000
  1917.                               CTLSHIFT(  MYPADCHAR )     ,              00190100
  1918.                               CHARSHIFT( MYEOL )         ,              00190200
  1919.                               BITSSHIFT( MYQUOTE )       ,              00190300
  1920.                               BITSSHIFT( MY8BQ )         ,              00190400
  1921.                               BITSSHIFT( CHECKTYPE )     ,              00190500
  1922.                               BITSSHIFT( MYREPT )      ;                00190600
  1923.       CALCSUM( SENDPACKET, SENDCOUNT ) ;                                00190700
  1924.       REPLACE PSEND:PSEND BY CHARSHIFT( CHECK );                        00190800
  1925. END  ENCODEPARM ;                                                       00190900
  1926.                                                                         00191000
  1927. $PAGE                                                                   00191100
  1928. PROCEDURE  DECODEPARM;                                                  00191200
  1929. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00191300
  1930. %                                                                     % 00191400
  1931. %     DECODE THE PARAMETERS FROM THE RECEIVE-INIT PACKET              % 00191500
  1932. %                                                                 THS % 00191600
  1933. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00191700
  1934. BEGIN                                                                   00191800
  1935.    IF  (RECVCOUNT < 3 )                                                 00191900
  1936.        THEN BEGIN                                                       00192000
  1937.               ERRORHANDLER( CANTRECVINIT );                             00192100
  1938.               STATE := ABORT ;                                          00192200
  1939.             END                                                         00192300
  1940.    ELSE                                                                 00192400
  1941.    BEGIN                                                                00192500
  1942.      IF ( RECVCOUNT > 3 )                                               00192600
  1943.         THEN IF (SENDPACKSIZE := UNCHAR( RECBUF[1]) EQL BLANK)          00192700
  1944.                 THEN SENDPACKSIZE := MAXPACK ;                          00192800
  1945.      IF ( RECVCOUNT > 4 )                                               00192900
  1946.         THEN IF (MYTIMEOUT := UNCHAR( RECBUF[2]) NEQ BLANK)             00193000
  1947.                 THEN MYTIMEOUT := * + 5                                 00193100
  1948.                 ELSE MYTIMEOUT := DEFTIMEOUT;                           00193200
  1949.      IF ( RECVCOUNT > 5 )                                               00193300
  1950.         THEN IF (SENDPAD := UNCHAR( RECBUF[3]) NEQ BLANK)               00193400
  1951.                THEN SENDPADCHAR := CTL(REAL( RECBUF[4],1 ))             00193500
  1952.                ELSE SENDPAD := DEFPAD;                                  00193600
  1953.      IF ( RECVCOUNT > 7 )                                               00193700
  1954.         THEN IF (SENDEOL := UNCHAR( RECBUF[5]) EQL BLANK)               00193800
  1955.                THEN SENDEOL := DEFEOL ;                                 00193900
  1956.      IF ( RECVCOUNT > 8 )                                               00194000
  1957.         THEN IF (SENDQUOTE := REAL( RECBUF[6], 1 ) EQL BLANK)           00194100
  1958.                  THEN SENDQUOTE := DEFQUOTE ;                           00194200
  1959.      IF BINARY THEN                                                     00194300
  1960.      IF (RECVCOUNT > 9 ) THEN                                           00194400
  1961.      BEGIN                                                              00194500
  1962.          SEND8BQ := REAL( RECBUF[7], 1 );                               00194600
  1963.          IF RECEIVEMODE THEN                                            00194700
  1964.          BEGIN                                                          00194800
  1965.              IF (SEND8BQ EQL NAK) OR (SEND8BQ EQL BLANK) THEN           00194900
  1966.              BEGIN                                                      00195000
  1967.                  STOPBINARY := TRUE;                                    00195100
  1968.                  MY8BQ := NAK                                           00195200
  1969.              END                                         ELSE           00195300
  1970.              BEGIN                                                      00195400
  1971.                  IF (SEND8BQ EQL ACK) THEN                              00195500
  1972.                      SEND8BQ := MY8BQ                                   00195600
  1973.                                       ELSE                              00195700
  1974.                  BEGIN                                                  00195800
  1975.                      IF (SEND8BQ EQL MYQUOTE) OR                        00195900
  1976.                         (SEND8BQ EQL MYREPT) THEN                       00196000
  1977.                      BEGIN                                              00196100
  1978.                          STOPBINARY := TRUE;                            00196200
  1979.                          MY8BQ := NAK                                   00196300
  1980.                      END                     ELSE                       00196400
  1981.                          MY8BQ := SEND8BQ                               00196500
  1982.                  END                                                    00196600
  1983.              END                                                        00196700
  1984.          END             ELSE                                           00196800
  1985.          IF (SEND8BQ EQL ACK) OR (SEND8BQ EQL MY8BQ) THEN ELSE          00196900
  1986.          STOPBINARY := TRUE                                             00197000
  1987.      END                  ELSE                                          00197100
  1988.      BEGIN                                                              00197200
  1989.          STOPBINARY := TRUE;                                            00197300
  1990.          MY8BQ := NAK                                                   00197400
  1991.      END;                                                               00197500
  1992.      IF ( RECVCOUNT > 11 ) THEN                                         00197600
  1993.      BEGIN                                                              00197700
  1994.          SENDREPT := REAL( RECBUF[9], 1 );                              00197800
  1995.          IF RECEIVEMODE THEN                                            00197900
  1996.          BEGIN                                                          00198000
  1997.              IF (SENDREPT EQL BLANK) THEN                               00198100
  1998.              BEGIN                                                      00198200
  1999.                  REPEAT := FALSE;                                       00198300
  2000.                  MYREPT := BLANK                                        00198400
  2001.              END                     ELSE                               00198500
  2002.              BEGIN                                                      00198600
  2003.                  IF (SENDREPT EQL MYQUOTE) OR (SENDREPT EQL MY8BQ) THEN 00198700
  2004.                  BEGIN                                                  00198800
  2005.                      REPEAT := FALSE;                                   00198900
  2006.                      MYREPT := BLANK                                    00199000
  2007.                  END                                               ELSE 00199100
  2008.                  BEGIN                                                  00199200
  2009.                      REPEAT := TRUE;                                    00199300
  2010.                      MYREPT := SENDREPT                                 00199400
  2011.                  END                                                    00199500
  2012.              END                                                        00199600
  2013.          END            ELSE                                            00199700
  2014.          BEGIN                                                          00199800
  2015.              IF (SENDREPT EQL MYREPT) THEN REPEAT := TRUE               00199900
  2016.                                       ELSE REPEAT := FALSE              00200000
  2017.          END                                                            00200100
  2018.      END                   ELSE                                         00200200
  2019.      BEGIN                                                              00200300
  2020.          REPEAT := FALSE;                                               00200400
  2021.          MYREPT := BLANK                                                00200500
  2022.      END;                                                               00200600
  2023.      IF DEBUG THEN                                                      00200700
  2024.      BEGIN                                                              00200800
  2025.      WRITE( JOURNAAL[ SPACE 2 ], <"PACKSIZE= ", I2, X3, "TIMEOUT= ",    00200900
  2026.              I2, X3, "PADDING= ", I2, X3, "PADCHAR= ", H2, X3,          00201000
  2027.              "EOL= ", H2, X3, "QUOTE= ", H2 >, SENDPACKSIZE,            00201100
  2028.              MYTIMEOUT, SENDPAD, SENDPADCHAR, SENDEOL, SENDQUOTE);      00201200
  2029.      WRITE(JOURNAAL,<X43,"|_________in__ascii-code________|">);         00201300
  2030.      END                                                                00201400
  2031.    END;                                                                 00201500
  2032. END  DECODEPARM ;                                                       00201600
  2033.                                                                         00201700
  2034. $PAGE                                                                   00201800
  2035. PROCEDURE FILEHANDLER;                                                  00201900
  2036. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    00202000
  2037. %                                                                  %    00202100
  2038. %   TRIES TO GET THE NEXT FILE.                                    %    00202200
  2039. %   IF IT SUCCEEDS SEVERAL FILE-ATTRIBUTES AND GLOBAL VARIABLES    %    00202300
  2040. %   ARE SET.                                                       %    00202400
  2041. %   IF THE FILE DOESN'T EXIST THEN STATE := ABORT.                 %    00202500
  2042. %   IF END OF DIRECTORY IS ENCOUNTERED THEN STATE := BREAK.        %    00202600
  2043. %                                                                  %    00202700
  2044. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    00202800
  2045. BEGIN                                                                   00202900
  2046.     ARRAY TEMP[0:15];                                                   00203000
  2047.     POINTER PTEMP;                                                      00203100
  2048.     BOOLEAN B;                                                          00203200
  2049.     REAL X;                                                             00203300
  2050.     LABEL EXIT;                                                         00203400
  2051.                                                                         00203500
  2052. BEGIN                                                                   00203600
  2053.     PTEMP := POINTER(TEMP);                                             00203700
  2054.     IF NOT(B := GETTITLE(DIRTITEL))THEN                                 00203800
  2055.     BEGIN                                                               00203900
  2056.         IF SKIPFIRSTFILE THEN                                           00204000
  2057.         BEGIN                                                           00204100
  2058.             SKIPFIRSTFILE := FALSE;                                     00204200
  2059.             GO TO EXIT                                                  00204300
  2060.         END;                                                            00204400
  2061.         PDIRTITEL := DIRTITEL[TSV];                                     00204500
  2062.         IF DIRREQUESTRESULT.[9:1] THEN  %OTHER DIRECTORY                00204600
  2063.         BEGIN                                                           00204700
  2064.             X := DIRTITEL[13];          %SECURITY                       00204800
  2065.             IF X.[19:20] = 0 AND        %PUBLIC?                        00204900
  2066.               (X.[39:20] = 1 OR         %IN?                            00205000
  2067.                X.[39:20] = 0)THEN       %IO?                            00205100
  2068.                                                   ELSE                  00205200
  2069.             BEGIN                                                       00205300
  2070.                 NUMTRY := 0;                                            00205400
  2071.                 IF SERVERMODE THEN SENDERROR(RECVSEQ,NOFILE)            00205500
  2072.                               ELSE ERRORHANDLER(NOFILE);                00205600
  2073.                 GO TO EXIT                                              00205700
  2074.             END                                                         00205800
  2075.         END;                                                            00205900
  2076.         IF NOT SERVERMODE THEN                                          00206000
  2077.            IF FIRSTFILETOSEND THEN WRITE(FILOUT,<"Proceed ">);          00206100
  2078.         REPLACE PTEMP BY PDIRTITEL WHILE IN TIETEL,".";                 00206200
  2079.         REPLACE FILGET.TITLE BY PTEMP;                                  00206300
  2080.         SCAN PDIRTITEL:PDIRTITEL WHILE IN TIETELNOSPACE;                00206400
  2081.         DEBLANK(PDIRTITEL);                                             00206500
  2082.         IF PDIRTITEL EQL "ON" THEN                                      00206600
  2083.         BEGIN                                                           00206700
  2084.             FILGET.KIND := VALUE(PACK);                                 00206800
  2085.             PDIRTITEL := * + 2;                                         00206900
  2086.             DEBLANK(PDIRTITEL);                                         00207000
  2087.             REPLACE PTEMP BY PDIRTITEL WHILE IN ALPHA,".";              00207100
  2088.             REPLACE FILGET.PACKNAME BY PTEMP;                           00207200
  2089.          END;                                                           00207300
  2090.          FILGET.FILETYPE := 7 ;                                         00207400
  2091.          FILGET.MYUSE    := VALUE( IN ) ;                               00207500
  2092.          FILGET.OPEN     := TRUE ;                                      00207600
  2093.          SENDMAXRECSIZEV     := FILGET.MAXRECSIZE ;                     00207700
  2094.          SENDFILEKINDV       := FILGET.FILEKIND ;                       00207800
  2095.          IF BINARY THEN                                                 00207900
  2096.          BEGIN                                                          00208000
  2097.              IF (SENDFILEKINDV NEQ VALUE(DATA)) THEN                    00208100
  2098.              BEGIN                                                      00208200
  2099.                  STATE := ABORT;                                        00208300
  2100.                  IF SERVERMODE THEN SENDERROR(RECVSEQ,BINFAULT)         00208400
  2101.                                ELSE ERRORHANDLER(BINFAULT);             00208500
  2102.                  GO TO EXIT                                             00208600
  2103.              END;                                                       00208700
  2104.              IF FILGET.UNITS = 0 THEN                                   00208800
  2105.                 IF (SENDMAXRECSIZEV * 6) > 512 THEN                     00208900
  2106.                     RESIZE(BINRECBUF[*],SENDMAXRECSIZEV * 6)            00209000
  2107.                                            ELSE                         00209100
  2108.                                  ELSE                                   00209200
  2109.                 IF SENDMAXRECSIZEV > 512 THEN                           00209300
  2110.                     RESIZE(BINRECBUF[*],SENDMAXRECSIZEV);               00209400
  2111.          END       ELSE                                                 00209500
  2112.          CASE SENDFILEKINDV OF                                          00209600
  2113.          BEGIN                                                          00209700
  2114.    VALUE(COBOLSYMBOL):  MAXRECCHAR := 66 ;                              00209800
  2115.    VALUE(BASICSYMBOL):  MAXRECCHAR := 68 ;                              00209900
  2116.    VALUE(JOBSYMBOL)  :  MAXRECCHAR := 80 ;                              00210000
  2117.    VALUE(CSEQDATA)   :  MAXRECCHAR := 74 ;                              00210100
  2118.    VALUE(DATA)       :  BEGIN                                           00210200
  2119.                         MAXRECCHAR := IF FILGET.UNITS = 0               00210300
  2120.                                          THEN SENDMAXRECSIZEV * 6       00210400
  2121.                                               ELSE SENDMAXRECSIZEV ;    00210500
  2122.                         MAXRECCHAR := IF MAXRECCHAR = 84                00210600
  2123.                                          THEN 80                        00210700
  2124.                                               ELSE MAXRECCHAR ;         00210800
  2125.                         END ;                                           00210900
  2126.    VALUE(CDATA)      : MAXRECCHAR := IF FILGET.UNITS = 0                00211000
  2127.                                      THEN SENDMAXRECSIZEV * 6           00211100
  2128.                                           ELSE SENDMAXRECSIZEV ;        00211200
  2129.               ELSE : MAXRECCHAR := 72 ; % SEQ, ALGOL, PL/I,             00211300
  2130.          END CASE ;                                                     00211400
  2131.          IF SERVERMODE THEN SERVERMODE := FALSE;                        00211500
  2132.      END                           ELSE                                 00211600
  2133.      IF REAL(B.[3:3])= 1 THEN  % NOFILES                                00211700
  2134.      BEGIN                                                              00211800
  2135.          STATE := ABORT;                                                00211900
  2136.          IF SERVERMODE THEN SENDERROR(RECVSEQ,FNOTEX)                   00212000
  2137.                        ELSE ERRORHANDLER(FNOTEX);                       00212100
  2138.          GO TO EXIT                                                     00212200
  2139.      END                                                                00212300
  2140.                          ELSE                                           00212400
  2141.      IF REAL(B.[3:3])= 0 THEN  % ENDOFDIRECTORY                         00212500
  2142.         IF FIRSTFILETOSEND THEN                                         00212600
  2143.         BEGIN                                                           00212700
  2144.             STATE := ABORT;                                             00212800
  2145.             IF SERVERMODE THEN SENDERROR(RECVSEQ,FNOTEX)                00212900
  2146.                           ELSE ERRORHANDLER(FNOTEX);                    00213000
  2147.             GO TO EXIT                                                  00213100
  2148.         END                                                             00213200
  2149.                         ELSE                                            00213300
  2150.         BEGIN                                                           00213400
  2151.             STATE := BREAK; NUMTRY := 0;                                00213500
  2152.             GO TO EXIT                                                  00213600
  2153.         END;                                                            00213700
  2154.      IF FIRSTFILETOSEND THEN STATE := INIT ELSE STATE := FILEHEADER;    00213800
  2155.                                                                         00213900
  2156.                                                                         00214000
  2157. EXIT:                                                                   00214100
  2158.                                                                         00214200
  2159.                                                                         00214300
  2160. END                                                                     00214400
  2161. END FILEHANDLER;                                                        00214500
  2162. $PAGE                                                                   00214600
  2163. PROCEDURE  STARTRUN;                                                    00214700
  2164. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00214800
  2165. %                                                                     % 00214900
  2166. %   INITIALIZE THE SEND- OR RECEIVE- PROCEDURE                        % 00215000
  2167. %                                                                 THS % 00215100
  2168. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00215200
  2169.                                                                         00215300
  2170. BEGIN NUMSENDPACK := 0;                                                 00215400
  2171.       NUMRECVPACK := 0;                                                 00215500
  2172.       NUMACK      := 0;                                                 00215600
  2173.       NUMNAK      := 0;                                                 00215700
  2174.       NUMACKRECV  := 0;                                                 00215800
  2175.       NUMNAKRECV  := 0;                                                 00215900
  2176.       NUMBADRECV  := 0;                                                 00216000
  2177.       NUMTRY      := 0;                                                 00216100
  2178.       IF (RUNSTATE NEQ SERVER)                                          00216200
  2179.          THEN BEGIN                                                     00216300
  2180.                 MAXTRY := DEFINITTRY ;                                  00216400
  2181.                 SEQNUM := 0 ;                                           00216500
  2182.                 SENDSEQ:= 0 ;                                           00216600
  2183.                 RECVSEQ:= 0 ;                                           00216700
  2184.               END ;                                                     00216800
  2185.                                                                         00216900
  2186.                                                                         00217000
  2187. END  STARTRUN ;                                                         00217100
  2188.                                                                         00217200
  2189. $PAGE                                                                   00217300
  2190. PROCEDURE  SENDINIT ;                                                   00217400
  2191. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00217500
  2192. %                                                                   %   00217600
  2193. %     BUILD AND SEND THE SEND-INIT PACKET.                          %   00217700
  2194. %                    ---------------------                          %   00217800
  2195. %     ARRIVAL OF ACK-PACKET                                         %   00217900
  2196. %        THEN DECODE PARAMETERS OF RECEIVE-INIT PACKET              %   00218000
  2197. %             STATE := FILEHEADER                                   %   00218100
  2198. %        ELSE TRY AGAIN UNTIL NUMTRY = 10                           %   00218200
  2199. %                                                               THS %   00218300
  2200. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00218400
  2201.                                                                         00218500
  2202. BEGIN                                                                   00218600
  2203.   IF NUMTRY > MAXTRY                                                    00218700
  2204.      THEN BEGIN                                                         00218800
  2205.             STATE := ABORT ;                                            00218900
  2206.             ERRORHANDLER( CANTSENDINIT );                               00219000
  2207.           END                                                           00219100
  2208.      ELSE BEGIN                                                         00219200
  2209.             NUMTRY := * + 1;                                            00219300
  2210.             IF NUMTRY NEQ 1                                             00219400
  2211.                THEN RESENDPACKET                                        00219500
  2212.                ELSE BEGIN                                               00219600
  2213.                         IF DEBUG THEN                                   00219700
  2214.                       WRITE( JOURNAAL, <"********* SENDINIT"> ) ;       00219800
  2215.                       BUILDPACKET;                                      00219900
  2216.                       WAIT( (DELAY) ) ;                                 00220000
  2217.                       TRANSMITPACKET ;                                  00220100
  2218.                     END;                                                00220200
  2219.             IF ( RECV := RECEIVEPACKET )                                00220300
  2220.             THEN BEGIN                                                  00220400
  2221.                IF ( RECVPTYPE EQL ACK ) AND (RECVSEQ = SEQNUM )         00220500
  2222.                   THEN BEGIN                                            00220600
  2223.                          NUMACKRECV := * + 1;                           00220700
  2224.                          DECODEPARM;                                    00220800
  2225.                          IF STOPBINARY THEN STATE := ABORT              00220900
  2226.                                        ELSE STATE := FILEHEADER;        00221000
  2227.                          NUMTRY := 0;                                   00221100
  2228.                          MAXTRY := DEFTRY;                              00221200
  2229.                          SENDSEQ := (SENDSEQ + 1) MOD 64;               00221300
  2230.                          SEQNUM := SENDSEQ ;                            00221400
  2231.                        END                                              00221500
  2232.                ELSE                                                     00221600
  2233.                IF ( RECVPTYPE EQL NAK) AND (RECVSEQ = SEQNUM )          00221700
  2234.                   THEN  NUMNAKRECV := * + 1                             00221800
  2235.                   ELSE  NUMBADRECV := * + 1 ;                           00221900
  2236.                  END ;                                                  00222000
  2237.           END ;                                                         00222100
  2238. END  SENDINIT ;                                                         00222200
  2239. $PAGE                                                                   00222300
  2240. PROCEDURE SENDFILE ;                                                    00222400
  2241. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00222500
  2242. %                                                                   %   00222600
  2243. %   BUILD AND SENDS THE FILEHEADER - PACKET.                        %   00222700
  2244. %                   ------------------------                        %   00222800
  2245. %   BY ARRIVAL OF ACK-PACKET                                        %   00222900
  2246. %      THEN  STATE := FILEDATA                                      %   00223000
  2247. %      ELSE  TRY AGAIN UNTIL NUMTRY = 5 .                           %   00223100
  2248. %                                                               THS %   00223200
  2249. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00223300
  2250.                                                                         00223400
  2251. BEGIN                                                                   00223500
  2252.   IF ( NUMTRY > MAXTRY )                                                00223600
  2253.      THEN BEGIN                                                         00223700
  2254.             STATE := ABORT;                                             00223800
  2255.             ERRORHANDLER( CANTSENDFH );                                 00223900
  2256.           END                                                           00224000
  2257.      ELSE                                                               00224100
  2258.           BEGIN                                                         00224200
  2259.             NUMTRY := * + 1;                                            00224300
  2260.             IF ( NUMTRY NEQ 1 )                                         00224400
  2261.                THEN   RESENDPACKET                                      00224500
  2262.                ELSE BEGIN                                               00224600
  2263.                         IF DEBUG THEN                                   00224700
  2264.                         WRITE( JOURNAAL, <"********* SENDFILEHEAD"> ) ; 00224800
  2265.                         BUILDPACKET;                                    00224900
  2266.                         TRANSMITPACKET ;                                00225000
  2267.                     END;                                                00225100
  2268.             IF ( RECV := RECEIVEPACKET )                                00225200
  2269.             THEN BEGIN                                                  00225300
  2270.                IF ((RECVPTYPE EQL ACK ) AND ( RECVSEQ = SEQNUM)) OR     00225400
  2271.                   ((RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM + 1))    00225500
  2272.                   THEN BEGIN                                            00225600
  2273.                          NUMACKRECV := * + 1;                           00225700
  2274.                          STATE := FILEDATA;                             00225800
  2275.                          COUNT := 0; LASTCHAR := 0;                     00225900
  2276.                          NUMTRY := 0;                                   00226000
  2277.                          SENDSEQ := (SENDSEQ + 1) MOD 64;               00226100
  2278.                          SEQNUM := SENDSEQ;                             00226200
  2279.                        END                                              00226300
  2280.                ELSE                                                     00226400
  2281.                IF (RECVPTYPE EQL ERROR) THEN STATE := ABORT             00226500
  2282.                ELSE                                                     00226600
  2283.                IF ( RECVPTYPE EQL NAK) AND ( RECVSEQ = SEQNUM )         00226700
  2284.                   THEN   NUMNAKRECV := * + 1                            00226800
  2285.                   ELSE  NUMBADRECV := * + 1 ;                           00226900
  2286.                  END ;                                                  00227000
  2287.           END;                                                          00227100
  2288.                                                                         00227200
  2289. END  SENDFILE;                                                          00227300
  2290.                                                                         00227400
  2291. $PAGE                                                                   00227500
  2292. PROCEDURE SENDDATA ;                                                    00227600
  2293. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00227700
  2294. %                                                                   %   00227800
  2295. %   BUILD AND SENDS THE DATA - PACKET OF THE FILE.                  %   00227900
  2296. %                   -----------------                               %   00228000
  2297. %   BY ARRIVAL OF ACK-PACKET                                        %   00228100
  2298. %      THEN  SEND NEXT DATA-PACKET                                  %   00228200
  2299. %            IF EOF-ENCOUNTERED STATE := EOFFILE                    %   00228300
  2300. %      ELSE  TRY AGAIN UNTIL NUMTRY = 5 .                           %   00228400
  2301. %                                                               THS %   00228500
  2302. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00228600
  2303.                                                                         00228700
  2304. BEGIN                                                                   00228800
  2305.   IF ( NUMTRY > MAXTRY )                                                00228900
  2306.      THEN BEGIN                                                         00229000
  2307.             STATE := ABORT;                                             00229100
  2308.             ERRORHANDLER( CANTSENDDATA );                               00229200
  2309.           END                                                           00229300
  2310.      ELSE BEGIN                                                         00229400
  2311.             NUMTRY := * + 1;                                            00229500
  2312.             IF ( NUMTRY NEQ 1 )                                         00229600
  2313.                THEN   RESENDPACKET                                      00229700
  2314.                ELSE BEGIN                                               00229800
  2315.                         IF DEBUG THEN                                   00229900
  2316.                       WRITE( JOURNAAL, <"********* SENDDATA"> ) ;       00230000
  2317.                       BUILDPACKET;                                      00230100
  2318.                       TRANSMITPACKET ;                                  00230200
  2319.                     END;                                                00230300
  2320.             IF ( RECV := RECEIVEPACKET )                                00230400
  2321.             THEN BEGIN                                                  00230500
  2322.                IF ((RECVPTYPE EQL ACK) AND ( RECVSEQ = SEQNUM)) OR      00230600
  2323.                   ((RECVPTYPE EQL NAK) AND ( RECVSEQ = SEQNUM + 1))     00230700
  2324.                   THEN BEGIN                                            00230800
  2325.                          NUMTRY := 0;                                   00230900
  2326.                          NUMACKRECV := * + 1 ;                          00231000
  2327.                          SENDSEQ := (SENDSEQ + 1) MOD 64;               00231100
  2328.                          SEQNUM := SENDSEQ;                             00231200
  2329.                          IF BEOF THEN                                   00231300
  2330.                             IF BINARY THEN                              00231400
  2331.                                IF (REPEAT AND (COUNT NEQ 0))            00231500
  2332.                                     THEN  EMPTYBUF := TRUE              00231600
  2333.                                     ELSE STATE := EOFFILE               00231700
  2334.                                       ELSE                              00231800
  2335.                             IF DOEOL THEN ELSE STATE := EOFFILE         00231900
  2336.                        END                                              00232000
  2337.                ELSE                                                     00232100
  2338.                IF ( RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM )        00232200
  2339.                   THEN   NUMNAKRECV := * + 1                            00232300
  2340.                   ELSE  NUMBADRECV := * + 1 ;                           00232400
  2341.                  END ;                                                  00232500
  2342.         END;                                                            00232600
  2343. END  SENDDATA;                                                          00232700
  2344.                                                                         00232800
  2345. $PAGE                                                                   00232900
  2346. PROCEDURE SENDEOF ;                                                     00233000
  2347. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00233100
  2348. %                                                                   %   00233200
  2349. %   BUILD AND SENDS THE EOF-PACKET.                                 %   00233300
  2350. %                   ---------------                                 %   00233400
  2351. %      THEN CLOSE  THE FILE                                         %   00233500
  2352. %           STATE := NEXTFILE.                                      %   00233600
  2353. %      ELSE TRY AGAIN UNTIL NUMTRY = 5 .                            %   00233700
  2354. %                                                               THS %   00233800
  2355. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00233900
  2356.                                                                         00234000
  2357. BEGIN                                                                   00234100
  2358.   IF ( NUMTRY > MAXTRY )                                                00234200
  2359.      THEN BEGIN                                                         00234300
  2360.             STATE := ABORT;                                             00234400
  2361.             ERRORHANDLER( CANTSENDEOF );                                00234500
  2362.           END                                                           00234600
  2363.      ELSE BEGIN                                                         00234700
  2364.             NUMTRY := * + 1;                                            00234800
  2365.             IF ( NUMTRY NEQ 1 )                                         00234900
  2366.                THEN   RESENDPACKET                                      00235000
  2367.                ELSE BEGIN                                               00235100
  2368.                         IF DEBUG THEN                                   00235200
  2369.                       WRITE( JOURNAAL, <"********* SENDEOF"> );         00235300
  2370.                       BUILDPACKET;                                      00235400
  2371.                       TRANSMITPACKET ;                                  00235500
  2372.                     END;                                                00235600
  2373.             IF ( RECV := RECEIVEPACKET )                                00235700
  2374.             THEN BEGIN                                                  00235800
  2375.                IF ((RECVPTYPE EQL ACK ) AND ( RECVSEQ = SEQNUM)) OR     00235900
  2376.                   ((RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM + 1))    00236000
  2377.                   THEN BEGIN                                            00236100
  2378.                          IF DIRECTORY THEN STATE := NEXTFILE            00236200
  2379.                                       ELSE STATE := BREAK;              00236300
  2380.                          NUMACKRECV := * + 1 ;                          00236400
  2381.                          IF  FILGET.OPEN                                00236500
  2382.                              THEN CLOSE( FILGET ) ;                     00236600
  2383.                          NUMTRY := 0;                                   00236700
  2384.                          SENDSEQ := (SENDSEQ + 1) MOD 64;               00236800
  2385.                          SEQNUM := SENDSEQ;                             00236900
  2386.                        END                                              00237000
  2387.                ELSE                                                     00237100
  2388.                IF ( RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM )        00237200
  2389.                   THEN   NUMNAKRECV := * + 1                            00237300
  2390.                   ELSE  NUMBADRECV := * + 1 ;                           00237400
  2391.                  END ;                                                  00237500
  2392.         END;                                                            00237600
  2393. END  SENDEOF;                                                           00237700
  2394.                                                                         00237800
  2395. $PAGE                                                                   00237900
  2396. PROCEDURE SENDBREAK ;                                                   00238000
  2397. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00238100
  2398. %                                                                   %   00238200
  2399. %   BUILD AND SENDS THE BREAK-PACKET.                               %   00238300
  2400. %                   -----------------                               %   00238400
  2401. %      THEN  STATE := COMPLETE                                      %   00238500
  2402. %      ELSE  TRY AGAIN UNTIL NUMTRY = 5                             %   00238600
  2403. %                                                               THS %   00238700
  2404. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00238800
  2405. %                                                                       00238900
  2406. BEGIN                                                                   00239000
  2407.   IF ( NUMTRY > MAXTRY )                                                00239100
  2408.      THEN BEGIN                                                         00239200
  2409.             STATE := ABORT;                                             00239300
  2410.             ERRORHANDLER( CANTSENDBRK );                                00239400
  2411.           END                                                           00239500
  2412.      ELSE BEGIN                                                         00239600
  2413.             NUMTRY := * + 1;                                            00239700
  2414.             IF ( NUMTRY NEQ 1 )                                         00239800
  2415.                THEN   RESENDPACKET                                      00239900
  2416.                ELSE BEGIN                                               00240000
  2417.                       IF DEBUG THEN                                     00240100
  2418.                       WRITE( JOURNAAL, <"********* SENDBREAK"> ) ;      00240200
  2419.                       BUILDPACKET;                                      00240300
  2420.                       TRANSMITPACKET;                                   00240400
  2421.                     END;                                                00240500
  2422.             IF ( RECV := RECEIVEPACKET )                                00240600
  2423.             THEN BEGIN                                                  00240700
  2424.                IF ((RECVPTYPE EQL ACK ) AND ( RECVSEQ = SEQNUM)) OR     00240800
  2425.                   ((RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM + 1))    00240900
  2426.                   THEN BEGIN                                            00241000
  2427.                          NUMACKRECV := * + 1;                           00241100
  2428.                          STATE := COMPLETE;                             00241200
  2429.                          NUMTRY := 0;                                   00241300
  2430.                          SENDSEQ := (SENDSEQ + 1) MOD 64;               00241400
  2431.                          SEQNUM := SENDSEQ;                             00241500
  2432.                        END                                              00241600
  2433.                ELSE                                                     00241700
  2434.                IF ( RECVPTYPE EQL NAK ) AND ( RECVSEQ = SEQNUM )        00241800
  2435.                   THEN   NUMNAKRECV := * + 1                            00241900
  2436.                   ELSE  NUMBADRECV := * + 1 ;                           00242000
  2437.                   END                                                   00242100
  2438.         END;                                                            00242200
  2439. END  SENDBRK;                                                           00242300
  2440.                                                                         00242400
  2441. $PAGE                                                                   00242500
  2442. PROCEDURE  SENDPROC ;                                                   00242600
  2443. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00242700
  2444. %                                                                    %  00242800
  2445. %    STATETABLE - SWITCHER FOR THE SEND-PROCEDURE                    %  00242900
  2446. %                                                                THS %  00243000
  2447. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00243100
  2448.                                                                         00243200
  2449. BEGIN STARTRUN ;                                                        00243300
  2450.       EMPTYBUF := TRUE;                                                 00243400
  2451.       DOEOL   := FALSE;                                                 00243500
  2452.       BEOF    := FALSE;                                                 00243600
  2453.       REPLACE PSEND := SENDPACKET[1] BY NULL FOR 97;                    00243700
  2454.       IF DIRREQUESTRESULT := DIRREQUEST(DIRIN,FALSE) THEN               00243800
  2455.       BEGIN                                                             00243900
  2456.            STATE := ABORT;                                              00244000
  2457.            IF SERVERMODE THEN SENDERROR(RECVSEQ,ERRDIRREQUEST)          00244100
  2458.                          ELSE ERRORHANDLER(ERRDIRREQUEST)               00244200
  2459.       END                                            ELSE               00244300
  2460.       BEGIN                                                             00244400
  2461.           STATE := NEXTFILE;                                            00244500
  2462.           TSV := TITLESTART;                                            00244600
  2463.       END;                                                              00244700
  2464.       WHILE (STATE NEQ ABORT) AND (STATE NEQ COMPLETE) DO               00244800
  2465.          BEGIN                                                          00244900
  2466.             CASE  STATE OF                                              00245000
  2467.           BEGIN                                                         00245100
  2468.             NEXTFILE     :    FILEHANDLER;                              00245200
  2469.             INIT         :    BEGIN                                     00245300
  2470.                                   FIRSTFILETOSEND :=FALSE; SENDINIT     00245400
  2471.                               END;                                      00245500
  2472.             FILEHEADER   :    SENDFILE;                                 00245600
  2473.             FILEDATA     :    SENDDATA;                                 00245700
  2474.             EOFFILE      :    SENDEOF;                                  00245800
  2475.             BREAK        :    SENDBREAK;                                00245900
  2476.             ABORT        :    ; % NOTHING                               00246000
  2477.             COMPLETE     :    ; % NOTHING                               00246100
  2478.           END CASE;                                                     00246200
  2479.          END;                                                           00246300
  2480.       IF  FILGET.OPEN                                                   00246400
  2481.           THEN  CLOSE( FILGET ) ;                                       00246500
  2482.       IF DEBUG THEN                                                     00246600
  2483.       BEGIN                                                             00246700
  2484.       IF STOPBINARY THEN                                                00246800
  2485.          WRITE(JOURNAAL,<"THE OTHER KERMIT CAN'T DO BINARY TRANSPORT">);00246900
  2486.       WRITE(JOURNAAL, *//, NUMSENDPACK, NUMRECVPACK );                  00247000
  2487.       WRITE(JOURNAAL, *//, NUMACK, NUMNAK );                            00247100
  2488.       WRITE(JOURNAAL[SPACE 2],*//, NUMACKRECV, NUMNAKRECV, NUMBADRECV); 00247200
  2489.       WRITE(JOURNAAL[SPACE 3], <"**********************************">); 00247300
  2490.       END                                                               00247400
  2491. END  SENDPROC ;                                                         00247500
  2492. $PAGE                                                                   00247600
  2493. PROCEDURE  ISFILEALREADYPRESENT ;                                       00247700
  2494. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00247800
  2495. %                                                                     % 00247900
  2496. %   CHECKS IF THE FILE IS ALREADY PRESENT                             % 00248000
  2497. %   AND IF SO HE CHANGES THE NAME OF THE FILE AND CHECKS AGAIN        % 00248100
  2498. %   IF  NOT  RESIDENT                                                 % 00248200
  2499. %       THEN SET THE FILE - ATTRIBUTES                                % 00248300
  2500. %       ELSE GIVE AN ERRORMESSAGE                                     % 00248400
  2501. %                                                                 THS % 00248500
  2502. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00248600
  2503. BEGIN                                                                   00248700
  2504.                                                                         00248800
  2505. EBCDIC ARRAY                                                            00248900
  2506.         HULP [1:80] ,                                                   00249000
  2507.         TEMP [ 1:100 ] ;                                                00249100
  2508.                                                                         00249200
  2509. POINTER                                                                 00249300
  2510.         PHULP   ,                                                       00249400
  2511.         PTEMP ;                                                         00249500
  2512.                                                                         00249600
  2513. INTEGER                                                                 00249700
  2514.         NUM , J ;                                                       00249800
  2515.                                                                         00249900
  2516. REAL                                                                    00249920
  2517.         FILTER ;                                                        00249940
  2518. LABEL                                                                   00250000
  2519.         EXIT ;                                                          00250100
  2520. TRANSLATETABLE CHANGESIGNS ( EBCDIC TO EBCDIC,  "." TO "/" ,            00250200
  2521.                              "!#$%&'()_=-{}][`*+@\~|<>?" TO "X" );      00250300
  2522.                                                                         00250400
  2523. BEGIN                                                                   00250500
  2524.   NUM := 0 ;                                                            00250600
  2525.   REPLACE PTEMP := TEMP[ 1 ] BY " " FOR 100;                            00250700
  2526.   IF RECDIR THEN                                                        00250800
  2527.   REPLACE PTEMP:PTEMP BY SCRATCH[1] FOR LOFSCRATCH,"/";                 00250900
  2528.   FILTER := REAL( RECBUF[LEN],1 );                                      00250920
  2529.                                   % skip all characters but not :       00250930
  2530.                                   %    .                                00250940
  2531.                                   %    0 -- 9                           00250950
  2532.                                   %    A -- Z                           00250960
  2533.                                   %    a -- z                           00250970
  2534.                                   % at the end of this fileidentifier.  00250975
  2535.   WHILE ( (FILTER LEQ 45) OR                                            00250980
  2536.           (FILTER EQL 47) OR                                            00250985
  2537.           ((FILTER GEQ 58) AND (FILTER LEQ 64)) OR                      00250988
  2538.           ((FILTER GEQ 91) AND (FILTER LEQ 96)) OR                      00250990
  2539.           (FILTER GEQ 123) ) DO                                         00250992
  2540.           BEGIN                                                         00250994
  2541.               LEN := * - 1;                                             00250996
  2542.               FILTER := REAL( RECBUF[LEN],1 )                           00250998
  2543.           END;                                                          00250999
  2544.   TRANSTOEBCDIC( RECBUF, 1, LEN );                                      00251000
  2545.   REPLACE RECBUF[ 1 ] BY RECBUF[ 1 ] FOR LEN WITH LTOU ;                00251100
  2546.   REPLACE PTEMP:PTEMP BY RECBUF[ 1 ] FOR LEN WITH CHANGESIGNS, ".";     00251200
  2547.   IF (PTEMP - 2) = "/" THEN REPLACE PTEMP:(PTEMP - 2) BY ".";           00251300
  2548.   FILSTORE.NEWFILE := FALSE ;                                           00251400
  2549.   REPLACE FILSTORE.TITLE BY TEMP[ 1 ] ;                                 00251500
  2550.   FILSTORE.FILEKIND := RECFILEKINDV ;                                   00251600
  2551.   IF BINARY THEN                                                        00251700
  2552.   BEGIN                                                                 00251800
  2553.       IF (RECFILEKINDV NEQ VALUE(DATA)) THEN                            00251900
  2554.       BEGIN                                                             00252000
  2555.           STATE := ABORT;                                               00252100
  2556.           ERRORHANDLER(BINFAULT);                                       00252200
  2557.           GO TO EXIT                                                    00252300
  2558.       END                                                               00252400
  2559.   END;                                                                  00252500
  2560.   IF FILSTORE.RESIDENT THEN                                             00252600
  2561.   BEGIN                                                                 00252700
  2562.       IF WARNINGS.OPEN THEN                                             00252800
  2563.                        ELSE                                             00252820
  2564.       BEGIN                                                             00252840
  2565.           IF WARNINGS.RESIDENT THEN                                     00252860
  2566.           BEGIN                                                         00252880
  2567.               OPEN(WARNINGS);                                           00252890
  2568.               SPACE(WARNINGS,WARNINGS.LASTRECORD + 1)                   00252900
  2569.           END                  ELSE                                     00252920
  2570.           WARNINGS.NEWFILE := TRUE                                      00252940
  2571.       END;                                                              00252960
  2572.       PRINTLOGHEADING(FALSE);                                           00253000
  2573.       WRITE(WARNINGS,<"FILE ALREADY EXISTS">);                          00253100
  2574.       SCAN TEMP[1] FOR J:100 UNTIL = ".";                               00253200
  2575.       REPLACE PHULP:= HULP[1] BY " " FOR 80;                            00253300
  2576.       REPLACE PHULP:PHULP BY "TITLE ",TEMP[1] FOR (100 - J),            00253400
  2577.                                    " CHANGED INTO ";                    00253500
  2578.       WHILE ( FILSTORE.RESIDENT AND NUM < 99 )  DO                      00253600
  2579.       BEGIN                                                             00253700
  2580.           NUM := * + 1 ;                                                00253800
  2581.           REPLACE (PTEMP - 1) BY NUM FOR 2 DIGITS, "." ;                00253900
  2582.           REPLACE FILSTORE.TITLE BY TEMP[ 1 ]                           00254000
  2583.       END ;                                                             00254100
  2584.       IF NUM < 99 THEN                                                  00254200
  2585.       BEGIN                                                             00254300
  2586.           SCAN TEMP[1] FOR J:100 UNTIL = ".";                           00254400
  2587.           REPLACE PHULP:PHULP BY TEMP[1] FOR (100 - J);                 00254500
  2588.           WRITE(WARNINGS,<A80>,HULP[*])                                 00254600
  2589.       END                                                               00254700
  2590.   END;                                                                  00254800
  2591.   IF ( NUM = 99 AND FILSTORE.RESIDENT )                                 00254900
  2592.        THEN BEGIN                                                       00255000
  2593.               STATE := ABORT ;                                          00255100
  2594.               ERRORHANDLER( CANTNAMEFILE ) ;                            00255200
  2595.             END                                                         00255300
  2596.   ELSE BEGIN                                                            00255400
  2597.        FILSTORE.NEWFILE := TRUE ;                                       00255500
  2598.        IF (RECFILEKINDV = VALUE(DATA)) THEN ELSE                        00255600
  2599.        BEGIN                                                            00255700
  2600.            GETCANDEPARAM( RECTYPE ) ;                                   00255800
  2601.            IF (SSEQ EQL 0) THEN PSTORE := * + SEQWIDTH;                 00255900
  2602.        END;                                                             00256000
  2603.        FILSTORE.MAXRECSIZE := RECMAXRECSIZEV ;                          00256100
  2604.        IF(RECMAXRECSIZEV GTR 20) OR (RECFILEKINDV = VALUE(DATA))        00256200
  2605.           THEN  BEGIN                                                   00256300
  2606.                   FILSTORE (UNITS = 1,                                  00256400
  2607.                             BLOCKSIZE = 3 * RECMAXRECSIZEV);            00256500
  2608.                 END                                                     00256600
  2609.           ELSE  BEGIN                                                   00256700
  2610.                   FILSTORE.BLOCKSIZE := 30 * RECMAXRECSIZEV ;           00256800
  2611.                   FILSTORE.UNITS     := 0 ;                             00256900
  2612.                 END ;                                                   00257000
  2613.        FILSTORE.FLEXIBLE := TRUE ;                                      00257100
  2614.        ROOM := MAXRECCHAR :=                                            00257200
  2615.                 IF (RECFILEKINDV = VALUE(DATA)) THEN RECMAXRECSIZEV     00257300
  2616.                                                 ELSE TEXTWIDTH;         00257400
  2617.        IF FILSTORE.ATTERR OR FILSTORE.AVAILABLE EQL 12                  00257500
  2618.           THEN  STATE := ABORT                                          00257600
  2619.        END                                                              00257700
  2620. END ;                                                                   00257800
  2621.                                                                         00257900
  2622. EXIT:                                                                   00258000
  2623.                                                                         00258100
  2624. END   ISFILEALREADYPRESENT ;                                            00258200
  2625.                                                                         00258300
  2626. $PAGE                                                                   00258400
  2627. PROCEDURE  RECEIVEINIT;                                                 00258500
  2628. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00258600
  2629. %                                                                     % 00258700
  2630. %    RECEIVE AN SEND-INIT PACKET                                      % 00258800
  2631. %            -------------------                                      % 00258900
  2632. %    IF  SO  THEN DECODE THE PARAMETERS AND                           % 00259000
  2633. %                 SEND AN RECEIVE-INIT PACKET                         % 00259100
  2634. %            ELSE SEND A NAK - PACKET .                               % 00259200
  2635. %                                                                 THS % 00259300
  2636. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00259400
  2637.                                                                         00259500
  2638. BEGIN                                                                   00259600
  2639.   NUMTRY := * + 1;                                                      00259700
  2640.   IF NUMTRY > MAXTRY                                                    00259800
  2641.      THEN BEGIN                                                         00259900
  2642.             STATE := ABORT;                                             00260000
  2643.             ERRORHANDLER (CANTRECVINIT);                                00260100
  2644.           END                                                           00260200
  2645.      ELSE BEGIN                                                         00260300
  2646.               IF DEBUG THEN                                             00260400
  2647.           IF (NUMTRY = 1)                                               00260500
  2648.              THEN WRITE( JOURNAAL, <"********* RECVINIT "> ) ;          00260600
  2649.           IF ( RECV := RECEIVEPACKET )                                  00260700
  2650.              THEN BEGIN                                                 00260800
  2651.                IF (RECVPTYPE EQL SINIT)                                 00260900
  2652.                   THEN BEGIN                                            00261000
  2653.                          DECODEPARM;                                    00261100
  2654.                          IF STOPBINARY THEN                             00261200
  2655.                          BEGIN                                          00261300
  2656.                              SENDANSWER(RECVSEQ,ERROR);                 00261400
  2657.                              STATE := ABORT                             00261500
  2658.                          END           ELSE                             00261600
  2659.                          BEGIN                                          00261700
  2660.                              SENDPTYPE := ACK;                          00261800
  2661.                              SENDSEQ := RECVSEQ;                        00261900
  2662.                              ENCODEPARM ;                               00262000
  2663.                              TRANSMITPACKET;                            00262100
  2664.                              STATE  := FILEHEADER;                      00262200
  2665.                              NUMTRY := 0 ;                              00262300
  2666.                              MAXTRY := DEFTRY;                          00262400
  2667.                              SEQNUM := (SEQNUM + 1) MOD 64;             00262500
  2668.                          END                                            00262600
  2669.                        END                                              00262700
  2670.                      ELSE  NUMBADRECV := * + 1 ;                        00262800
  2671.                END                                                      00262900
  2672.              ELSE SENDANSWER( SEQNUM, NAK );                            00263000
  2673.           END;                                                          00263100
  2674.                                                                         00263200
  2675. END RECEIVEINIT;                                                        00263300
  2676.                                                                         00263400
  2677. $PAGE                                                                   00263500
  2678. PROCEDURE RECEIVEFILE ;                                                 00263600
  2679. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00263700
  2680. %                                                                     % 00263800
  2681. %     RECEIVE THE FILE-HEADER PACKET                                  % 00263900
  2682. %             -----------------------                                 % 00264000
  2683. %     IF  SO THEN CHECK IF FILENAME IS NOT RESIDENT                   % 00264100
  2684. %                 SEND AN ACK-PACKET                                  % 00264200
  2685. %                 STATE := FILEDATA                                   % 00264300
  2686. %     ELSE IF RECEIVING A  SEND-INIT PACKET THEN ACK IT               % 00264400
  2687. %     ELSE IF RECEIVING A  BREAK-PACKET THEN STATE := COMPLETE        % 00264500
  2688. %     ELSE  SEND AN ACK-PACKET OF THE PACKET BEFORE  .                % 00264600
  2689. %                                                                 THS % 00264700
  2690. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00264800
  2691.                                                                         00264900
  2692. BEGIN                                                                   00265000
  2693.    NUMTRY := * + 1 ;                                                    00265100
  2694.    IF NUMTRY > MAXTRY                                                   00265200
  2695.       THEN BEGIN                                                        00265300
  2696.              STATE := ABORT ;                                           00265400
  2697.              ERRORHANDLER ( CANTRECVFH );                               00265500
  2698.            END                                                          00265600
  2699.       ELSE BEGIN                                                        00265700
  2700.                IF DEBUG THEN                                            00265800
  2701.              IF (NUMTRY = 1)                                            00265900
  2702.                 THEN WRITE( JOURNAAL, <"********* RECVFILEHEAD"> ) ;    00266000
  2703.              IF ( RECV := RECEIVEPACKET )                               00266100
  2704.                 THEN BEGIN                                              00266200
  2705.                   IF (RECVPTYPE = FILEHEAD)                             00266300
  2706.                      THEN BEGIN                                         00266400
  2707.                             ISFILEALREADYPRESENT;                       00266500
  2708.                             IF STATE = ABORT THEN ELSE                  00266600
  2709.                             BEGIN                                       00266700
  2710.                                 SENDSEQ := RECVSEQ ;                    00266800
  2711.                                 SENDANSWER( SENDSEQ, ACK ) ;            00266900
  2712.                                 STATE := FILEDATA  ;                    00267000
  2713.                                 NUMTRY := 0 ;                           00267100
  2714.                                 SEQNUM := (SEQNUM + 1) MOD 64 ;         00267200
  2715.                             END                                         00267300
  2716.                           END                                           00267400
  2717.                   ELSE                                                  00267500
  2718.                   IF (RECVPTYPE = SINIT)                                00267600
  2719.                      THEN   RESENDPACKET                                00267700
  2720.                   ELSE                                                  00267800
  2721.                   IF (RECVPTYPE = BRK)                                  00267900
  2722.                      THEN BEGIN                                         00268000
  2723.                             SENDSEQ := RECVSEQ ;                        00268100
  2724.                             SENDANSWER( SENDSEQ, ACK ) ;                00268200
  2725.                             STATE := COMPLETE ;                         00268300
  2726.                             SEQNUM := (SEQNUM + 1) MOD 64 ;             00268400
  2727.                           END                                           00268500
  2728.                       ELSE  NUMBADRECV := * + 1 ;                       00268600
  2729.                      END                                                00268700
  2730.                 ELSE  SENDANSWER( SEQNUM - 1, ACK );                    00268800
  2731.            END ;                                                        00268900
  2732. END  RECEIVEFILE ;                                                      00269000
  2733.                                                                         00269100
  2734. $PAGE                                                                   00269200
  2735. PROCEDURE RECEIVEDATA ;                                                 00269300
  2736. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00269400
  2737. %                                                                    %  00269500
  2738. %    RECEIVE THE DATA - PACKETS                                      %  00269600
  2739. %            ------------------                                      %  00269700
  2740. %    IF SO  THEN STORE THE DATA IN A RECORD                          %  00269800
  2741. %                SEND AN ACK-PACKET                                  %  00269900
  2742. %    ELSE IF RECEIVING THE DATA-PACKET OF BEFORE THEN ACK IT         %  00270000
  2743. %    ELSE IF RECEIVING AN EOF-PACKET                                 %  00270100
  2744. %            THEN CLOSE THE FILE AND CRUNCH IT                       %  00270200
  2745. %                 SEND AN ACK-PACKET                                 %  00270300
  2746. %                 STATE := FILEHEADER                                %  00270400
  2747. %    ELSE  SEND AN ACK-PACKET OF THE PACKET BEFORE .                 %  00270500
  2748. %                                                                THS %  00270600
  2749. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00270700
  2750.                                                                         00270800
  2751. BEGIN                                                                   00270900
  2752.   NUMTRY := * + 1 ;                                                     00271000
  2753.   IF NUMTRY > MAXTRY                                                    00271100
  2754.      THEN BEGIN                                                         00271200
  2755.             STATE := ABORT;                                             00271300
  2756.             ERRORHANDLER( CANTRECVDATA );                               00271400
  2757.           END                                                           00271500
  2758.      ELSE BEGIN                                                         00271600
  2759.               IF DEBUG THEN                                             00271700
  2760.             IF (NUMTRY = 1)                                             00271800
  2761.                THEN WRITE( JOURNAAL, <"********* RECVDATA"> ) ;         00271900
  2762.             IF ( RECV := RECEIVEPACKET )                                00272000
  2763.                THEN BEGIN                                               00272100
  2764.                  IF (RECVPTYPE = DATA) AND (RECVSEQ = SEQNUM)           00272200
  2765.                     THEN BEGIN                                          00272300
  2766.                            IF BINARY THEN                               00272400
  2767.                                IF REPEAT THEN REPSTOREBININRECORD       00272500
  2768.                                         ELSE STOREBININRECORD           00272600
  2769.                                      ELSE                               00272700
  2770.                            IF REPEAT THEN REPSTOREINRECORD              00272800
  2771.                                      ELSE STOREINRECORD;                00272900
  2772.                            SENDSEQ  := RECVSEQ ;                        00273000
  2773.                            SEQNUM   := (SEQNUM + 1) MOD 64 ;            00273100
  2774.                            SENDANSWER( SENDSEQ, ACK ) ;                 00273200
  2775.                            NUMTRY := 0 ;                                00273300
  2776.                          END                                            00273400
  2777.                  ELSE                                                   00273500
  2778.                  IF (RECVPTYPE = DATA) AND (RECVSEQ = SEQNUM - 1)       00273600
  2779.                     THEN  SENDANSWER( SEQNUM - 1, ACK )                 00273700
  2780.                  ELSE                                                   00273800
  2781.                  IF ( RECVPTYPE = EOF )                                 00273900
  2782.                      THEN BEGIN                   % WRITE FINAL BUFFER  00274000
  2783.                            IF BINARY THEN                               00274100
  2784.                            BEGIN                                        00274200
  2785.                                IF ROOM NEQ RECMAXRECSIZEV THEN          00274300
  2786.                                WRITEBINRECORDTOFILE                     00274400
  2787.                            END       ELSE                               00274500
  2788.                                IF ROOM NEQ MAXRECCHAR THEN              00274600
  2789.                                WRITERECORDTOFILE;                       00274700
  2790.                            STATE := FILEHEADER ;                        00274800
  2791.                            SEQCOUNT := 0 ;                              00274900
  2792.                            IF FILSTORE.OPEN                             00275000
  2793.                               THEN  CLOSE( FILSTORE, CRUNCH ) ;         00275100
  2794.                            SENDSEQ := RECVSEQ;                          00275200
  2795.                            SENDANSWER( SENDSEQ, ACK );                  00275300
  2796.                            SEQNUM := (SEQNUM + 1) MOD 64;               00275400
  2797.                            NUMTRY := 0 ;                                00275500
  2798.                          END                                            00275600
  2799.                     ELSE  NUMBADRECV := * + 1 ;                         00275700
  2800.                     END                                                 00275800
  2801.                ELSE SENDANSWER( SEQNUM - 1, ACK ) ;                     00275900
  2802.          END;                                                           00276000
  2803.                                                                         00276100
  2804. END  RECEIVEDATA ;                                                      00276200
  2805.                                                                         00276300
  2806. $PAGE                                                                   00276400
  2807. PROCEDURE  RECEIVEPROC ;                                                00276500
  2808. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00276600
  2809. %                                                                     % 00276700
  2810. %    STATETABLE - SWITCHER FOR  RECEIVE-PROCEDURE                     % 00276800
  2811. %                                                                 THS % 00276900
  2812. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00277000
  2813.                                                                         00277100
  2814. BEGIN STARTRUN ;                                                        00277200
  2815.       IF (RUNSTATE NEQ SERVER) THEN STATE := INIT;                      00277300
  2816.        IF BINARY THEN                                                   00277400
  2817.        BEGIN                                                            00277500
  2818.           IF(RECMAXRECSIZEV > 512)THEN                                  00277600
  2819.                      RESIZE(BINRECSTORE[*],RECMAXRECSIZEV);             00277700
  2820.           REPLACE PBINRECSTORE := BINRECSTORE[1] BY NULL                00277800
  2821.                                     FOR RECMAXRECSIZEV;                 00277900
  2822.        END                                                              00278000
  2823.                  ELSE                                                   00278100
  2824.           REPLACE PSTORE := RECSTORE[1] BY BLANK FOR 255;               00278200
  2825.       SEQCOUNT := 0; COUNT := 1 ;                                       00278300
  2826.       WHILE (STATE NEQ ABORT) AND (STATE NEQ COMPLETE) DO               00278400
  2827.        BEGIN                                                            00278500
  2828.             CASE  STATE OF                                              00278600
  2829.           BEGIN                                                         00278700
  2830.             INIT         :    RECEIVEINIT;                              00278800
  2831.             FILEHEADER   :    RECEIVEFILE;                              00278900
  2832.             FILEDATA     :    RECEIVEDATA;                              00279000
  2833.             EOFFILE      :    ; % NOTHING                               00279100
  2834.             BREAK        :    ; % NOTHING                               00279200
  2835.             ABORT        :    ; % NOTHING                               00279300
  2836.             COMPLETE     :    ; % NOTHING                               00279400
  2837.           END CASE;                                                     00279500
  2838.         END;                                                            00279600
  2839.       IF  FILSTORE.OPEN                                                 00279700
  2840.           THEN  CLOSE( FILSTORE, CRUNCH ) ;                             00279800
  2841.       IF DEBUG THEN                                                     00279900
  2842.       BEGIN                                                             00280000
  2843.       IF STOPBINARY THEN                                                00280100
  2844.          WRITE(JOURNAAL,<"THE OTHER KERMIT CAN'T DO BINARY TRANSPORT">);00280200
  2845.       WRITE(JOURNAAL, *//, NUMSENDPACK, NUMRECVPACK );                  00280300
  2846.       WRITE(JOURNAAL, *//, NUMACK, NUMNAK );                            00280400
  2847.       WRITE(JOURNAAL[SPACE 2],*//, NUMACKRECV, NUMNAKRECV, NUMBADRECV); 00280500
  2848.       WRITE(JOURNAAL[SPACE 3], <"**********************************">); 00280600
  2849.       END                                                               00280700
  2850. END  RECEIVEPROC ;                                                      00280800
  2851.                                                                         00280900
  2852.                                                                         00281000
  2853. $PAGE                                                                   00281100
  2854. PROCEDURE SERVERPROC ;                                                  00281200
  2855. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00281300
  2856. %                                                                   %   00281400
  2857. %    STATETABLE - SWITCHER FOR SERVERPROCEDURE .                    %   00281500
  2858. %                                                               THS %   00281600
  2859. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00281700
  2860. BEGIN                                                                   00281800
  2861.   ARRAY TITEL [1:16] ;                                                  00281900
  2862.   LABEL EXIT;                                                           00282000
  2863.   INTEGER J;                                                            00282100
  2864.   POINTER PTITEL ;                                                      00282200
  2865.   BOOLEAN FIN ;                                                         00282250
  2866.                                                                         00282300
  2867. BEGIN                                                                   00282400
  2868.   WRITE(FILOUT,<"Kermit Server running on B7900 host.">);               00282500
  2869.   WRITE(FILOUT,<"Please type your escape sequence to return to your">); 00282600
  2870.   WRITE(FILOUT,<"local machine. Shut down the server by typing ">);     00282700
  2871.   WRITE(FILOUT,<" FINISH - command on your local machine.">);           00282800
  2872.   WHILE  ( NOT FIN )  DO                                                00282900
  2873.     BEGIN                                                               00283000
  2874.      SERVERMODE := TRUE ;                                               00283100
  2875.      SEQNUM := SENDSEQ := RECVSEQ := 0;                                 00283200
  2876.      IF  ( RECV := RECEIVEPACKET )                                      00283300
  2877.        THEN BEGIN                                                       00283400
  2878.          CASE REAL( RECVPTYPE )  OF                                     00283500
  2879.           BEGIN                                                         00283600
  2880.                                                                         00283700
  2881.       SINIT : BEGIN                              % INIT-SEND            00283800
  2882.                SERVERMODE := FALSE ;                                    00283900
  2883.                RECEIVEMODE := TRUE;                                     00284000
  2884.                DECODEPARM;                                              00284100
  2885.                IF STOPBINARY THEN                                       00284200
  2886.                BEGIN                                                    00284300
  2887.                    SENDANSWER(RECVSEQ,ERROR);                           00284400
  2888.                    GO TO EXIT                                           00284500
  2889.                END;                                                     00284600
  2890.                SENDPTYPE := ACK ;                                       00284700
  2891.                ENCODEPARM ;                                             00284800
  2892.                TRANSMITPACKET ;                                         00284900
  2893.                STATE := FILEHEADER ;                                    00285000
  2894.                NUMTRY := 0 ;                                            00285100
  2895.                MAXTRY := DEFTRY ;                                       00285200
  2896.                SEQNUM := ( SEQNUM + 1 ) MOD 64 ;                        00285300
  2897.                RECEIVEPROC ;                                            00285400
  2898.               END ;                                                     00285500
  2899.                                                                         00285600
  2900.       IINIT : BEGIN                              % INIT-INFO            00285700
  2901.                DECODEPARM;                                              00285800
  2902.                SENDPTYPE := ACK;                                        00285900
  2903.                ENCODEPARM;                                              00286000
  2904.                TRANSMITPACKET;                                          00286100
  2905.               END ;                                                     00286200
  2906.                                                                         00286300
  2907.       RINIT : BEGIN                              % INIT-RECEIVE         00286400
  2908.                 MAXTRY   := DEFINITTRY ;                                00286500
  2909.                 RECEIVEMODE := FALSE;                                   00286600
  2910.                 DIRECTORY := FALSE;                                     00286700
  2911.                 TRANSTOEBCDIC( RECBUF, 1, LEN ) ;                       00286800
  2912.                 REPLACE RECBUF[1] BY RECBUF[1] FOR LEN WITH LTOU ;      00286900
  2913.                 IF LEN = 0 THEN                                         00287000
  2914.                 BEGIN                                                   00287100
  2915.                     SENDERROR(RECVSEQ,NOFILENAME);                      00287200
  2916.                     GO TO EXIT                                          00287300
  2917.                 END                                                     00287400
  2918.                 ELSE                                                    00287500
  2919.                 BEGIN                                                   00287600
  2920.                     IF SENDDIR THEN PDIRIN := HOLDPDIRIN                00287700
  2921.                                ELSE                                     00287800
  2922.                     REPLACE PDIRIN := DIRIN[1] BY " " FOR 100;          00287900
  2923.                     REPLACE PDIRIN:PDIRIN BY RECBUF[1] FOR LEN;         00288000
  2924.                     IF REAL(RECBUF[LEN],1) EQL "=" THEN                 00288100
  2925.                     BEGIN                                               00288200
  2926.                         DIRECTORY := TRUE;                              00288300
  2927.                         PDIRIN := * - 2                                 00288400
  2928.                     END;                                                00288500
  2929.                     REPLACE PDIRIN:PDIRIN BY ".",48"00" FOR 1;          00288600
  2930.                     IF DIRECTORY THEN                                   00288700
  2931.                     BEGIN                                               00288800
  2932.                         FILSTORE.NEWFILE := FALSE;                      00288850
  2933.                         REPLACE FILSTORE.TITLE BY PDIRIN;               00288900
  2934.                         IF FILSTORE.RESIDENT THEN SKIPFIRSTFILE := TRUE 00289000
  2935.                     END                                                 00289100
  2936.                 END;                                                    00289200
  2937.                 FIRSTFILETOSEND := TRUE;                                00289300
  2938.                 SENDPROC;                                               00289400
  2939.               END;                                                      00289500
  2940.                                                                         00289600
  2941.      GENERIC: BEGIN                                                     00289700
  2942.                CASE  REAL( RECBUF[ 1 ], 1 ) OF                          00289800
  2943.                  BEGIN                                                  00289900
  2944.                FINISH : BEGIN                                           00290000
  2945.                          SENDANSWER( RECVSEQ, ACK );                    00290100
  2946.                          FIN := TRUE ;                                  00290200
  2947.                         END ;                                           00290300
  2948.                                                                         00290400
  2949.                  ELSE : BEGIN                                           00290500
  2950.                          SENDERROR( RECVSEQ, NOTIMPLEM );               00290600
  2951.                         END ;                                           00290700
  2952.                  END CASE ;                                             00290800
  2953.               END ;                                                     00290900
  2954.                                                                         00291000
  2955.      ERROR:    ;                                                        00291100
  2956.                                                                         00291200
  2957.                                                                         00291300
  2958.         ELSE : SENDERROR( RECVSEQ, NOTIMPLEM ) ;                        00291400
  2959.          END CASE ;                                                     00291500
  2960.            END                                                          00291600
  2961.        ELSE SENDANSWER( SEQNUM, NAK ) ;                                 00291700
  2962.       END WHILE ;                                                       00291800
  2963. END ;                                                                   00291900
  2964.                                                                         00292000
  2965.                                                                         00292100
  2966. EXIT:   IF DEBUG THEN IF STOPBINARY THEN                                00292200
  2967.           WRITE(JOURNAAL,<"THE OTHER KERMIT CAN'T DO BINARY TRANSPORT">)00292300
  2968.                                                                         00292400
  2969.                                                                         00292500
  2970. END SERVERPROC ;                                                        00292600
  2971. $PAGE                                                                   00292700
  2972. PROCEDURE HELPPROC ;                                                    00292800
  2973. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00292900
  2974. %                                                                   %   00293000
  2975. %   GIVES A HELP - SCREEN                                           %   00293100
  2976. %                                                                   %   00293200
  2977. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   00293300
  2978. BEGIN                                                                   00293400
  2979.   EBCDIC ARRAY                                                          00293500
  2980.       HELPARR  [ 1:72   ] ,                                             00293600
  2981.       LINEARR  [ 1:1480 ] ,                                             00293700
  2982.       ANSWER   [ 1:96   ];                                              00293800
  2983.                                                                         00293900
  2984.   POINTER                                                               00294000
  2985.       PARR    ,                                                         00294100
  2986.       PLINE   ,                                                         00294200
  2987.       PANSWER ;                                                         00294300
  2988.                                                                         00294400
  2989.   INTEGER                                                               00294500
  2990.       I       ,                                                         00294600
  2991.       BEGREC  ,                                                         00294700
  2992.       ENDREC  ;                                                         00294800
  2993.                                                                         00294900
  2994.   REAL                                                                  00295000
  2995.       FF      ,                                                         00295100
  2996.       HCR     ,                                                         00295200
  2997.       HLF     ;                                                         00295300
  2998.                                                                         00295400
  2999.   BOOLEAN                                                               00295500
  3000.       EH      ,                                                         00295600
  3001.       READY   ;                                                         00295700
  3002.                                                                         00295800
  3003. BEGIN                                                                   00295900
  3004.    READY := FALSE  ;                                                    00296000
  3005.    HCR   := 48"0D" ;                                                    00296100
  3006.    HLF   := 48"25" ;                                                    00296200
  3007.    CASE  HELPPARM   OF                                                  00296300
  3008.      BEGIN                                                              00296400
  3009.       SET     : BEGIN                                                   00296500
  3010.                   BEGREC :=  9 ;                                        00296600
  3011.                   ENDREC := 246;                                        00296700
  3012.                 END ;                                                   00296800
  3013.       SEND    : BEGIN                                                   00296900
  3014.                   BEGREC := 275;                                        00297000
  3015.                   ENDREC := 290;                                        00297100
  3016.                 END ;                                                   00297200
  3017.       SHOW    : BEGIN                                                   00297300
  3018.                   BEGREC := 248;                                        00297400
  3019.                   ENDREC := 257;                                        00297500
  3020.                 END ;                                                   00297600
  3021.       EXIT    : BEGIN                                                   00297700
  3022.                   BEGREC := 316;                                        00297800
  3023.                   ENDREC := 323;                                        00297900
  3024.                 END ;                                                   00298000
  3025.       SERVER  : BEGIN                                                   00298100
  3026.                   BEGREC := 292;                                        00298200
  3027.                   ENDREC := 314;                                        00298300
  3028.                 END ;                                                   00298400
  3029.       RECEIVE : BEGIN                                                   00298500
  3030.                   BEGREC := 259;                                        00298600
  3031.                   ENDREC := 273;                                        00298700
  3032.                 END ;                                                   00298800
  3033.       ELSE    : BEGIN                                                   00298900
  3034.                   BEGREC := 0  ;                                        00299000
  3035.                   ENDREC := 7  ;                                        00299100
  3036.                 END ;                                                   00299200
  3037.      END CASE ;                                                         00299300
  3038.    EH := READ( KERMHELP[ BEGREC  ], 72, HELPARR[ * ] ) ;                00299400
  3039.    WHILE ( NOT  READY ) DO                                              00299500
  3040.      BEGIN                                                              00299600
  3041.        I := 0 ;                                                         00299700
  3042.        REPLACE ANSWER[1] BY " " FOR 96;                                 00299800
  3043.        REPLACE PLINE := LINEARR[ 1 ] BY " " FOR 1480;                   00299900
  3044.        WHILE (( I := * + 1 ) LEQ 20 ) AND ( NOT READY ) DO              00300000
  3045.          BEGIN                                                          00300100
  3046.           PARR := HELPARR[ 1 ] ;                                        00300200
  3047.           REPLACE PLINE:PLINE BY PARR:PARR FOR 72,                      00300300
  3048.                   BITSSHIFT( HCR ), BITSSHIFT( HLF ) ;                  00300400
  3049.           EH := READ( KERMHELP[ BEGREC := * + 1 ], 72, HELPARR[ * ] ) ; 00300500
  3050.           READY := ( BEGREC > ENDREC ) OR EH                            00300600
  3051.          END ;                                                          00300700
  3052.        WRITE( FILOUT,I * 74,LINEARR[ * ] ) ;                            00300800
  3053.        IF ( NOT READY ) THEN                                            00300900
  3054.        BEGIN                                                            00301000
  3055.            WRITE(FILOUT,<"Enter Q (for Quit) or any other",             00301100
  3056.            " key to continue. ">);                                      00301200
  3057.            READ (FILIN,96,ANSWER[*]);                                   00301300
  3058.            PANSWER := ANSWER[1];                                        00301400
  3059.            IF (PANSWER = "Q" FOR 1) OR                                  00301500
  3060.               (PANSWER = "q" FOR 1) THEN READY := TRUE                  00301600
  3061.        END                                                              00301700
  3062.      END ;                                                              00301800
  3063. END;                                                                    00301900
  3064. END  HELPPROC ;                                                         00302000
  3065. $PAGE                                                                   00302100
  3066. PROCEDURE  PROCESINPUT ;                                                00302200
  3067. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00302300
  3068. %                                                                     % 00302400
  3069. %  SYNTAX - CHECK OF THE INPUT - STRING                               % 00302500
  3070. %  IF  CORRECT : COMMAND AS FAR AS POSSIBLE EXECUTED ,                % 00302600
  3071. %                FILES OPENED OR CREATED, VALUES ASSIGNED             % 00302700
  3072. %                TO THEIR PARAMETERS, OR TO SET A FLAG ;              % 00302800
  3073. %  IF NOT CORRECT : THE ERRORHANDLER IS INVOKED ;                     % 00302900
  3074. %                                                                     % 00303000
  3075. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00303100
  3076.                                                                         00303200
  3077. BEGIN                                                                   00303300
  3078. INTEGER    J, K, K1, K2, K3, K4, K5, K6 ;                               00303400
  3079. BOOLEAN    SETCMD;                                                      00303500
  3080.                                                                         00303600
  3081. POINTER    P1, P2, P3, P4, P5, P6 ;                                     00303700
  3082.                                                                         00303800
  3083. TRUTHSET   NUMERIC           ( "0123456789" ) ,                         00303900
  3084.            SPECIALS          ( "!"""#$%&'()*+,-./:;<=>?@[\]^_`{|}~" ),  00304000
  3085.            COMMANDCHARS      ( ALPHA OR SPECIALS );                     00304100
  3086. $PAGE                                                                   00304200
  3087. PROCEDURE PARM ( PP , KTEL ) ;                                          00304300
  3088. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00304400
  3089. %                                                                    %  00304500
  3090. %     LOCATE PLACE AND SIZE OF THE PARAMETERS                        %  00304600
  3091. %                                                                    %  00304700
  3092. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00304800
  3093.                                                                         00304900
  3094. INTEGER    KTEL ;                                                       00305000
  3095.                                                                         00305100
  3096. POINTER    PP ;                                                         00305200
  3097.                                                                         00305300
  3098. BEGIN                                                                   00305400
  3099.     K := J ; KTEL := 0 ;                                                00305500
  3100.     PP := PCMD ;                                                        00305600
  3101.     SCAN PCMD:PCMD FOR J:K WHILE IN COMMANDCHARS;                       00305700
  3102.     KTEL := K-J ; K := J ;                                              00305800
  3103.     SCAN  PCMD:PCMD  FOR  J:K UNTIL NEQ " " ;                           00305900
  3104. END  PARM ;                                                             00306000
  3105.                                                                         00306100
  3106. $PAGE                                                                   00306200
  3107. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00306300
  3108. %                                                                    %  00306400
  3109. %  SYNTAX-CHECK  OF SHOW-, EXIT-, SERVER- COMMAND                    %  00306500
  3110. %                                                                    %  00306600
  3111. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00306700
  3112. PROCEDURE CHKSHOW;                                                      00306800
  3113.                                                                         00306900
  3114. BEGIN IF (K2 NEQ 0) THEN RUNSTATE := TOOPARM                            00307000
  3115.                     ELSE RUNSTATE := SHOW ;                             00307100
  3116. END CHKSHOW;                                                            00307200
  3117. %                                                                       00307300
  3118.                                                                         00307400
  3119. PROCEDURE  CHKEXIT ;                                                    00307500
  3120.                                                                         00307600
  3121. BEGIN IF (K2 NEQ 0) THEN RUNSTATE := TOOPARM                            00307700
  3122.                     ELSE RUNSTATE := EXIT ;                             00307800
  3123. END  CHKEXIT ;                                                          00307900
  3124. %                                                                       00308000
  3125. PROCEDURE  CHKSERVER ;                                                  00308100
  3126. BEGIN  IF ( K2 NEQ 0) THEN RUNSTATE := TOOPARM                          00308200
  3127.                       ELSE RUNSTATE := SERVER ;                         00308300
  3128. END  CHKSERVER ;                                                        00308400
  3129.                                                                         00308500
  3130. PROCEDURE  CHKRECEIVE ;                                                 00308600
  3131. BEGIN                                                                   00308700
  3132.     IF (K2 NEQ 0) THEN RUNSTATE := TOOPARM                              00308800
  3133.                   ELSE RUNSTATE := RECEIVE;                             00308900
  3134. END CHKRECEIVE ;                                                        00309000
  3135. %                                                                       00309100
  3136. $PAGE                                                                   00309200
  3137. PROCEDURE  CHKHELP ;                                                    00309300
  3138. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00309400
  3139. %                                                                    %  00309500
  3140. %     SYNTAX-CHECK   OF    HELP - CMD                                %  00309600
  3141. %                                                                    %  00309700
  3142. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00309800
  3143.                                                                         00309900
  3144. BEGIN RUNSTATE := HELP ;                                                00310000
  3145.       HELPPARM := 0 ;                                                   00310100
  3146.       IF ( K3 NEQ 0 ) THEN RUNSTATE := TOOPARM                          00310200
  3147.       ELSE IF ( K2 NEQ 0 )                                              00310300
  3148.       THEN BEGIN                                                        00310400
  3149.            SCAN P2  FOR  J:K2  WHILE IN ALPHA;                          00310500
  3150.            IF ( J NEQ 0 ) THEN RUNSTATE := INVPARM                      00310600
  3151.            ELSE BEGIN                                                   00310700
  3152.              IF      (P2="SET"    ) AND (K2=3) THEN HELPPARM:=SET       00310800
  3153.              ELSE IF (P2="SEND"   ) AND (K2=4) THEN HELPPARM:=SEND      00310900
  3154.              ELSE IF (P2="EXIT"   ) AND (K2=4) THEN HELPPARM:=EXIT      00311000
  3155.              ELSE IF (P2="SHOW"   ) AND (K2=4) THEN HELPPARM:=SHOW      00311100
  3156.              ELSE IF (P2="STA"    )            THEN HELPPARM:=SHOW      00311150
  3157.              ELSE IF (P2="SERVER" ) AND (K2=6) THEN HELPPARM:=SERVER    00311200
  3158.              ELSE IF (P2="RECEIVE") AND (K2=7) THEN HELPPARM:=RECEIVE   00311300
  3159.              ELSE RUNSTATE := INVPARM ;                                 00311400
  3160.                 END ;                                                   00311500
  3161.            END ;                                                        00311600
  3162. END  CHKHELP ;                                                          00311700
  3163. $PAGE                                                                   00311800
  3164. PROCEDURE CHKSEND ;                                                     00311900
  3165. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00312000
  3166. %                                                                    %  00312100
  3167. %    SYNTAX-CHECK   OF    SEND - CMD                                 %  00312200
  3168. %                                                                    %  00312300
  3169. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00312400
  3170.                                                                         00312500
  3171.                                                                         00312600
  3172. BEGIN RUNSTATE := SEND ;                                                00312700
  3173.       WRITE(FILOUT[STOP],<"Wait.  ">);                                  00312800
  3174.       FIRSTFILETOSEND := TRUE;                                          00312900
  3175.       DIRECTORY := FALSE;                                               00313000
  3176.       IF (K5 NEQ 0) THEN RUNSTATE := TOOPARM                            00313100
  3177.       ELSE IF (K2 EQL 0) THEN RUNSTATE := NOFILENAME                    00313200
  3178.       ELSE                                                              00313300
  3179.             BEGIN                                                       00313400
  3180.             IF SENDDIR THEN PDIRIN := HOLDPDIRIN                        00313500
  3181.                        ELSE                                             00313600
  3182.             REPLACE PDIRIN := DIRIN[ 1 ] BY " " FOR 100;                00313700
  3183.             REPLACE PDIRIN:PDIRIN BY P2 FOR K2;                         00313800
  3184.             IF REAL(P2 + (K2 - 1),1) EQL "=" THEN             %DIRECTORY00313900
  3185.             BEGIN DIRECTORY := TRUE; PDIRIN := * - 2 END;               00314000
  3186.             IF (K3 NEQ 0) THEN                                          00314100
  3187.                REPLACE PDIRIN:PDIRIN BY " ", P3:P3 FOR K3;              00314200
  3188.             IF (K4 NEQ 0) THEN                                          00314300
  3189.                REPLACE PDIRIN:PDIRIN BY " ", P4:P4 FOR K4;              00314400
  3190.             REPLACE PDIRIN:PDIRIN BY ".",48"00" FOR 1;                  00314500
  3191.             IF DIRECTORY THEN                                           00314600
  3192.             BEGIN                                                       00314700
  3193.                 FILSTORE.NEWFILE := FALSE;                              00314750
  3194.                 REPLACE FILSTORE.TITLE BY PDIRIN;                       00314800
  3195.                 IF FILSTORE.RESIDENT THEN SKIPFIRSTFILE := TRUE         00314900
  3196.             END                                                         00315000
  3197.             END                                                         00315100
  3198.                                                                         00315200
  3199. END CHKSEND;                                                            00315300
  3200. $PAGE                                                                   00315400
  3201. PROCEDURE CHKSET;                                                       00315500
  3202. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00315600
  3203. %                                                                    %  00315700
  3204. %   SYNTAX-CHECK OF SET - CMD  AND  SET THE PARAMETERS               %  00315800
  3205. %                                                                    %  00315900
  3206. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00316000
  3207.                                                                         00316100
  3208. BEGIN                                                                   00316200
  3209.                                                                         00316300
  3210.    INTEGER  J ;                                                         00316400
  3211.                                                                         00316500
  3212.    REAL    HEOL, HSOP, HQUOTE ;                                         00316600
  3213.                                                                         00316700
  3214.    EBCDIC ARRAY                                                         00316800
  3215.              HQU [ 1:1 ] ;                                              00316900
  3216.    ARRAY     TAIP[0:15];                                                00317000
  3217.    POINTER PTAIP;                                                       00317100
  3218.                                                                         00317200
  3219. RUNSTATE := SET ;                                                       00317300
  3220. IF ( K3 EQL 0 ) THEN RUNSTATE := PARMEXPECT                             00317400
  3221. ELSE BEGIN                                                              00317500
  3222.      SCAN P2 FOR J:K2  WHILE IN ALPHA;                                  00317600
  3223.      IF ( J NEQ 0 ) THEN RUNSTATE := INVPARM                            00317700
  3224.      ELSE                                                               00317800
  3225.      IF (P2 = "DEBUG") AND (K2 = 5)                                     00317900
  3226.             THEN BEGIN                                                  00318000
  3227.                      IF (P3 = "ON") THEN                                00318100
  3228.                      BEGIN                                              00318200
  3229.                          DEBUG := TRUE;                                 00318300
  3230.                          IF JOURNAAL.OPEN THEN ELSE                     00318400
  3231.                          BEGIN                                          00318500
  3232.                              OPEN(JOURNAAL);                            00318600
  3233.                              PRINTLOGHEADING(TRUE)                      00318700
  3234.                          END                                            00318800
  3235.                      END                                                00318900
  3236.                                      ELSE                               00319000
  3237.                      IF (P3 = "OFF")THEN                                00319100
  3238.                      BEGIN                                              00319200
  3239.                          DEBUG := FALSE;                                00319300
  3240.                          IF JOURNAAL.OPEN THEN CLOSE(JOURNAAL)          00319400
  3241.                      END                                                00319500
  3242.                                     ELSE                                00319600
  3243.                      RUNSTATE := INVPARM                                00319700
  3244.                  END                                                    00319800
  3245.      ELSE                                                               00319900
  3246.      IF ( P2="EXT" ) THEN                                               00320000
  3247.      BEGIN                                                              00320100
  3248.          IF ( P3 = "ON" ) THEN EXTENSION := TRUE                        00320200
  3249.                           ELSE                                          00320300
  3250.          IF ( P3 = "OFF" )THEN EXTENSION := FALSE                       00320400
  3251.                           ELSE                                          00320500
  3252.          RUNSTATE := INVPARM                                            00320600
  3253.      END                                                                00320700
  3254.      ELSE                                                               00320800
  3255.      IF ( P2 ="REC") THEN                                               00320900
  3256.      BEGIN                                                              00321000
  3257.          IF (P3 = "DIR" ) THEN                                          00321100
  3258.          BEGIN                                                          00321200
  3259.              IF (K4 EQL 0) THEN RECDIR := FALSE                         00321300
  3260.                            ELSE                                         00321400
  3261.              BEGIN                                                      00321500
  3262.                  SCAN P4 FOR J:K4 WHILE IN TIETELNOSPACE;               00321600
  3263.                  IF (J NEQ 0) THEN RUNSTATE := INVPARM                  00321700
  3264.                               ELSE                                      00321800
  3265.                  BEGIN                                                  00321900
  3266.                      REPLACE PSCRATCH := SCRATCH[1] BY " " FOR 100;     00322000
  3267.                      REPLACE PSCRATCH BY P4 FOR K4;                     00322100
  3268.                      LOFSCRATCH := K4;                                  00322200
  3269.                      RECDIR := TRUE                                     00322300
  3270.                  END                                                    00322400
  3271.              END                                                        00322500
  3272.          END              ELSE RUNSTATE := INVPARM                      00322600
  3273.      END                                                                00322700
  3274.      ELSE                                                               00322800
  3275.      IF ( P2="DELAY") AND ( K2=5 )                                      00322900
  3276.             THEN BEGIN                                                  00323000
  3277.                  SCAN  P3 FOR J:K3 WHILE IN NUMERIC ;                   00323100
  3278.                  IF ( J NEQ 0 ) THEN RUNSTATE := INVVALUE               00323200
  3279.                  ELSE BEGIN                                             00323300
  3280.                       IF      ( K4 NEQ 0 ) THEN RUNSTATE := TOOPARM     00323400
  3281.                       ELSE IF ( INTEGER(P3,K3) > 30 ) OR                00323500
  3282.                               ( INTEGER(P3,K3) < 0  )                   00323600
  3283.                                THEN RUNSTATE := INVVALUE                00323700
  3284.                                ELSE DELAY := INTEGER( P3,K3 ) ;         00323800
  3285.                       END                                               00323900
  3286.                  END                                                    00324000
  3287.      ELSE                                                               00324100
  3288.      IF ( P2="FILE") AND ( K2=4 ) THEN                                  00324200
  3289.      BEGIN                                                              00324300
  3290.          IF (P3="TYPE") AND (K3=4) THEN                                 00324400
  3291.          BEGIN                                                          00324500
  3292.              IF (K4 EQL 0) THEN RUNSTATE := PARMEXPECT                  00324600
  3293.                            ELSE                                         00324700
  3294.              BEGIN                                                      00324800
  3295.                  REPLACE PTAIP := P(TAIP) BY P4 WHILE IN ALPHA;         00324900
  3296.                  IF NOT GETFILEKIND(TAIP) THEN RUNSTATE := NOFILEKIND   00325000
  3297.                                           ELSE                          00325100
  3298.                  BEGIN                                                  00325200
  3299.                      IF (RECFILEKINDV = VALUE(DATA)) THEN ELSE          00325300
  3300.                      GETCANDEPARAM(RECTYPE);                            00325400
  3301.                      IF (P4="BIN") THEN                                 00325500
  3302.                      BEGIN                                              00325600
  3303.                          BINARY := TRUE;                                00325700
  3304.                          MY8BQ := SEND8BQ := 48"26"         % QBIN = &  00325800
  3305.                      END           ELSE                                 00325900
  3306.                      BEGIN                                              00326000
  3307.                          BINARY := FALSE;                               00326100
  3308.                          MY8BQ := SEND8BQ := DEF8BQ         % QBIN = N  00326200
  3309.                      END;                                               00326300
  3310.                      IF (K5 NEQ 0) THEN                                 00326400
  3311.                      BEGIN                                              00326500
  3312.                          IF (P4="BIN") OR (P4="DAT") THEN               00326600
  3313.                          BEGIN                                          00326700
  3314.                              IF (P5="REC") THEN                         00326800
  3315.                              BEGIN                                      00326900
  3316.                               IF (K6 EQL 0) THEN RUNSTATE := VALUEXPECT 00327000
  3317.                                             ELSE                        00327100
  3318.                               BEGIN                                     00327200
  3319.                                   IF P6 = "-" THEN RUNSTATE := INVVALUE 00327300
  3320.                                               ELSE                      00327400
  3321.                                   BEGIN                                 00327500
  3322.                                       IF P6 = "+" THEN                  00327600
  3323.                                       BEGIN                             00327700
  3324.                                           P6 := * + 1; K6 := * - 1      00327800
  3325.                                       END;                              00327900
  3326.                                       IF RECMAXRECSIZEV:=               00328000
  3327.                                             INTEGER(P6,K6) = 0          00328100
  3328.                                          THEN RUNSTATE := INVVALUE      00328200
  3329.                                   END                                   00328300
  3330.                               END                                       00328400
  3331.                             END                                ELSE     00328500
  3332.                              RUNSTATE := INVPARM                        00328600
  3333.                          END                         ELSE               00328700
  3334.                          RUNSTATE := INVPARM                            00328800
  3335.                      END           ELSE                 % K5 EQL 0      00328900
  3336.                      BEGIN                                              00329000
  3337.                      IF (P4="BIN") THEN RECMAXRECSIZEV := 128           00329100
  3338.                                    ELSE                                 00329200
  3339.                      IF (P4 ="DAT") THEN RECMAXRECSIZEV := 80           00329300
  3340.                      END                                                00329400
  3341.                   END                                                   00329500
  3342.               END                                                       00329600
  3343.           END                      ELSE RUNSTATE := INVPARM             00329700
  3344.       END                                                               00329800
  3345.       ELSE                                                              00329900
  3346.       IF ( P2="SEND") AND ( K2=4 )                                      00330000
  3347.             THEN BEGIN                                                  00330100
  3348.                  IF (P3 = "DIR" ) THEN                                  00330200
  3349.                  BEGIN                                                  00330300
  3350.                      IF (K4 EQL 0) THEN SENDDIR := FALSE                00330400
  3351.                                    ELSE                                 00330500
  3352.                      BEGIN                                              00330600
  3353.                          SCAN P4 FOR J:K4 WHILE IN TIETELNOSPACE;       00330700
  3354.                          IF (J NEQ 0 ) THEN RUNSTATE := INVPARM         00330800
  3355.                                        ELSE                             00330900
  3356.                          BEGIN                                          00331000
  3357.                              REPLACE PDIRIN := DIRIN[1] BY " " FOR 100; 00331100
  3358.                              REPLACE PDIRIN:PDIRIN BY P4 FOR K4,"/";    00331200
  3359.                              LOFSENDDIR := K4;                          00331250
  3360.                              HOLDPDIRIN := PDIRIN;                      00331300
  3361.                              SENDDIR := TRUE                            00331400
  3362.                          END                                            00331500
  3363.                      END                                                00331600
  3364.                  END              ELSE                                  00331700
  3365.                  IF ( K4 EQL 0 ) THEN RUNSTATE := VALUEXPECT            00331800
  3366.                  ELSE BEGIN                                             00331900
  3367.                       SCAN  P3 FOR J:K3  WHILE IN ALPHA;                00332000
  3368.                       IF ( J NEQ 0 ) THEN RUNSTATE := INVPARM           00332100
  3369.                       ELSE IF ( P3="EOL") AND ( K3=3 )                  00332200
  3370.                         THEN BEGIN                                      00332300
  3371.                              SCAN P4 FOR J:K4 WHILE IN NUMERIC;         00332400
  3372.                              IF ( J NEQ 0 ) OR ( K4 > 3 )               00332500
  3373.                              THEN  RUNSTATE := INVVALUE                 00332600
  3374.                              ELSE BEGIN                                 00332700
  3375.                                   HEOL := REAL( INTEGER(P4,K4)) ;       00332800
  3376.                                   IF (K5 NEQ 0) THEN RUNSTATE:=TOOPARM  00332900
  3377.                                   ELSE                                  00333000
  3378.                                      IF (HEOL EQL SENDSOP) OR           00333100
  3379.                                         (HEOL EQL SENDQUOTE) OR         00333200
  3380.                                         (HEOL EQL SENDPADCHAR)          00333300
  3381.                                      THEN RUNSTATE := INVVALUE          00333400
  3382.                                      ELSE                               00333500
  3383.                                         IF (HEOL = LF) OR (HEOL = CR)   00333600
  3384.                                         THEN SENDEOL := HEOL            00333700
  3385.                                         ELSE RUNSTATE := INVVALUE       00333800
  3386.                                   END                                   00333900
  3387.                              END                                        00334000
  3388.                      ELSE                                               00334100
  3389.                      IF ( P3="PAKLEN") AND ( K3=6 )                     00334200
  3390.                           THEN BEGIN                                    00334300
  3391.                             SCAN P4 FOR J:K4 WHILE IN NUMERIC ;         00334400
  3392.                             IF ( J NEQ 0 ) THEN RUNSTATE := INVVALUE    00334500
  3393.                             ELSE BEGIN                                  00334600
  3394.                                  IF (K5 NEQ 0) THEN RUNSTATE:=TOOPARM   00334700
  3395.                                  ELSE IF (INTEGER(P4,K4) > MAXPACK) OR  00334800
  3396.                                          (INTEGER(P4,K4) < MINPACK)     00334900
  3397.                                       THEN RUNSTATE := INVVALUE         00335000
  3398.                                       ELSE SENDPACKSIZE:=INTEGER(P4,K4);00335100
  3399.                                  END ;                                  00335200
  3400.                                END                                      00335300
  3401.                       ELSE                                              00335400
  3402.                      IF ( P3="TIMEOUT") AND ( K3=7 )                    00335500
  3403.                           THEN BEGIN                                    00335600
  3404.                             SCAN P4 FOR J:K4 WHILE IN NUMERIC ;         00335700
  3405.                             IF ( J NEQ 0 ) THEN RUNSTATE :=INVVALUE     00335800
  3406.                             ELSE BEGIN                                  00335900
  3407.                                  IF (K5 NEQ 0) THEN RUNSTATE :=TOOPARM  00336000
  3408.                                  ELSE IF (INTEGER( P4,K4 ) > 90)        00336100
  3409.                                       THEN RUNSTATE := TOOVALUE         00336200
  3410.                                       ELSE THEIRTIMEOUT:=INTEGER(P4,K4);00336300
  3411.                                  END ;                                  00336400
  3412.                             END                                         00336500
  3413.                      ELSE                                               00336600
  3414.                      IF (P3="SOP") AND (K3=3)                           00336700
  3415.                           THEN BEGIN                                    00336800
  3416.                             IF ( K4 GEQ 4 ) THEN RUNSTATE := INVVALUE   00336900
  3417.                             ELSE BEGIN                                  00337000
  3418.                                  SCAN P4 FOR J:K4 WHILE IN NUMERIC ;    00337100
  3419.                                  IF (J NEQ 0) THEN RUNSTATE :=INVVALUE  00337200
  3420.                                  ELSE BEGIN                             00337300
  3421.                                  HSOP := REAL( INTEGER(P4,K4));         00337400
  3422.                                  IF (K5 NEQ 0) THEN RUNSTATE:=TOOPARM   00337500
  3423.                                  ELSE IF (HSOP EQL SENDEOL) OR          00337600
  3424.                                          (HSOP EQL SENDQUOTE) OR        00337700
  3425.                                          (HSOP EQL SENDPADCHAR) OR      00337800
  3426.                                          NOT (CONTROL(HSOP))            00337900
  3427.                                       THEN RUNSTATE := INVVALUE         00338000
  3428.                                       ELSE SENDSOP:= HSOP;              00338100
  3429.                                       END                               00338200
  3430.                                  END                                    00338300
  3431.                                END                                      00338400
  3432.                      ELSE                                               00338500
  3433.                      IF ( P3="QUOTE") AND ( K3=5 )                      00338600
  3434.                           THEN BEGIN                                    00338700
  3435.                             IF ( K4 NEQ 1 ) THEN RUNSTATE := INVVALUE   00338800
  3436.                             ELSE BEGIN  HQUOTE := REAL( P4,K4 ) ;       00338900
  3437.                                  REPLACE HQU[1] BY BITSSHIFT(HQUOTE);   00339000
  3438.                                  TRANSTOASCII( HQU, 1, 1 );             00339100
  3439.                                  HQUOTE := REAL( HQU[1], 1);            00339200
  3440.                                  IF (K5 NEQ 0) THEN RUNSTATE:=TOOPARM   00339300
  3441.                                  ELSE                                   00339400
  3442.                                  IF (HQUOTE LEQ 32) OR                  00339500
  3443.                                     (HQUOTE GEQ 63) OR                  00339600
  3444.                                     (HQUOTE EQL 38) OR                  00339700
  3445.                                     (HQUOTE EQL SENDSOP) OR             00339800
  3446.                                     (HQUOTE EQL SENDEOL) OR             00339900
  3447.                                     (HQUOTE EQL SENDPADCHAR)            00340000
  3448.                                  THEN RUNSTATE := INVVALUE              00340100
  3449.                                  ELSE SENDQUOTE := HQUOTE               00340200
  3450.                                 END                                     00340300
  3451.                               END                                       00340400
  3452.                      ELSE                                               00340500
  3453.                      IF (P3="PADDING") AND (K3=7)                       00340600
  3454.                           THEN                                          00340700
  3455.                             BEGIN                                       00340800
  3456.                             IF (K6 EQL 0) THEN RUNSTATE:=PARMEXPECT     00340900
  3457.                             ELSE                                        00341000
  3458.                                BEGIN                                    00341100
  3459.                                SCAN P4 FOR J:K4 WHILE IN NUMERIC ;      00341200
  3460.                                IF (K4 > 2) OR (J NEQ 0)                 00341300
  3461.                                   THEN  RUNSTATE := TOOVALUE            00341400
  3462.                                ELSE BEGIN                               00341500
  3463.                                     IF (INTEGER(P4,K4) > 20)            00341600
  3464.                                           THEN RUNSTATE := TOOVALUE     00341700
  3465.                                           ELSE SENDPAD:=INTEGER(P4,K4); 00341800
  3466.                                     END;                                00341900
  3467.                                SCAN P5 FOR J:K5 WHILE IN ALPHA;         00342000
  3468.                                IF (J NEQ 0) THEN RUNSTATE:=INVPARM      00342100
  3469.                                ELSE IF (P5="PADCHAR") AND (K5=7)        00342200
  3470.                                    THEN                                 00342300
  3471.                                    BEGIN                                00342400
  3472.                                    SCAN P6 FOR J:K6 WHILE IN NUMERIC;   00342500
  3473.                                    IF (J NEQ 0) THEN                    00342600
  3474.                                       RUNSTATE := INVVALUE ELSE         00342700
  3475.                                       BEGIN                             00342800
  3476.                                        SENDPADCHAR := INTEGER(P6,K6);   00342900
  3477.                                        IF (SENDPADCHAR EQL SENDSOP) OR  00343000
  3478.                                           (SENDPADCHAR EQL SENDEOL) OR  00343100
  3479.                                           (SENDPADCHAR EQL SENDQUOTE) OR00343200
  3480.                                           NOT (CONTROL(SENDPADCHAR))    00343300
  3481.                                        THEN RUNSTATE := INVVALUE        00343400
  3482.                                        ELSE                             00343500
  3483.                                        IF (SENDPAD NEQ 0) THEN          00343600
  3484.                                        BEGIN                            00343700
  3485.                                        REPLACE PADARR[1] BY NULL FOR 20;00343800
  3486.                                        REPLACE PADARR[1] BY SENDPADCHAR 00343900
  3487.                                                FOR SENDPAD;             00344000
  3488.                                        TRANSTOEBCDIC(PADARR,1,SENDPAD)  00344100
  3489.                                        END                              00344200
  3490.                                       END                               00344300
  3491.                                    END                                  00344400
  3492.                                END                                      00344500
  3493.                              END                                        00344600
  3494.                             ELSE RUNSTATE := INVPARM ;                  00344700
  3495.                       END                                               00344800
  3496.                      END                                                00344900
  3497.       ELSE  RUNSTATE := INVPARM ;                                       00345000
  3498.      END;                                                               00345100
  3499. END  CHKSET ;                                                           00345200
  3500. %                                                                       00345300
  3501. %%%%%%%%%  END OF PROCEDURE-DECLARATIONS OF PROCESINPUT   %%%%%%%%%%%   00345400
  3502. $PAGE                                                                   00345500
  3503. BEGIN K := 96 ;                                                         00345600
  3504.       K1:=K2:=K3:=K4:=K5:=K6:=0;                                        00345700
  3505.       SCAN PCMD:PCMD FOR J:K WHILE = " "; K := J;                       00345800
  3506.       IF J = 0 THEN RUNSTATE := SPATIE                                  00345900
  3507.       ELSE BEGIN                                                        00346000
  3508.       IF PCMD = "SET" FOR 3 THEN SETCMD := TRUE;                        00346100
  3509.       SCAN PCMD:PCMD FOR J:K UNTIL = ">"; K := J;                       00346200
  3510.       IF (J EQL 0) OR SETCMD THEN                                       00346300
  3511.                         BEGIN                                           00346400
  3512.                         PCMD := COMMAND[1] ;                            00346500
  3513.                         K := 96 ;                                       00346600
  3514.                         END                                             00346700
  3515.                    ELSE BEGIN                                           00346800
  3516.                         PCMD := PCMD + 1 ;                              00346900
  3517.                         K := K - 1 ;                                    00347000
  3518.                         END ;                                           00347100
  3519.       SCAN PCMD:PCMD  FOR  J:K  UNTIL NEQ " " ;                         00347200
  3520.       IF J = 0 THEN RUNSTATE := SPATIE                                  00347300
  3521.       ELSE BEGIN                                                        00347400
  3522.       IF ( J NEQ 0 ) THEN PARM ( P1,K1 ) ;                              00347500
  3523.       IF ( J NEQ 0 ) THEN PARM ( P2,K2 ) ;                              00347600
  3524.       IF ( J NEQ 0 ) THEN PARM ( P3,K3 ) ;                              00347700
  3525.       IF ( J NEQ 0 ) THEN PARM ( P4,K4 ) ;                              00347800
  3526.       IF ( J NEQ 0 ) THEN PARM ( P5,K5 ) ;                              00347900
  3527.       IF ( J NEQ 0 ) THEN PARM ( P6,K6 ) ;                              00348000
  3528.       IF ( J NEQ 0 ) THEN RUNSTATE := TOOPARM                           00348100
  3529.       ELSE BEGIN                                                        00348200
  3530.            PCMD := COMMAND[1] ;                                         00348300
  3531.            SCAN  P1  FOR  J:K1  WHILE IN ALPHA;                         00348400
  3532.            IF      ( P1="SET"    ) AND ( K1=3 )    THEN CHKSET          00348500
  3533.            ELSE IF ( P1="SHOW"   ) AND ( K1=4 )    THEN CHKSHOW         00348600
  3534.            ELSE IF ( P1="STA"    ) AND ( K1=3 )    THEN CHKSHOW         00348700
  3535.            ELSE IF ( P1="STAT"   ) AND ( K1=4 )    THEN CHKSHOW         00348800
  3536.            ELSE IF ( P1="STATU"  ) AND ( K1=5 )    THEN CHKSHOW         00348900
  3537.            ELSE IF ( P1="STATUS" ) AND ( K1=6 )    THEN CHKSHOW         00349000
  3538.            ELSE IF ( P1="SEND"   ) AND ( K1=4 )    THEN CHKSEND         00349100
  3539.            ELSE IF ( P1="HELP"   ) AND ( K1=4 )    THEN CHKHELP         00349200
  3540.            ELSE IF ( P1="EXIT"   ) AND ( K1=4 )    THEN CHKEXIT         00349300
  3541.            ELSE IF ( P1="SERVER" ) AND ( K1=6 )    THEN CHKSERVER       00349400
  3542.            ELSE IF ( P1="RECEIVE") AND ( K1=7 )    THEN CHKRECEIVE      00349500
  3543.            ELSE RUNSTATE := NOCOMMAND ;                                 00349600
  3544.            END;                                                         00349700
  3545.            END;                                                         00349800
  3546.            END;                                                         00349900
  3547. END;                                                                    00350000
  3548. END  PROCESINPUT ;                                                      00350100
  3549. $PAGE                                                                   00350200
  3550. PROCEDURE INITIALIZE ;                                                  00350300
  3551. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00350400
  3552. %                                                                    %  00350500
  3553. %      INITIALISATION                                                %  00350600
  3554. %                                                                    %  00350700
  3555. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00350800
  3556.                                                                         00350900
  3557. BEGIN BEXIT := FALSE ;                                                  00351000
  3558.       OPEN  ( FILIN ) ;                                                 00351100
  3559.       OPEN  ( FILOUT) ;                                                 00351200
  3560.       SEQNUM      := 0 ;                                                00351300
  3561.       RECVSEQ     := 0 ;                                                00351400
  3562.       SENDSEQ     := 0 ;                                                00351500
  3563.       MYSOP       := DEFSOP ;                                           00351600
  3564.       SENDSOP     := DEFSOP ;                                           00351700
  3565.       DELAY       := DEFDELAY ;                                         00351800
  3566.       CHECKTYPE   := DEFCHKTYPE ;                                       00351900
  3567.       RECVCHKTYPE := DEFCHKTYPE  ;                                      00352000
  3568.       MYTIMEOUT   := DEFTIMEOUT ;                                       00352100
  3569.       THEIRTIMEOUT:= DEFTIMEOUT ;                                       00352200
  3570.       RECVPACKSIZE:= MAXPACK ;                                          00352300
  3571.       SENDPACKSIZE:= MAXPACK ;                                          00352400
  3572.       MYPAD       := DEFPAD ;                                           00352500
  3573.       SENDPAD     := DEFPAD ;                                           00352600
  3574.       MYPADCHAR   := DEFPADCHAR ;                                       00352700
  3575.       SENDPADCHAR := DEFPADCHAR ;                                       00352800
  3576.       SENDQUOTE   := DEFQUOTE ;                                         00352900
  3577.       MYQUOTE     := DEFQUOTE ;                                         00353000
  3578.       MY8BQ       := DEF8BQ ;                                           00353100
  3579.       SEND8BQ     := DEF8BQ ;                                           00353200
  3580.       MYEOL       := DEFEOL ;                                           00353300
  3581.       SENDEOL     := DEFEOL ;                                           00353400
  3582.       MYREPT      := DEFREPT;                                           00353500
  3583.       SENDREPT    := DEFREPT;                                           00353600
  3584.       RECFILEKINDV:= VALUE(DATA);             % DEFAULT DATA            00353700
  3585.       RECTYPE     := 116;                                               00353800
  3586.       RECMAXRECSIZEV := 80;                                             00353900
  3587.       BINARY := FALSE;                                                  00354000
  3588.       DEBUG       := FALSE;                                             00354100
  3589.       EXTENSION := FALSE;                                               00354200
  3590.       RECDIR := SENDDIR := FALSE                                        00354300
  3591. END  INITIALIZE ;                                                       00354400
  3592. %                                                                       00354500
  3593. $PAGE                                                                   00354600
  3594. PROCEDURE  CLOSEKERMIT ;                                                00354700
  3595. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00354800
  3596. %                                                                    %  00354900
  3597. %        SHUT KERMIT DOWN                                            %  00355000
  3598. %                                                                    %  00355100
  3599. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00355200
  3600.                                                                         00355300
  3601. BEGIN CLOSE ( FILOUT ) ;                                                00355400
  3602.       CLOSE ( FILIN ) ;                                                 00355500
  3603.       IF DEBUG THEN CLOSE ( JOURNAAL );                                 00355600
  3604.       IF FILSTORE.OPEN                                                  00355700
  3605.                THEN CLOSE ( FILSTORE, CRUNCH ) ;                        00355800
  3606.        IF WARNINGS.OPEN THEN LOCK(WARNINGS)                             00355900
  3607. END  CLOSEKERMIT ;                                                      00356000
  3608. $PAGE                                                                   00356100
  3609. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00356200
  3610. %                                                                    %  00356300
  3611. %           THE      M A I N    - BLOCK                              %  00356400
  3612. %          =============================                             %  00356500
  3613. %                                                                    %  00356600
  3614. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  00356700
  3615.                                                                         00356800
  3616. %                                                                       00356900
  3617. INITIALIZE ;                                                            00357000
  3618. WRITE(FILOUT,<"THE-RC: Kermit Burroughs Large Systems. Version 5.2.">); 00357100
  3619. WRITE(FILOUT,<"Warnings,if any,are stored in a permanent disk file.">); 00357200
  3620. WRITE(FILOUT,<"TITLE of this file :   KERMIT/WARNINGS.">);              00357300
  3621. WRITE(FILOUT,<"Type HELP for the available commands.">);                00357400
  3622. WHILE (NOT BEXIT) DO                                                    00357500
  3623.         BEGIN                                                           00357600
  3624.         REPLACE PCMD := COMMAND[1] BY " " FOR 96 ;                      00357700
  3625.         WRITE (FILOUT[STOP],<"Kermit-Bur >"> );                         00357800
  3626.         READ ( FILIN [TIMELIMIT 0] ,96 , COMMAND ) ;                    00357900
  3627.         IF DEBUG THEN                                                   00358000
  3628.         WRITE( JOURNAAL,<"COMMAND:", X3, A96>, COMMAND[*] ) ;           00358100
  3629.         REPLACE PCMD BY PCMD FOR 96 WITH LTOU;                          00358200
  3630.         PROCESINPUT ;                                                   00358300
  3631.          CASE RUNSTATE OF                                               00358400
  3632.          BEGIN                                                          00358500
  3633.           SET    :        ; % NOTHING                                   00358600
  3634.           SHOW   :        SHOWPROC ;                                    00358700
  3635.           SEND   :        BEGIN RECEIVEMODE:=FALSE;SENDPROC END;        00358800
  3636.           RECEIVE:        BEGIN RECEIVEMODE:=TRUE;RECEIVEPROC END;      00358900
  3637.           SERVER :        SERVERPROC ;                                  00359000
  3638.           HELP   :        HELPPROC ;                                    00359100
  3639.           EXIT   :        BEXIT:=TRUE ;                                 00359200
  3640.           SPATIE :        ; % NOTHING                                   00359300
  3641.            ELSE  :        ERRORHANDLER(RUNSTATE) ;                      00359400
  3642.           END CASE ;                                                    00359500
  3643.         END ;                                                           00359600
  3644. CLOSEKERMIT ;                                                           00359700
  3645. END .                                                                   00359800
  3646.