HW.ob07 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. MODULE HW;
  2. IMPORT
  3. SYSTEM, KOSAPI;
  4. PROCEDURE BeginDraw;
  5. BEGIN
  6. KOSAPI.sysfunc2(12, 1)
  7. END BeginDraw;
  8. PROCEDURE EndDraw;
  9. BEGIN
  10. KOSAPI.sysfunc2(12, 2)
  11. END EndDraw;
  12. PROCEDURE DefineAndDrawWindow (left, top, width, height, color, style, hcolor, hstyle: INTEGER; header: ARRAY OF CHAR);
  13. BEGIN
  14. KOSAPI.sysfunc6(0, left*65536 + width, top*65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(header[0]))
  15. END DefineAndDrawWindow;
  16. PROCEDURE WriteTextToWindow (x, y, color: INTEGER; text: ARRAY OF CHAR);
  17. BEGIN
  18. KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(48, 24), SYSTEM.ADR(text[0]), LENGTH(text), 0)
  19. END WriteTextToWindow;
  20. PROCEDURE WaitForEvent (): INTEGER;
  21. RETURN KOSAPI.sysfunc1(10)
  22. END WaitForEvent;
  23. PROCEDURE ExitApp;
  24. BEGIN
  25. KOSAPI.sysfunc1(-1)
  26. END ExitApp;
  27. PROCEDURE draw_window (header, text: ARRAY OF CHAR);
  28. CONST
  29. WHITE = 0FFFFFFH;
  30. RED = 0C00000H;
  31. GREEN = 0008000H;
  32. BLUE = 00000C0H;
  33. GRAY = 0808080H;
  34. BEGIN
  35. BeginDraw;
  36. DefineAndDrawWindow(200, 200, 300, 150, WHITE, 51, 0, 0, header);
  37. WriteTextToWindow( 5, 10, RED, text);
  38. WriteTextToWindow(35, 30, GREEN, text);
  39. WriteTextToWindow(65, 50, BLUE, text);
  40. WriteTextToWindow(95, 70, GRAY, text);
  41. EndDraw
  42. END draw_window;
  43. PROCEDURE main (header, text: ARRAY OF CHAR);
  44. CONST
  45. EVENT_REDRAW = 1;
  46. EVENT_KEY = 2;
  47. EVENT_BUTTON = 3;
  48. BEGIN
  49. WHILE TRUE DO
  50. CASE WaitForEvent() OF
  51. |EVENT_REDRAW: draw_window(header, text)
  52. |EVENT_KEY: ExitApp
  53. |EVENT_BUTTON: ExitApp
  54. END
  55. END
  56. END main;
  57. BEGIN
  58. main("Hello", "Hello, world!")
  59. END HW.