Guardian Programmer's Guide

Table Of Contents
Writing a Command-Interpreter Monitor ($CMON)
Guardian Programmer’s Guide 421922-014
23 - 39
Sample $CMON Program
The $CMON Code
The code for the $CMON program follows.
?INSPECT, SYMBOLS, NOCODE, NOMAP
?NOLIST, SOURCE $SYSTEM.ZSYSDEFS.ZSYSTAL
?LIST
!---------------------
!Literals:
!---------------------
LITERAL YES = 1; !setting for REFUSE^ALL flag
LITERAL NO = 0; !setting for REFUSE^ALL flag
LITERAL TOP^CPU^NUMBER = 5; !highest CPU number
LITERAL BUFSIZE = 750; !size of I/O buffer
LITERAL MAXFLEN = ZSYS^VAL^LEN^FILENAME; !maximum file-name
! length
LITERAL MAX^PARAM = 528; !maximum length of process
! startup parameter string in
! startup message; this string
! can be passed in
! Processcreation^msg message.
!---------------------
!Global variables:
!---------------------
INT .BUFFER[0:BUFSIZE/2 - 1]; !I/O buffer
STRING .SBUFFER :=
@BUFFER[0] '<<' 1; !string pointer to I/O
! buffer
STRING .S^PTR; !string pointer
STRING .SHUTDOWN^TEXT[0:63] := "Shutting system down";
STRING .LOGON^TEXT[0:63] := "Logon accepted";
STRING .LOGOFF^TEXT[0:63] := "Logoff accepted";
INT CPU^LIST[0:TOP^CPU^NUMBER]; !processor status array
INT PRIORITY^CPU := 0; !processor number of potential
! priority processor
INT NONPRIORITY^CPU := 0; !processor number of potential
! nonpriorty processor
INT REFUSE^ALL := NO; !flag for rejecting/
! accepting command-
! interpreter requests
INT REQUESTING^GROUPID; !group ID of command
INT TERMNUM; !terminal file number
INT RECVNUM; !$RECEIVE file number
STRUCT .CI^STARTUP; !Startup message
BEGIN
INT MSGCODE;
STRUCT DEFAULTS;