2
0

Interp.txt 1.0 KB

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