IMPLEMENTATION MODULE KermServ; (************************************************************************) (* Handle Server mode *) (* written: 14.12.85 Matthias Aebi *) (* last modification: 18.03.86 Matthias Aebi *) (************************************************************************) FROM Terminal IMPORT WriteString, Write, WriteLn; FROM String IMPORT Insert; FROM KermRecv IMPORT RecvPacket, SwitchRecv; FROM KermSend IMPORT SendPacket, SwitchSend; FROM KermParam IMPORT Packet; FROM KermMisc IMPORT ClrScr; FROM NameSearch IMPORT FindNames, NextName; CONST UpLowEqual = TRUE; (************************************************************************) PROCEDURE Server(): BOOLEAN; (************************************************************************) VAR fileName : ARRAY [0..31] OF CHAR; recvPack : Packet; typ : CHAR; num : CARDINAL; len : CARDINAL; dummy : BOOLEAN; foundOne : BOOLEAN; fileNo : CARDINAL; versionNo : CARDINAL; count : CARDINAL; BEGIN WriteLn; WriteLn; WriteString("Now entering server mode ..."); count := 3; LOOP RecvPacket(typ,num,len,recvPack); CASE typ OF "S": (* receive a file *) dummy := SwitchRecv(""); | "R": (* request to send a file *) recvPack[len] := 0C; (* the name has no terminating 0C *) FindNames("DK", recvPack, UpLowEqual); NextName(foundOne, fileName, fileNo, versionNo); Insert(fileName, 0, "DK."); (* add device name *) IF foundOne THEN dummy := SwitchSend(fileName,""); ELSE SendPacket("E",0,26,"File not found (M2-Kermit)"); END; | "G": (* Execute generic Kermit command *) CASE CAP(recvPack[0]) OF "F": (* exit server mode & return to command level *) SendPacket("Y",0,0,""); (* send an ACK for Packet 0 *) ClrScr; RETURN FALSE; | "L": (* exit server mode & exit kermit *) SendPacket("Y",0,0,""); (* send an ACK for Packet 0 *) ClrScr; RETURN TRUE; | ELSE SendPacket("E",0,43, "Generic command not implemented (M2-Kermit)"); END; | "T": (* timeout *) INC(count); IF count > 3 THEN count := 0; SendPacket("N",0,0,""); (* send a NAK for Packet 0 *) END; | "A": (* user abort *) SendPacket("E",0,37, "User aborted transmission (M2-Kermit)"); ClrScr; RETURN FALSE; ELSE SendPacket("E",0,42, "Server command not implemented (M2-Kermit)"); END; END; END Server; END KermServ.