home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / lilith / m2serv.mod < prev    next >
Text File  |  2020-01-01  |  3KB  |  102 lines

  1. IMPLEMENTATION MODULE KermServ;
  2. (************************************************************************)
  3. (* Handle Server mode                                                   *)
  4. (* written:            14.12.85     Matthias Aebi                       *)
  5. (* last modification:  18.03.86     Matthias Aebi                       *)
  6. (************************************************************************)
  7.  
  8. FROM Terminal    IMPORT WriteString, Write, WriteLn;
  9. FROM String      IMPORT Insert;
  10. FROM KermRecv    IMPORT RecvPacket, SwitchRecv;
  11. FROM KermSend    IMPORT SendPacket, SwitchSend;
  12. FROM KermParam   IMPORT Packet;
  13. FROM KermMisc    IMPORT ClrScr;
  14. FROM NameSearch  IMPORT FindNames, NextName;
  15.  
  16. CONST
  17.     UpLowEqual = TRUE;
  18.  
  19.  
  20. (************************************************************************)
  21.                           PROCEDURE Server(): BOOLEAN;
  22. (************************************************************************)
  23. VAR
  24.     fileName   : ARRAY [0..31] OF CHAR;
  25.     recvPack   : Packet;
  26.     typ        : CHAR;
  27.     num        : CARDINAL;
  28.     len        : CARDINAL;
  29.     dummy      : BOOLEAN;
  30.     foundOne   : BOOLEAN;
  31.     fileNo     : CARDINAL;
  32.     versionNo  : CARDINAL;
  33.     count      : CARDINAL;
  34.  
  35. BEGIN
  36.     WriteLn;
  37.     WriteLn;
  38.     WriteString("Now entering server mode ...");
  39.  
  40.     count := 3;
  41.  
  42.     LOOP
  43.         RecvPacket(typ,num,len,recvPack);
  44.         CASE typ OF
  45.         "S": (* receive a file *)
  46.             dummy := SwitchRecv(""); |
  47.  
  48.         "R": (* request to send a file *)
  49.             recvPack[len] := 0C; (* the name has no terminating 0C *)
  50.             FindNames("DK", recvPack, UpLowEqual);
  51.             NextName(foundOne, fileName, fileNo, versionNo);
  52.             Insert(fileName, 0, "DK.");  (* add device name *)
  53.  
  54.             IF foundOne
  55.             THEN
  56.                 dummy := SwitchSend(fileName,"");
  57.             ELSE
  58.                 SendPacket("E",0,26,"File not found (M2-Kermit)");
  59.             END; |
  60.  
  61.        "G": (* Execute generic Kermit command *)
  62.             CASE CAP(recvPack[0]) OF
  63.             "F":  (* exit server mode & return to command level *)
  64.                 SendPacket("Y",0,0,"");  (* send an ACK for Packet 0 *)
  65.                 ClrScr;
  66.                 RETURN FALSE; |
  67.  
  68.             "L":  (* exit server mode & exit kermit *)
  69.                 SendPacket("Y",0,0,"");  (* send an ACK for Packet 0 *)
  70.                 ClrScr;
  71.                 RETURN TRUE; |
  72.  
  73.             ELSE
  74.                 SendPacket("E",0,43,
  75.                            "Generic command not implemented (M2-Kermit)");
  76.             END; |
  77.  
  78.         "T": (* timeout *)
  79.             INC(count);
  80.             IF count > 3
  81.             THEN
  82.                 count := 0;
  83.                 SendPacket("N",0,0,"");  (* send a NAK for Packet 0 *)
  84.             END; |
  85.  
  86.         "A": (* user abort *)
  87.             SendPacket("E",0,37,
  88.                        "User aborted transmission (M2-Kermit)");
  89.             ClrScr;
  90.             RETURN FALSE;
  91.  
  92.         ELSE
  93.             SendPacket("E",0,42,
  94.                        "Server command not implemented (M2-Kermit)");
  95.  
  96.         END;
  97.     END;
  98.  
  99. END Server;
  100.  
  101. END KermServ.
  102.