DIRECTORY BasicTime USING [GMT, nullGMT], ChoiceButtons USING [EnumTypeRef], IO USING [STREAM], LarkPrograms USING [Program], MBQueue USING [Queue], Pup USING [Address, Net, nullAddress], ReadEvalPrint USING [Handle], Rope USING [ROPE], 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: Pup.Net _ [173B], wDir: Rope.ROPE _ NIL, 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: Pup.Address _ Pup.nullAddress, nameRope: Rope.ROPE _ NIL, -- pup internet name, if any addressRope: Rope.ROPE _ NIL, -- pup internet address, in rope form userRName: Rope.ROPE _ NIL, -- typically "Stewart" program: LarkPrograms.Program _ NIL, -- loaded program slaveProgram: LarkPrograms.Program _ NIL, -- slave memory contents larkMode: CHAR _ 'U, applicationMode: CHAR _ '\040 , -- denotes state of application for this Lark. 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]; LarkDBSet: 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 [netAddress: Pup.Address] RETURNS [log: IO.STREAM]; GetLogStream: GetLogStreamProc; GetLark: PROC [address: Pup.Address] RETURNS [lark: LarkData]; VerifyInternal: PROC [lark: LarkControl.LarkData, program: LarkPrograms.Program, startAddress, stopAddress: TeleLoad.CoreAddress]; SetApplicationMode: PROC[lark: LarkData, mode: CHAR]; END. April 25, 1983 12:49 pm, LCS, created June 21, 1983 2:41 pm, LCS, Added GetStream stuff May 15, 1986 5:04:15 pm PDT, LCS, Changed LarkIndex to 240, LarkControlDataObject, LarkDataObject, June ,LarkControl.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. L. Stewart, December 21, 1983 3:58 pm Swinehart, April 6, 1987 9:44:47 am PDT Parameter to LarkControl or (default) Working directory issuing LarkControl: where to find program files 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 address.[net, host] = [[0], [0]] then returns the LarkControl viewer log stream for some network. If address.[net, host] = [[net], [0]] then returns the LarkControl viewer log stream for the given net. If address.[net, host] = [[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. Swinehart, May 15, 1986 5:03:24 pm PDT Cedar 6.1 changes to: DIRECTORY, GetLogStreamProc, GetLark Swinehart, December 17, 1986 10:24:43 pm PST Add SetApplicationMode changes to: LarkDataObject, VerifyInternal, SetApplicationMode Swinehart, April 4, 1987 12:41:40 pm PST Cedar 7. Eliminate LarkData.rName; use nameRope and a different access scheme. changes to: LarkDataObject Κ―˜šœ™IcodešœB™BJšœ%™%J™'—J˜šΟk ˜ Jšœ œœ ˜Jšœœ˜"Jšœœœ˜Jšœ œ ˜Jšœœ ˜Jšœœ˜&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šœh™h—Jš œœ œ œœž˜?Jšœ˜—J˜Jšœœ˜-J˜Jšœ œ˜Jšœ œœ˜$J˜J™šœœœ˜Jšœœž˜#J˜'Jšœœœž˜8Jšœœœž%˜DJšœœœž˜2Jšœ œž˜7Jšœ%œž˜CJšœ œ˜Jšœœ ž/˜OJšœ"ž˜>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šŸœœœ˜>J˜J™—™(K™NKšœ  ™—K™—…—ž y