DIRECTORY BasicTime USING [GMT, nullGMT], ChoiceButtons USING [EnumTypeRef], IO USING [STREAM], LarkPrograms USING [Program], MBQueue USING [Queue], PupTypes USING [fillInPupAddress, PupAddress, PupNetID], ReadEvalPrint USING [Handle], Rope USING [ROPE], RPCPkt USING [Machine], TeleLoad USING [Advice, CoreAddress, EventProc, EventRecordObject, Handle, State8086Object, TeleLoadProc], ViewerClasses USING[Viewer]; LarkControl: CEDAR DEFINITIONS = BEGIN cRUNNING: CARDINAL = 0FF00H; cDown: CARDINAL = 0EFFFH; Data: TYPE = REF LarkControlDataObject; LarkControlDataObject: TYPE = RECORD[ mainSwitch: MainSwitchStates _ off, mainSwitchController: ChoiceButtons.EnumTypeRef _ NIL, out: IO.STREAM _ NIL, mbQueue: MBQueue.Queue _ NIL, viewer: ViewerClasses.Viewer _ NIL, -- self larksY: INTEGER _ 0, -- y position and height of the per-lark viewer larksH: INTEGER _ 0, maxW: INTEGER _ 0, buttH: INTEGER _ 0, pleaseStop: BOOL _ FALSE, script: ViewerClasses.Viewer _ NIL, -- typescript eventLark: LarkIndex _ FIRST[LarkIndex], anyEvent: BOOL _ FALSE, net: PupTypes.PupNetID _ [173B], larks: ARRAY LarkIndex OF LarkData _ ALL[NIL] -- per lark data ]; MainSwitchStates: TYPE = {off, manual, auto}; LarkIndex: TYPE = [100B..240B); LarkData: TYPE = REF LarkDataObject; LarkDataObject: TYPE = RECORD [ world: Data _ NIL, -- back pointer address: PupTypes.PupAddress _ PupTypes.fillInPupAddress, nameRope: Rope.ROPE _ NIL, -- pup internet name, if any addressRope: Rope.ROPE _ NIL, -- pup internet address, in rope form rName: Rope.ROPE _ NIL, -- typically "173#101#.lark" userRName: Rope.ROPE _ NIL, -- typically "Stewart" program: LarkPrograms.Program _ NIL, -- loaded program slaveProgram: LarkPrograms.Program _ NIL, -- slave memory contents larkMode: CHAR _ 'U, state: TeleLoad.State8086Object, -- really should be [ALL[0]] event: TeleLoad.EventRecordObject, newEvent: BOOL _ FALSE, expectEvent: BOOL _ FALSE, expectedEventType: CARDINAL, h: TeleLoad.Handle _ NIL, eval: ReadEvalPrint.Handle _ NIL, breakList: LIST OF Breakpoint _ NIL, lastBoot: BasicTime.GMT _ BasicTime.nullGMT, lastBootTimeValid: BOOL _ FALSE, userRNameViewer: ViewerClasses.Viewer _ NIL, mode: ViewerClasses.Viewer _ NIL, debug: ViewerClasses.Viewer _ NIL, status: ViewerClasses.Viewer _ NIL ]; Breakpoint: TYPE = REF BreakpointObject; BreakpointObject: TYPE = RECORD [ address: TeleLoad.CoreAddress, codeByte: CARDINAL ]; ShortCoreAddress: TYPE = CARDINAL; LoadProgram: PROC [lark: LarkData, go: BOOL, main: BOOL]; loadWindowLow: TeleLoad.CoreAddress; loadWindowHigh: TeleLoad.CoreAddress; SetState: PROC [h: TeleLoad.Handle, state: TeleLoad.State8086Object, tp: TeleLoad.TeleLoadProc, print: BOOL _ TRUE] RETURNS [ok: BOOL]; FetchState: PROC [h: TeleLoad.Handle, adv: TeleLoad.Advice _ [FALSE, FALSE, 0], print: BOOL _ TRUE] RETURNS [ok: BOOL, state: TeleLoad.State8086Object]; DisplayState: PROC [s: IO.STREAM, state: TeleLoad.State8086Object, indent: NAT _ 0]; SetValue: PROC [lark: LarkData, name: Rope.ROPE, value: CARDINAL, offset: NAT _ 0, print: BOOL _ FALSE] RETURNS [ok: BOOL]; LocalGo: PROC [lark: LarkData]; BootReason: PROC [reason: CARDINAL, BX: CARDINAL _ 0] RETURNS [Rope.ROPE]; DisplayEvent: PROC [lark: LarkData, event: TeleLoad.EventRecordObject, out: IO.STREAM, reasonRope: Rope.ROPE, preRope: Rope.ROPE, short: BOOL _ FALSE]; PollLark: PROC [lark: LarkData, print: BOOL _ FALSE, setPointers: BOOL _ TRUE] RETURNS [reason: Rope.ROPE]; NoteEvents: TeleLoad.EventProc; RepairBreakpoint: PROC [h: TeleLoad.Handle, breakpoint: Breakpoint]; BootLark: PROC [lark: LarkData]; LarkGVSet: PROC [lark: LarkControl.LarkData, setMode: BOOL, setProgram: BOOL]; ConsiderActionFurther: PROC [lark: LarkData, event: TeleLoad.EventRecordObject]; PaintMode: PROC [lark: LarkData]; StartWatcher: PROC; StopWatcher: PROC; NotifyWatcher: PROC; GetInstanceList: PROC RETURNS [LIST OF REF ANY]; LogEntry: PROC [lark: LarkData, rope: Rope.ROPE _ NIL, endWithCR: BOOL _ FALSE]; GetLogStreamProc: TYPE = PROC [machine: RPCPkt.Machine] RETURNS [log: IO.STREAM]; GetLogStream: GetLogStreamProc; GetLark: PROC [machine: RPCPkt.Machine] RETURNS [lark: LarkData]; VerifyInternal: PROC [lark: LarkControl.LarkData, program: LarkPrograms.Program, startAddress, stopAddress: TeleLoad.CoreAddress]; END. April 25, 1983 12:49 pm, LCS, created June 21, 1983 2:41 pm, LCS, Added GetStream stuff June 21, 1983 2:41 pm, LCS, Changed LarkIndex to 240 òLarkControl.mesa L. Stewart, December 21, 1983 3:58 pm Last Edited by: Swinehart, June 15, 1984 1:36:08 am PDT Data structure for each Lark viewers for each Lark which need to be relabelled global variables routines for manipulating a lark use for zapping and starting, always works from state fetch state block and optionally set advice Print state on stream Alter a variable Go, using appropriate technique if a beakpoint is set Return the rope reason corresponding to a particular boot code. Format an event listing. Read the state of a Lark, if possible. Print events in a useful way Put the codebyte back Try to cause a watchdog timer boot by jumpint to the lark location Boot Aquire Lark data from Grapevine Reload and restart the Lark, if it seems appropriate. Paint the mode viewer acording to lark.larkMode. Start or stop the process that prints event notifications. Return a list of LarkControl records Print lark and the time and the rope. Aquire the IO output stream for a particular Lark. If machine = [[0], [0]] then returns the LarkControl viewer log stream for some network. If machine = [[net], [0]] then returns the LarkControl viewer log stream for the given net. If machine = [[net], [host]] then returns the log stream for the given lark, which will be a debug viewer if there is one and the LarkControl viewer log stream for the given net if there is no debug viewer. Aquire the data structure for a particular Lark. Check the contents of Lark memory against the given program. ÊM˜Jšœ™Jšœ%™%J™7J˜šÏk ˜ Jšœ œœ ˜Jšœœ˜"Jšœœœ˜Jšœ œ ˜Jšœœ ˜Jšœ œ*˜8Jšœœ ˜Jšœœœ˜Jšœœ ˜Jšœ œ\˜jJšœœ ˜—J˜Jšœ œ œ˜ Jš˜Jšœ œ ˜Jšœœ ˜J˜Jšœœœ˜'J˜šœœœ˜%J˜#Jšœ2œ˜6Jšœœœœ˜Jšœœ˜JšœœÏc˜,Jšœœž/˜EJšœœ˜Jšœœ˜Jšœœ˜Jšœ œœ˜Jšœœž ˜2Jšœœ ˜(Jšœ œœ˜J˜ Jš œœ œ œœž˜?Jšœ˜—J˜Jšœœ˜-J˜Jšœ œ˜Jšœ œœ˜$J˜J™šœœœ˜Jšœœž˜#J˜9Jšœœœž˜8Jšœœœž%˜DJšœ œœž˜4Jšœœœž˜2Jšœ œž˜7Jšœ%œž˜CJšœ œ˜Jšœ"ž˜>Jšœ"˜"Jšœ œœ˜Jšœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜!Jšœ œœœ˜$Jšœœ˜,Jšœœœ˜ J™1Jšœ(œ˜,Jšœœ˜!Jšœœ˜"Jšœ˜"J˜—J˜Jšœ œœ˜(šœœœ˜!J˜Jšœ ˜J˜—J˜Jšœœœ˜"J˜JšÏn œœœœ˜9J˜Jšœ™J˜J˜$J˜%J™J™ J™J™5Jš ŸœœYœœœœ˜‡J˜J™+JšŸ œœ.œœ œœœœ#˜˜J™J™Jš Ÿ œœœœ+œ˜TJ™J™JšŸœœœ œ œ œœœœ˜{J™J™5JšŸœœ˜J™J™?JšŸ œœ œœœœœ˜JJ™J™JšŸ œœ:œœœœ œœ˜—J™J™&JšŸœœœœœœœœ˜kJ™J™Jšœ˜J™J™JšŸœœ.˜DJ™J™GJšŸœœ˜ J˜J™JšŸ œœ'œœ˜NJ™J™5JšŸœœ5˜PJ˜J™0JšŸ œœ˜!J™J™:JšŸ œœ˜JšŸ œœ˜JšŸ œœ˜J˜J™$JšŸœœœœœœœ˜0J˜J™%Jš Ÿœœœœ œœ˜PJ˜Jšœ¹™¹Jš Ÿœ œœœœ˜QJšŸ œ˜J˜J™0JšŸœœœ˜AJ˜J™