2
0

RAWPrinter.Mod 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. MODULE RAWPrinter; (** AUTHOR "dk"; PURPOSE "Printing Raw to Port 9100"; *)
  2. IMPORT Files, Streams, IP, TCP, DNS;
  3. CONST
  4. DefConPort = 9100;
  5. (*Errors*)
  6. FILENOTFOUND = -1;
  7. HOSTNOTFOUND = -2;
  8. READERNIL = -3;
  9. OK = 0;
  10. PROCEDURE PrintFile*(CONST printer, fn: ARRAY OF CHAR; VAR res : WORD);
  11. VAR
  12. fileReader : Files.Reader;
  13. file : Files.File;
  14. BEGIN
  15. file := Files.Old(fn);
  16. IF (file # NIL) THEN
  17. Files.OpenReader(fileReader, file, 0);
  18. PrintStream(printer, fileReader, res);
  19. ELSE
  20. res := FILENOTFOUND;
  21. END;
  22. END PrintFile;
  23. PROCEDURE PrintStream*(CONST printer : ARRAY OF CHAR; reader : Streams.Reader; VAR res : WORD);
  24. VAR
  25. writer: Streams.Writer;
  26. buf : ARRAY 10000 OF CHAR;
  27. conn : TCP.Connection;
  28. fadr: IP.Adr;
  29. connres: WORD; len : LONGINT;
  30. BEGIN
  31. DNS.HostByName(printer, fadr, connres);
  32. IF res = DNS.Ok THEN
  33. NEW(conn); conn.Open(TCP.NilPort, fadr, DefConPort, connres);
  34. Streams.OpenWriter(writer, conn.Send);
  35. IF connres = TCP.Ok THEN
  36. IF reader # NIL THEN
  37. WHILE reader.res = Streams.Ok DO
  38. reader.Bytes(buf, 0, LEN(buf), len);
  39. writer.Bytes(buf, 0, len);
  40. END;
  41. writer.Update();
  42. conn.Close();
  43. res := OK;
  44. ELSE
  45. res := READERNIL;
  46. END;
  47. ELSE
  48. res := HOSTNOTFOUND;
  49. END;
  50. END;
  51. END PrintStream;
  52. END RAWPrinter.
  53. Usage:
  54. PROCEDURE PrintTest1*();
  55. VAR
  56. res : WORD;
  57. BEGIN
  58. RAWPrinter.PrintFile("129.132.134.122", "test.ps", res);
  59. KernelLog.String("Printing res : "); KernelLog.Int(res, 5); KernelLog.Ln;
  60. END PrintTest1;
  61. PROCEDURE PrintTest2*();
  62. VAR
  63. file : Files.File;
  64. res : WORD;
  65. reader : Files.Reader;
  66. BEGIN
  67. file := Files.Old("test.ps");
  68. Files.OpenReader(reader, file, 0);
  69. RAWPrinter.PrintStream("129.132.134.122", reader,res);
  70. KernelLog.String("Printing res : "); KernelLog.Int(res, 5); KernelLog.Ln;
  71. END PrintTest2;