DIRECTORY TilerMenu, TerminalIO USING [WriteRope, UserAbort, RequestSelection], Rope USING [ROPE, Equal], CDSequencer USING [ImplementCommand, ExecuteCommand, Command]; TilerMenuImpl: CEDAR PROGRAM IMPORTS TerminalIO, Rope, CDSequencer EXPORTS TilerMenu = BEGIN numCommands: CARDINAL _ 0; atomList: LIST OF ATOM _ NIL; nameList: LIST OF Rope.ROPE _ NIL; Register: PUBLIC PROC [name: Rope.ROPE, commandAtom: ATOM] = BEGIN a: LIST OF ATOM _ atomList; n: LIST OF Rope.ROPE _ nameList; WHILE a # NIL DO IF Rope.Equal[n.first, name] THEN { a.first _ commandAtom; RETURN; }; a _ a.rest; n _ n.rest; ENDLOOP; numCommands _ numCommands + 1; atomList _ CONS[commandAtom, atomList]; nameList _ CONS[name, nameList]; END; TilerMenuProc: PROC [comm: CDSequencer.Command] = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; selection, pos: INT; atoms: LIST OF ATOM; IF numCommands < 1 THEN GOTO none; selection _ TerminalIO.RequestSelection[label: "Module Generator Menu", choice: nameList]; IF selection < 1 THEN GOTO skipped; pos _ 1; atoms _ atomList; IF selection > numCommands THEN ERROR; WHILE pos # selection DO pos _ pos + 1; atoms _ atoms.rest; ENDLOOP; CDSequencer.ExecuteCommand[comm: comm, as: atoms.first]; EXITS userAbort => TerminalIO.WriteRope["discarded\n"]; skipped => TerminalIO.WriteRope["skipped\n"]; none => TerminalIO.WriteRope["No tiler commands are running.\n"]; END; CDSequencer.ImplementCommand[$ModuleMenu, TilerMenuProc,, doQueue]; END. าFile: TilerMenuImpl.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Created by: Bob Mayo, July 27, 1984 8:10:46 pm PDT Last Edited by: July 30, 1984 11:15:34 am PDT PDT -- Main body ส\˜– "Cedar" stylešœ™Jšœ ฯmœ1™J˜——J˜šฯb œžœžœ˜ Jšžœžœ ž˜?J˜Jšœ žœ˜Jš œ žœžœžœžœ˜Jš œ žœžœžœžœ˜"J˜š ฯnœžœžœ žœžœž˜BJšœžœžœžœ ˜Jšœžœžœžœ ˜ šžœž˜šžœžœ˜#Jšœ˜Jšžœ˜J˜—J˜ J˜ Jšžœ˜—Jšœ˜Jšœ žœ˜'Jšœ žœ˜ Jšžœ˜—J˜šะbn œžœž˜7Jšžœžœ ˜.Jšœžœ˜Jšœžœžœžœ˜Jšžœžœžœ˜"JšœZ˜ZJšžœžœžœ ˜#Jšœ˜Jšžœžœžœ˜&Jšžœžœ$žœ˜DJšœ8˜8šž˜J˜1Jšœ-˜-JšœA˜A—Jšžœ˜—J˜J™ JšœC˜CJšžœ˜——…—พ์