Interp.txt 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. MODULE Dev0Interp;
  2. (*
  3. A. V. Shiryaev, 2012.10
  4. *)
  5. IMPORT Console, HostConsole (* required *), Strings, Dialog, StdInterpreter (* required (Dialog.SetCallHook) *);
  6. PROCEDURE WriteInt (x: INTEGER);
  7. VAR s: ARRAY 16 OF CHAR;
  8. BEGIN
  9. Strings.IntToString(x, s);
  10. Console.WriteStr(s)
  11. END WriteInt;
  12. PROCEDURE Call (VAR s: ARRAY OF CHAR): BOOLEAN;
  13. VAR i: INTEGER;
  14. res: BOOLEAN;
  15. BEGIN
  16. i := 0;
  17. WHILE (i < LEN(s)) & (s[i] # 0AX) & (s[i] # 0DX) & (s[i] # 0X) DO
  18. INC(i)
  19. END;
  20. IF (i < LEN(s)) & (s[i] # 0X) THEN
  21. IF (i > 0) & (s[0] # '#') THEN
  22. s[i] := 0X;
  23. Dialog.Call(s, "", i);
  24. IF i = 0 THEN
  25. res := TRUE
  26. ELSE
  27. WriteInt(i); Console.WriteLn;
  28. res := FALSE (* stop on Dialog.Call error *)
  29. END
  30. ELSE (* skip empty strings and comments *)
  31. res := TRUE
  32. END
  33. ELSE (* end of input *)
  34. res := FALSE
  35. END;
  36. RETURN res
  37. END Call;
  38. PROCEDURE Init;
  39. VAR s: ARRAY 1024 OF CHAR;
  40. BEGIN
  41. Console.ReadLn(s);
  42. WHILE Call(s) DO
  43. Console.ReadLn(s)
  44. END
  45. END Init;
  46. BEGIN
  47. Init
  48. END Dev0Interp.