XYModem.SymW 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. MODULE XYModem;
  2. IMPORT SYSTEM, Objects, Kernel, Streams, Files, Serials, Strings, Commands;
  3. CONST
  4. SOH = 1X;
  5. STX = 2X;
  6. EOT = 4X;
  7. ACK = 6X;
  8. EOF = 1AX;
  9. NAK = 15X;
  10. CAN = 18X;
  11. C = 43X;
  12. XModem* = 0;
  13. XModem1K* = 1;
  14. YModem* = 2;
  15. DoYield = TRUE;
  16. TYPE
  17. Modem* = OBJECT {EXCLUSIVE}
  18. VAR
  19. W: Streams.Writer;
  20. R: Streams.Reader;
  21. F: Files.File;
  22. mode: LONGINT;
  23. timeout: LONGINT;
  24. data: ARRAY 1024 OF CHAR;
  25. error: ARRAY 64 OF CHAR;
  26. done, fail: BOOLEAN;
  27. bytesProcessed-, totalBytes-: LONGINT;
  28. PROCEDURE ^ & Init*(W: Streams.Writer; R: Streams.Reader; F: Files.File; mode: LONGINT);
  29. PROCEDURE ^ IsDone*(): BOOLEAN;
  30. PROCEDURE ^ Await*(VAR err: ARRAY OF CHAR);
  31. PROCEDURE ^ AwaitF*(VAR F: Files.File; VAR err: ARRAY OF CHAR);
  32. PROCEDURE ^ Stop;
  33. PROCEDURE ^ Read(VAR ch: CHAR): BOOLEAN;
  34. END Modem;
  35. Sender* = OBJECT {EXCLUSIVE} (Modem)
  36. PROCEDURE ^ YHeader(): LONGINT;
  37. PROCEDURE ^ SendFile;
  38. BEGIN{ACTIVE}
  39. END Sender;
  40. Receiver* = OBJECT {EXCLUSIVE} (Modem)
  41. PROCEDURE ^ YHeader(len: LONGINT; VAR name: ARRAY OF CHAR; VAR size: LONGINT);
  42. PROCEDURE ^ ReceiveFile;
  43. BEGIN{ACTIVE}
  44. END Receiver;
  45. PROCEDURE ^ IsDigit(ch: CHAR): BOOLEAN;
  46. PROCEDURE ^ CRC16(VAR buf: ARRAY OF CHAR; len: LONGINT): LONGINT;
  47. PROCEDURE ^ GetPars(context: Commands.Context; VAR name: ARRAY OF CHAR; VAR port, bps, parity, stop: LONGINT): BOOLEAN;
  48. PROCEDURE ^ xySend(context: Commands.Context; mode: LONGINT);
  49. PROCEDURE ^ XSend*(context: Commands.Context);
  50. PROCEDURE ^ XSend1K*(context: Commands.Context);
  51. PROCEDURE ^ YSend*(context: Commands.Context);
  52. PROCEDURE ^ xyReceive(context: Commands.Context; mode: LONGINT);
  53. PROCEDURE ^ XReceive*(context: Commands.Context);
  54. PROCEDURE ^ YReceive*(context: Commands.Context);
  55. BEGIN
  56. END XYModem.