| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- IMPLEMENTATION MODULE GtkDemo ;
- FROM DemoImpl IMPORT DoLinks, DoListBox, DoFlowBox, DoExpander, DoCss;
- FROM SYSTEM IMPORT ADDRESS;
- TYPE
- Demo = RECORD
- name: ARRAY [0..47] OF CHAR;
- build: BuildProc;
- END;
- VAR
- demos: ARRAY [0..255] OF Demo;
- n: CARDINAL;
- PROCEDURE Copy (VAR dst: ARRAY OF CHAR; src: ARRAY OF CHAR);
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE (i < HIGH(dst)) AND (i <= HIGH(src)) AND (src[i] # 0C) DO
- dst[i] := src[i];
- INC(i)
- END;
- dst[i] := 0C
- END Copy;
- PROCEDURE Equal (a, b: ARRAY OF CHAR) : BOOLEAN;
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE (a[i] # 0C) AND (b[i] # 0C) DO
- IF a[i] # b[i] THEN RETURN FALSE END;
- INC(i)
- END;
- RETURN a[i] = b[i]
- END Equal;
- PROCEDURE Register (name: ARRAY OF CHAR; build: BuildProc);
- BEGIN
- IF n <= HIGH(demos) THEN
- Copy(demos[n].name, name);
- demos[n].build := build;
- INC(n)
- END
- END Register;
- PROCEDURE Count () : CARDINAL;
- BEGIN
- RETURN n
- END Count;
- PROCEDURE NameOf (i: CARDINAL; VAR name: ARRAY OF CHAR);
- BEGIN
- IF i < n THEN Copy(name, demos[i].name) ELSE name[0] := 0C END
- END NameOf;
- PROCEDURE BuildByName (name: ARRAY OF CHAR; doWidget: ADDRESS) : ADDRESS;
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE i < n DO
- IF Equal(demos[i].name, name) THEN
- RETURN demos[i].build(doWidget)
- END;
- INC(i)
- END;
- RETURN NIL
- END BuildByName;
- PROCEDURE IsPorted (name: ARRAY OF CHAR) : BOOLEAN;
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE i < n DO
- IF Equal(demos[i].name, name) THEN RETURN TRUE END;
- INC(i)
- END;
- RETURN FALSE
- END IsPorted;
- BEGIN
- n := 0;
- Register("links", DoLinks);
- Register("listbox", DoListBox);
- Register("flowbox", DoFlowBox);
- Register("expander", DoExpander);
- Register("css_basics", DoCss)
- END GtkDemo.
|