GtkDemo.mod 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. IMPLEMENTATION MODULE GtkDemo ;
  2. FROM DemoImpl IMPORT DoLinks, DoListBox, DoFlowBox, DoExpander, DoCss;
  3. FROM SYSTEM IMPORT ADDRESS;
  4. TYPE
  5. Demo = RECORD
  6. name: ARRAY [0..47] OF CHAR;
  7. build: BuildProc;
  8. END;
  9. VAR
  10. demos: ARRAY [0..255] OF Demo;
  11. n: CARDINAL;
  12. PROCEDURE Copy (VAR dst: ARRAY OF CHAR; src: ARRAY OF CHAR);
  13. VAR
  14. i: CARDINAL;
  15. BEGIN
  16. i := 0;
  17. WHILE (i < HIGH(dst)) AND (i <= HIGH(src)) AND (src[i] # 0C) DO
  18. dst[i] := src[i];
  19. INC(i)
  20. END;
  21. dst[i] := 0C
  22. END Copy;
  23. PROCEDURE Equal (a, b: ARRAY OF CHAR) : BOOLEAN;
  24. VAR
  25. i: CARDINAL;
  26. BEGIN
  27. i := 0;
  28. WHILE (a[i] # 0C) AND (b[i] # 0C) DO
  29. IF a[i] # b[i] THEN RETURN FALSE END;
  30. INC(i)
  31. END;
  32. RETURN a[i] = b[i]
  33. END Equal;
  34. PROCEDURE Register (name: ARRAY OF CHAR; build: BuildProc);
  35. BEGIN
  36. IF n <= HIGH(demos) THEN
  37. Copy(demos[n].name, name);
  38. demos[n].build := build;
  39. INC(n)
  40. END
  41. END Register;
  42. PROCEDURE Count () : CARDINAL;
  43. BEGIN
  44. RETURN n
  45. END Count;
  46. PROCEDURE NameOf (i: CARDINAL; VAR name: ARRAY OF CHAR);
  47. BEGIN
  48. IF i < n THEN Copy(name, demos[i].name) ELSE name[0] := 0C END
  49. END NameOf;
  50. PROCEDURE BuildByName (name: ARRAY OF CHAR; doWidget: ADDRESS) : ADDRESS;
  51. VAR
  52. i: CARDINAL;
  53. BEGIN
  54. i := 0;
  55. WHILE i < n DO
  56. IF Equal(demos[i].name, name) THEN
  57. RETURN demos[i].build(doWidget)
  58. END;
  59. INC(i)
  60. END;
  61. RETURN NIL
  62. END BuildByName;
  63. PROCEDURE IsPorted (name: ARRAY OF CHAR) : BOOLEAN;
  64. VAR
  65. i: CARDINAL;
  66. BEGIN
  67. i := 0;
  68. WHILE i < n DO
  69. IF Equal(demos[i].name, name) THEN RETURN TRUE END;
  70. INC(i)
  71. END;
  72. RETURN FALSE
  73. END IsPorted;
  74. BEGIN
  75. n := 0;
  76. Register("links", DoLinks);
  77. Register("listbox", DoListBox);
  78. Register("flowbox", DoFlowBox);
  79. Register("expander", DoExpander);
  80. Register("css_basics", DoCss)
  81. END GtkDemo.