%Include "ie:terminal.inc" %Include "ie:ie.inc" %Include "inc:util.imp" %include "inc:dict.imp" %Constinteger No Of Progs = 17 %Conststring(15)%Array Program Name (1:No Of Progs)= "Hideous", "Graphan", "Persian", "Rubik", "Gas", "Succ", "Tetra", "Sparkle", "Manclock", "Clock", "Harmony", "Spirodem", "Ted", "Spiro", "Nut", "Pacman", "Denis" %Conststring(40)%Array Description (1:No Of Progs)= "Arms to legs program", "Tower of Hanoi", "Persian patterns", "Rubik cube manipulator", "Rotating APM sign", "Long road to the APM", "Tetrahedrons", "Coat of arms", "Clock - time prompted for", "Clock - time obtained from filestore", "Harmonograph emulator", "Spiro patterns", "Leaf Cell Editor", "Spirograph emulator", "Tunnel of rectangles L1.5 graphics reqd", "Pacman game", "Denis game" %Conststring(15)%Array File Name (1:No Of Progs)= "ademo:Hideous", "ademo:Graphan", "ademo:Persian", "ademo:Rubik", "ademo:Gas", "ademo:Succ", "ademo:Tetra", "ademo:Sparkle", "ademo:Manclock", "ademo:Clock", "ademo:Harmony", "ademo:Spirodem", "vlsi:ted", "ademo:spiro", "ademo:nut", "games:pacman", "games:denis" %Externalroutinespec Run Program (%String(255) program) %integer %function Default Terminal %integer At %string (255) T At = Ref Name ("TERMINAL", Com Dict) %if At > 0 %start Trans Name (Integer (At), T) To Upper (T) %if T = "VISUAL200" %start %result = Visual 200 %else %if T = "VISUAL55" %result = Visual 55 %else %if T = "VT220" %result = VT220 %else %if T = "WY75" %result = WY75 %finish %finish %Result = Visual 200 %end %Begin %Integer i,c,n,p %String (255) message %Switch mev (0:15) Terminal Model = Default Terminal Set Terminal Characteristics Set Up Terminal %Cycle Clear Screen Printstring (%c "W e l c o m e t o t h e A P M d e m o n s t r a t i o n s u i t e") Cursor (0,1) Printsymbol ('-') %for i = 1,1,80 Cursor (0,3) Printstring (%c "Use cursor keys to select program, and RETURN to run it. CTRL-Z stops suite") Cursor (0,5) Feature Printstring (Program Name (1)) Normal Cursor (40,5) Printstring (Description (1)) %For i = 2,1,No Of Progs %Cycle Cursor (0,i+4) Printstring (Program Name (i)) Cursor (40,i+4) Printstring (Description (i)) %Repeat p = 1 %Cycle c = Get Key n = p %If c = Up Key %Start %If p > 1 %Then n = p - 1 %Else n = No Of Progs %Elseif c = Down Key %If p < No Of Progs %Then n = p + 1 %Else n = 1 %Elseif c = CR %Exit %Elseif c = SUB Cursor (0,23) Reset Terminal %Stop %Else PrintSymbol (Bel) %Finish %If n # p %Start Cursor (0,p+4) PrintString (Program Name (p)) Cursor (0,n+4) Feature PrintString (Program Name (n)) Normal p = n %Finish %Repeat Cursor (0,No Of Progs+4+2) Reset Terminal %Begin %on 3 %start Open Input (0,":t") -> ok %Finish Open Input (0,Filename(p).".dat") ok: %End Prompt (":") Run Program (Filename(p)) Set Up Terminal %While testsymbol >= 0 %cycle; %repeat Close Input Open Input (0,":t") Close Output Open Output (0,":t") -> mev(Event_Event) mev(0): %Continue %If event_sub = 0 %or event_sub = 1 %If event_sub = 2 %or event_sub = 3 %Start c = (event_extra&16_FFFFF0) %If c = 16_E20000 %Start message = "program requires graphics board" %Elseif c = 16_07FFF0 message = "program requires a mouse" %Else message = "program requires something at ".itos(event_extra,0) %Finish %Else message = "something catastrophic" %Finish -> service mev(9): %Continue mev(*): message = event_message -> service service: Cursor (0,22) Erase Line Printsymbol(7) Printstring ("Program failed : ".message);newline Erase Line Printstring ("Type any key to continue") c = get key %Repeat %Endofprogram