-- Transport mechanism: DEFS for logging facilities -- [Juniper]<Grapevine>ms>LogDefs.mesa -- Roy Levin February 6, 1980 5:14 PM -- Andrew Birrell 11-Mar-81 12:32:49 -- Mark Johnson 19-May-81 13:39:52 DIRECTORY Process USING [Seconds]; LogDefs: DEFINITIONS = BEGIN -- The LogDefs interface defines of three separate entities: a statistics -- display, a typescript, and a long-term log file. The statistics display -- presents a client-defined collection of numbers that are kept up-to-date -- on the display screen by the implementation of LogDefs. Each of these -- numbers may be displayed in one of several formats with client-supplied -- captions. The typescript is a self-scrolling region of the screen to -- which arbitrary (ASCII) characters may be written. The size of the -- region is client-controlled, and text that is scrolled off the screen -- is discarded. The long-term log file contains arbitrary (ASCII) -- entries supplied by the client, each of which is automatically -- time-stamped. This file is kept up-to-date on backing storage so as to -- provide a complete record of client actions. This log does not appear -- on the display screen. -- Types and Related Constants -- Format: TYPE = {short, long, percent}; Percentage: TYPE = [0..100]; DisplayItem: TYPE = RECORD[ SELECT format: Format FROM short => [p: POINTER TO UNSPECIFIED], long => [p: POINTER TO LONG CARDINAL], percent => [p: POINTER TO Percentage], ENDCASE]; -- Miscellaneous Declarations -- CR: CHARACTER = 015C; SP, Space: CHARACTER = 040C; TAB: CHARACTER = 011C; BS: CHARACTER = 010C; noLimit: CARDINAL = 177777B; defaultRefreshInterval: Process.Seconds = 5; defaultTypescriptLines: CARDINAL = 4; -- Start/Stop Procedures -- StatisticsOn: PROCEDURE[heading: STRING]; -- called after all statistics specification procedures -- (SetStatisticsParameters and DisplayNumber) have been called. -- 'heading' is an ASCII string that will be displayed at the top of -- the screen. The 'heading' string need not persist in the client's -- storage after DisplayOn has returned. StatisticsOn concludes with -- an implicit ScreenOn. TypescriptOn: PROCEDURE; -- called after the typescript specification procedure -- (SetTypescriptParameters) has been called. The typescript is -- initialized and made ready for calls on WriteChar, WriteString, and -- related output procedures. TypescriptOn concludes with an implicit -- ScreenOn. DisplayOff: PROCEDURE; -- DisplayOff first performs an implicit ScreenOff, then causes an -- orderly cleanup of the display data structures. All information -- previously supplied via SetStatisticsParameters, DisplayNumber, -- and SetTypescriptParameters is discarded and all internal data -- structures are released. ScreenOff: PROCEDURE; -- turns off the display screen without affecting any of the underlying -- data structures. ScreenOn: PROCEDURE; -- undoes the effect of ScreenOff. -- Statistics Display Procedures -- SetStatisticsParameters: PROCEDURE[bmPages: CARDINAL ← noLimit, font: STRING ← NIL, refreshInterval: Process.Seconds ← defaultRefreshInterval]; -- This procedure alters the defaults for the statistics region of the -- display. 'bmPages' defines a limit on the number of bitmap pages to -- be allocated for statistics display. The actual number of pages -- allocated will depend of the number of DisplayItems registered via -- DisplayNumber. 'font', if not defaulted, specifies the name of a -- file to be used as the font for the statistics region (don't forget -- ".al"!); otherwise, "Sysfont.al" will be used. 'refreshInterval' is -- the time in seconds between updates of the statistics display. This -- procedure, if called at all, must be called before StatisticsOn. DisplayNumber: PROCEDURE[caption: STRING, item: DisplayItem]; -- registers a value to be maintained on the display. 'item' defines -- the main memory location of the value (which must not change) and -- the format in which it is to be displayed. 'caption' is -- accompanying ASCII text. The 'caption' string need not persist in -- the client's storage after DisplayNumber has returned. -- DisplayNumber must be called before StatisticsOn. -- Typescript Procedures -- SetTypescriptParameters: PROCEDURE[tsPages: CARDINAL ← noLimit, tsLines: CARDINAL ← defaultTypescriptLines, font: STRING ← NIL]; -- This procedure alters the defaults for the typescript region ot the -- display. Up to 'tsLines' of text will be displayed, subject to the -- constraint that no more than 'tsPages' of bitmap will be consumed. -- 'font', if not defaulted, specifies the name of a file to be used as -- the font for the typescript region (don't forget ".al"!); otherwise, -- "Sysfont.al" will be used. This procedure, if called at all, must -- be called before TypescriptOn. WriteChar: PROCEDURE[char: CHARACTER]; -- writes the argument character into the typescript. Characters > 177C -- will be ignored and ASCII control characters (other than CR, TAB, SP, -- and BS) will be printed as though the sequence WriteChar['↑]; -- WriteChar[char+100B] had been executed. CR, TAB, and SP cause -- appropriate white space to be introduced. WriteChar must be called -- after TypescriptOn. WriteString: PROCEDURE[s: STRING]; -- writes all characters of the string into the typescript using -- WriteChar. WriteLine: PROCEDURE[s: STRING]; -- equivalent to WriteString[s]; WriteChar[CR]. WriteDecimal: PROCEDURE[n: CARDINAL]; -- writes 'n' on the typescript as an unsigned, decimal quantity. -- Log File Procedures -- WriteLogEntry: PROCEDURE[s: STRING]; -- appends the argument string to the log file, prefixing it with the -- current time and suffixing it with a CR. EnableLogSpilling: PROC[name, pwd, host, path: STRING]; -- causes the log file to be spilled to the given host each time it -- wraps around, using the given credentials and the Leaf protocol. -- the file titles used are path-name followed by our PUP address -- followed by serial number 0 through 39. E.g. if path is <DMS>Log>, -- and we are 3#14#, files are <DMS>Log>3#14#00. END.