GtkDemo.mod 1.9 KB

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