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], 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 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, 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]; 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 [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 c 1986 by Xerox Corporation. All rights reserved. L. Stewart, December 21, 1983 3:58 pm Swinehart, December 17, 1986 10:32:12 pm PST 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 Κž˜šœ™Icodešœ Οmœ1™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™—…—Όˆ