Jump Over Left Menu
Paper No 9: The FR80 Logging System
J M Rushby
25 September 1975
An automatic accounting system is being constructed for the FR80. This system collects data on the usage of the FR80 and will eventually produce punched card output for subsequent analysis. The products of this analysis will be the generation of an amount for each FR80 user, and also a statistical summary of the user and performance of the FR80.
2. OVERVIEW OF THE SYSTEM
The major component of the accounting system is the FR80 logging program. This program, called SYSLOG, runs in the FR80 and uses information provided by FR80 jobs and the FR80 operator, together with additional data which it generates internally, to construct LOG RECORDS which are then stored in a special LOG FILE maintained on the FR80 disc.
Periodically, the log file is dumped onto magnetic tape and transferred to the 1906A where it is processed by another program, called LOG ANALYZER, which generates the required punched card output.
3. AN INTRODUCTION TO SYSLOG
SYSLOG's function is to maintain a log of the activity of the FR80. This function is provided by means of two complementary sub-functions, called the EXTERNAL LOGGING FUNCTION and the INTERNAL LOGGING FUNCTION.
In its external logging capacity, SYSLOG simply acts as a centralised collecting point for externally supplied data. As jobs pass through the FR80, they provide SYSLOG with information about themselves - for example, their identity (username and jobname), and the type of output they are generating. It is no part of SYSLOG's task to analyse or process this externally supplied information in any way - it most1y stores the information away on the FR80 disc in an orderly and secure manner.
In its internal logging capacity, SYSLOG acts as a generator of information about FR80 jobs. The idea here is that each FR80 job informs SYSLOG when it starts and also when it finishes execution. SYSLOG notes the time which elapses between these two events, together with the amount of output produced. It then stores this internally generated information in the log file in just the same way as externally supplied information. When a job tells SYSLOG that it is about to start execution, it is said to LOG IN to SYSLOG, and conversely, when it notifies SYSLOG that it has finished, it is said to LOG OUT. The internal logging function of SYSLOG is invoked only when either of these two events occur.
4. MORE ABOUT SYSLOG
SYSLOG is an ordinary FR80 monitor program - just like the various displayers and print programs. Besides the usual monitor commands (TAPE TYPE, REWIND, GO etc), SYSLOG provides two additional sets of commands which we may call the LOGGING COMMANDS and the LOG UTILITY COMMANDS.
The only way of invoking either the internal or the external logging functions of SYSLOG is by means of the LOGGING commands. The LOG UTILITY commands mostly provide for the setting of certain switches in SYSLOG's private data area. These switches control such functions as the echoing or commands and the dumping of diagnostic information.
In order that they are able to communicate information to SYSLOG, all FR80 jobs are in fact composed of those sub-jobs. The job proper (that is the part of the job which actually produces the required graphics output) is called the PLOTTING JOB and appears on the FR80 data tape sandwiched between two LOGGING JOBS. These logging jobs cause the FR80 LOADGO system to pass control to SYSLOG which then processes the logging commands contained in them. The logging job which precedes the appearance of the plotting job is called the LEADING logging job, while that which follows the plotting job is called the TRAILING logging job. While any logging job may invoke the external logging function of SYSLOG, the leading logging job must also invoke the LOG IN function. Conversely, the trailing logging job must always invoke the LOG OUT function. Other logging jobs may appear anywhere on an FR80 data tape for the purpose of invoking (only) the external logging function.
The FR80 operators may communicate with SYSLOG for the purpose of logging jobs by hand, or in order to enter additional information about jobs which have been logged automatically.
5. THE LOGGING COMMANDS
Logging commands are just like ordinary FR80 monitor commands. That is, they consist of a COMMAND NAME followed by a SLASH, followed by a PARAMETER STRING (consisting of individual PARAMETERS, separated by COMMAS) and terminated by a carriage return. When SYSLOG receives a logging command, it is the command name which tells it whether this particular command should invoke either the internal or the external function, or both.
If the external function is required, SYSLOG merely attaches certain housekeeping information (for example, the time of day) to the parameter string supplied with the command, and stores the resulting log record in the log file.
Similarly, if the internal logging function is required, the command name will determine whether the job is to be logged IN or OUT, and will cause SYSLOG to take the appropriate action. This may involve either just the updating of certain internal tables, or the construction of an internally generated log record to be filed in the usual way.
6. THE LOGGING COMMANDS IN DETAIL
There are 9 logging commands provided by SYSLOG. Each is individually described below, and a summary appears at the end of the section.
The GSTART command invokes both the external logging function and the LOG IN function of SYSLOG. It is furthermore, the only way in which a job can log in. The GSTART command must appear exactly once in each loading logging job and must not appear elsewhere. It must not be issued by the FR80 operators. The specification of the parameter string of GSTART is given in FR80 Technical Paper 4 (19 April, 1975) and Hill not be repeated here.
(b) GEND/ and (c) SABEND/
Both of these commands invoke only the LOG OUT function of SYSLOG, and they are the only way in which a job may LOG OUT correctly. One (and only one) of them must appear in each trailing logging job and they may not appear elsewhere. They must not be issued by the FR80 operators.
Since these two commands do not invoke the external logging function, their parameter strings are not used in any way, and may therefore, consist of any character string, or be absent.
There is no functional distinction made between GEND and ABEND and they may be used interchangeably. It is intended, however, that the GEND command should be used in trailing logging jobs produced in the usual way (ie by the graphics package which generated the plotting job), while SABEND is to be used when a trailing logging job is generated abnormally (by a spooling system).
This abnormal circumstance occurs when a graphics job which is sending its output to a spooling system (rather than directly to tape) terminates prematurely (e.g when its time limit is exceeded), and is unable to generate the trailing logging job. The spooling system detects this omission and supplies the logging job (containing a SABEND command) itself.
Note that logging commands (d) to (i) invoke only the external logging function of SYSLOG.
(d) GCOMMENT/<any string>
This command may appear in any logging job on a LOADGO tape. It may not be used by the FR80 operators. Its purpose is simply to record any special or unusual circumstance detected by a graphics package or spooling system. The parameter string may consist of any text string.
(e) START TAPE/<tape information> and (f) END TAPE/<tape information>
These two commands are provided in SYSLOG for the purpose of collecting information about FR80 data tapes - for example, the tape type (7 or 9-track), serial number, and the time at which they were written by the host machine. It is left to LOG ANALYZER to specify the exact form which should be taken by the parameter string, and the way in which the commands should be used, These commands are intended to provide a means whereby statistical information (for example the average number of jobs per tape and the average delay between a tape leaving the host machine and being processed by the FR80) about FR80 operations may be collected automatically.
(g) LOG JOB/<username>,<jobname>,<time on>,<duration>,<frame count>,<sub-frame count>,<camera>
This command is to be used by the FR80 operators when a job must be logged manually, either because the automatic logging facilities have failed, or because the job did not invoke them (for example, jobs which use the print programs).
The parameters required are:
- the ordinary 1906A (or other) username (with the colon omitted)
- the jobname
- <time on>
- the time at which the job began execution on the FR80. in format HHMM (24 hours clock with midnight = 0000)
- the amount of FR80 time used by the job in format HHMMSS (eg 10 mins and 2 secs is recorded as 001002)
- <frame count>
- the number of frames of output produced
- <sub-frame count>
- the number of sub-frames of output produced
- the type of output generated described using ]906A SPOOL memories - CL16,HCM,MFCH etc
This command causes a job with username GSIN18, jobname JMR-M0P, which used 2 mins and 17 secs of FR80 time starting at 10.15 am, and which generated 10 frames and 37 sub-frames of hardcopy many-up output to be recorded in the log file.
(h) NO CHARGE/<username>,<jobname>,<reason>
This command is used by the FR80 operators when they decide that a previously logged job should not be charged for. This may occur when, for example, the output is spoilt or the job is run with make film equal to zero.
The username and jobname parameters are as described for the LOG JOB command, and serve to identify the job concerned. It is understood that the job referred to is the most recently logged job whose user and job names match that supplied with the NO CHANGE command.
The <reason> parameter may consist of any text string and should specify the reason for not charging for the job.
(i) COMMENT/<any text string>
This command should be used by the FR80 operators when they wish to insert additional information into the log file.
Note: THE PROMPTING FEATURE
The 3 commands LOG JOB, NO CHARGE and COMMENT are for use by the FR80 operator only. Because of the complexity and length of the parameter string which they require, and because the FR80 MONITOR system provides poor facilities for correcting typing mistakes, these three commands incorporate a prompting feature.
The prompting feature is activated when any of the three commands is entered with an empty parameter string. In this case, SYSLOG will prompt the operator for each parameter individually, giving explicit details of the information required in each case. If the parameter string is non-empty, however, it is copied to the log file in the normal way.
An example of a use of the prompting feature (operator input is underlined - the rest is system output).
MON; SYSLOGSJ *MONITOR LOG JOB/ USER NAME (NO COLON)? GSIN18 JOB NAME? JMR-MOP TIME ON (HHMM)? 1015 DURATION (HHMMSS)? 000217 FRAME COUNT? 10 SUB-FRAME COUNT? 37 CAMERA (BW135,CL16,PR16 ETC.)? HCM *OK
LOGGING COMMAND SUMMARY
|FUNCTION INVOKED||MAY BE ISSUED BY|
|EXTERNAL||LOG IN||LOG OUT||LEADING
7. THE LOG UTILITY COMMANDS
There are three of these commands. They are:
This command controls the echoing of logging commands onto the teletype. Echoing is turned on if m has the value 1, off it has any other value (or is absent). When the log file is created, echoing is set on by default. Only logging commands (a) to (f) are echoed (since commands (g) to (i) must be typed in from the teletype anyway), and the GSTART command is always echoed.
This is used to control the dumping of debugging information onto the teletype. Dumping is turned on if m equals 1, off otherwise. Dumping is off by default. The information dumped consists of:
- a copy of every log record sent to the log file.
- a running commentary on the state of the FR80 clock.
(c) RESET TIME/
This command may be used by the FR80 operator if he discovers that SYSLOG has got the time of day set wrongly. No parameter is required for this command - SYSLOG prompts for the data it requires.
The manner in which SYSLOG keeps track of the time of day is discussed in the next section.
8. HOW SYSLOG TELLS THE TIME
Core locations 6 and 7 in the FR80 function as an internal clock, incremented once every 1/60th second. SYSLOG attempts to maintain the correct time of day in these locations, that is it tries to ensure that these locations always contain a 36-bit integer whose value is the number of 1/60ths of a second which has elapsed since the previous midnight. Unfortunately, various FR80 programs (in particular DEBUG and DISC AUDIT) interface with this process, either by turning the clock off, or by corrupting the contents of the clock locations. SYSLOG attempts to detect this interference as follows:
When SYSLOG first gets control, it checks that the clock is ticking. It does this by noting the contents of location 7, then sitting in a loop for just over 1/60th sec and firstly checking to see if location 7 has been incremented correctly. If the clock is not ticking, SYSLOG issues a CLON (turn clock on) instruction and tries again. If the clock still fails to tick, it must be because the clock has been switched off by the operator. In this case, the operator is instructed to turn the clock on (by using the appropriate console switch) and SYSLOG will not process until he has done so.
SYSLOG also checks the position of console data switch 8 and refuses to proceed if this is on. This is necessary because the displayers will reset the clock to zero if they find switch 8 on. The displayers have all been patched so that the other functions invoked by switch 8 (eg correct fiche numbering) are provided automatically. When the print programs are run, however, (or when the displayers are run independently of LOADGO), switch 8 should be turned on. If an operator is in doubt over the correct position of switch 8, he should turn it on - SYSLOG will instruct him to turn it off if necessary.
In an attempt to detect corruption of the clock location, SYSLOG maintains, in its private data area, a record of the time at which it last wrote a log record to the disc. When next it needs to refer to the FR80 clock, SYSLOG checks that:
- the time indicated by the clock is not less than the previously noted time.
- that the difference between these two times is not greater than one hour
- that the time indicated by the clock is not greater than 24 hours
These checks are obviously insufficient to detect the situation in which the clock is stopped for a while and then restarted. However, it seems that in practice they work well enough.
Whenever SYSLOG is unhappy about the time indicated by the clocks it asks the operator to supply it. The operators should be urged to use a standard reference clock or watch when replying to such requests. The frequency of these requests for the time can be greatly reduced by not returning to DEBUG at the end of each tape. The last job on each tape should be a trailing logging job, and so it should be SYSLOG that has control when the end of tape is detected. The operator can then simply load a new tape and type GO/ to SYSLOG which will then continue processing with the new tape. (Note that there is no need to use SKIP/ in order to jump over the 1906A header record when using SYSLOG - in this sense it is superior to MON;SYS which now need only be used to start things off in the first place).
9. THE FORMAT OF LOG RECORDS
The log records which SYSLOG writes to the FR80 log file, and which are subsequently processed by LOG ANALYZER have the following format:
Log records are character strings which may be considered to consist of 5 major fields, namely:
- the LENGTH field
- the TYPE field
- the SEQUENCE CHECK field
- the TIME field
- the DATA field
The DATA field may be absent; all the other fields are always present in the order given above. The format of each field is described below.
9.1 The LENGTH Field
This occupies two character positions and contains an integer which specifies the total number of characters making up the record. The length field is always a decimal integer in the range 10 to 99 inclusive.
9.2 The TYPE Field
This is a single character field, containing a decimal digit which serves to identify the type of log record concerned. It is the type of a log record which informs LOG ANALYZER how the record, and in particular its data field, is to be interpreted.
Corresponding to each logging command which invokes the external logging function of SYSLOG, there is a unique type of log record. The correspondence is as follows:
LOG RECORD TYPE corresponds to LOGGING COHMAND 0 GSTART 1 GCOMMENT 2 START TAPE 3 END TAPE 4 LOG JOB 5 NO CHARGE 6 COMMENT
In addition, there are those types of log record which are internally generated. They are:
LOG RECORD TYPE IS CALLED 7 LOGOUT 8 ABEND 9 DATE
9.3 The SEQUENCE CHECK Field
This field also consists of just a single decimal digit. Its value is the ordinal number mod 10 within the log file of the record in which it appears. The first record in the file is considered to be number O. Thus:
The 1st record in the file has a sequence check of 0 The 9th record in the file has a sequence check of 8 The 10th record in the file has a sequence check of 9 The 11th record in the file has a sequence check of 0 The 20th record in the file has a sequence check of 9 etc.
The purpose of this field is to enable LOG ANALYZER to perform a limited check on the consistency of the log file. In particular, it will enable the detection of (a limited number of) missing or duplicated records.
9.4 The TIME Field
This field occupies 6 character positions and encodes the time of day at which the log record was created. The field may be considered to be composed of 3 sub-fields, each of 2 decimal digits, which contain the hour, the minutes and the seconds respectively. Each sub-field is recorded without leading zero suppression.
Thus, for example, a record created at 10 minutes and 7 seconds past 10 pm will have a time field containing:
Note that midnight is 000000, not 240000.
9.5 THE DATA FIELD
The format of the data field depends upon the type of log record in which it occurs.
(a) Data fields of record types 0 to 6
(a) The data fields of record types 0 to 6 inclusive (ie those produced by the external logging function) consist of an exact copy of the parameter string supplied with the logging command which caused the record to be generated. Thus the record should refer to the descriptions of the logging commands in order to determine the structure of the data fields of these record types.
The logging command:
might cause the following log record to be generated
33 0 7 184555 NSIN23,SMI-GWRMOP,8,0,0
(Note that we have used extra spacing to separate the fields of this record. This spacing is not present in a real log record - all the fields abut one another).
We see that this record is 33 characters long, that it is a type 0 (GSTART) record and that it has a sequence check digit: of 7. It was logged at 55 seconds past 6.45 pm. By referring to the description of the GSTART command, we see that it indicates that a job with username NSIN23 and jobname SMI-GWRMOP started execution on the FR80 at that time; and that the job was produced by SMOG on the ACL 1906A. We see also that it is generating type 8 (ie hardcopy, many-up) output.
In order to describe the data fields of log records types 7, 8 and 9, it is necessary to describe the circumstances in which these records are generated.
(b) THE LOGOUT RECORD (TYPE 7)
This type of record is generated when a job LOGS OUT from SYSLOG (ie when a GEND or SABEND command is encountered). The data field of this type of record consists of two decimal number strings, separated by a comma. The first number is the number of frames of output generated by the job, while the second is the number of sub-frames generated.
An example is:
14 7 4 191024 4 11
which indicates that a job which generated 4 frames and 11 sub-frames of output logged out at 24 seconds and 10 minutes past 7 pm.
This record type may also be generated (in abnormal circumstances) by the LOG IN function of SYSLOG (ie by a GSTART command). Discussion of this point is deferred until the next section.
(c) THE ABEND RECORD (TYPE 8)
When a job invokes the LOG IN function of SYSLOG by issuing a GSTART command, SYSLOG first checks whether a previous job is still logged in. If it is, an error situation has developed. (This situation occurs fairly often - for instance, the operator may start a job off and then find that the camera runs out of film part way through the job. He then reloads the camera and starts the job off again - and causes SYSLOG to encounter the loading logging job for the second time).
In this circumstance, SYSLOG first prints an error message:
*** ERROR - PREVIOUS JOB DID NOT LOG OUT
and then prints the amount of time and film used since the previous job logged in. SYSLOG then asks the operator whether or not these figures should be logged.
If he replies YES, then SYSLOG issues a normal LOGOUT record (type 7) as described above. If, on the other hand, the operator says NO - do not log them, SYSLOG will issue an ABEND (type 8) record. This record has no data field and its only purpose is to tell LOG ANALYZER that the job associated with the previous GSTART record is to be ignored.
An inverse error occurs when a job attempts to LOG OUT (via GEND or SABEND) at a time when no job is currently logged in. (This situation develops when an operator skips too far down a data tape and misses a loading logging job). In this circumstance, no LOGOUT or ABEND record is written to the log file (since the file will contain no GSTART record with which to associate it), but the frame counts are printed on the operators teletype. The operator is then asked whether he wishes to log the job himself. (This question is also asked after an ABEND record has been issued). If he replies YES, then a switch is set inside SYSLOG which wil1 cause it to return to MONITOR when the GO command is encountered. (This action is necessary in order to give the operator the opportunity to type in his LOG JOB command - otherwise LOADGO would just carry on processing the tape). When this return to MONITOR occurs, the operator is invited to log the job as he requested. SYSLOG will refuse to honour a GO command in this situation until a LOG JOB (or COMMENT) command has been issued.
In this way it is hoped to enforce the logging of all jobs.
(d) THE DATE RECORD
SYSLOG maintains a record of the current date. When the date changes, a type 9 (DATE) log record is written to the log file. This record is always 16 characters long and has a 6 character data field which records the day of the month, month of the year, and year of the century. Each of these sub-fields is recorded as a 2-digit decimal integer with no leading zero suppression.
16 9 0 172100 160975
This record was issued at 21 minutes past 5 pm on the 16 of September, 1975. It indicates that all subsequent data in the log file (up until the next type 9 record) was logged on that date.
10. LOG RECORD EXAMPLES
A portion of an actual log file is printed below. We will discuss the information contained in these records and describe how LOG ANALYZER should process them.
1690180600170975 3301180600NSIN23,SMI-GWRMOP,8,0,0 1082180800 3303180800NSIN23,SMI-GWRMOP,8,0,0 14741809064,11 4545181128GSIN18,JMR-MOP.1810,OOOO16,4,11,HCM 4256181237NSIN23,SMI-GWRRMOP,MAKE FILM ZERO 4367181329JUST A CO}MENT FROM THEE OPERATOR
We note that there are 8 records in this example and that the sequence check field is advancing correctly from record to record. We see that, (taking each record in turn):
- This portion of the log file was produced on the 17 September, 1975.
- A job with username NSIN23 and jobname SMI-GWRMOP, which was produced by SMOG on the ACL 1906A began generating many-up hardcopy output at 6 minutes past 6 pm.
- The job abended exactly 2 minutes later.
- The same job restarted at 8 minutes past 6 pm.
- It terminated normally 1 minute and 6 seconds later after producing 4 frames and 11 sub-frames of output.
- Then at 11 minutes and 28 seconds past 6 pm, the FR80 operator manually logged a job
with the following characteristics:
- its username was GSINI8
- its jobname was JMR-MOP
- it started execution at 10 past 6 pm and
- took 16 seconds of FR80 time to produce
- four frames and
- eleven sub-frames of
- many-up hardcopy output
- Then at 37 seconds and 12 minutes past 6 pm, the FR80 operator decided not to charge for the job NSIN23. SMI-GWRM0P because make film! was zero (ie no output was actually produced). Thus LOG ANALYZER should delete the charge made for the job accounted for in steps (d) and (e) above.
- Finally, the operator made a silly comment at 29 seconds past 6.13 pm.
11. THE LOG FILE
The log file is maintained on the FR80 disc under directory LOG and has the name LOGFIL LOGFIL. It is created by use of the program LOG;MAKE. RWW will produce documentation for this program.
The log file is a more or less normal FR80 symbolic file. However, the entire first block (the HEADER BLOCK) and 2 words of all other blocks are used for housekeeping information. This has implications for LOG ANALYZER which are classified later.
Log records are stored in character form in the log file. Two characters are packed into each word in standard FR80 format. Each record is terminated by a RETURN character (215 octal). This character always appears in the right-most byte of a word, so that every log record on the disc contains an even number of characters a blank character (240 octal) is inserted before the return character if necessary. The return character and the padding blank, if present, are not included in the length field of a log record since they will not be present when the log record reaches the 1906A.
The contents of the log file may be displayed on the FR80 monitor display, or on the teletype by using either the editor (never use the EC command on the log file), or the $SB or $S features of DISC AUDIT.
The log file is dumped onto mag tape by using the III mag tape dumper (SYS;S). It may then be transferred to the 1906A by using the FR80 facility (see RET). It can also be transferred to the PDPI5 (if this machine is working) by using MOVEIT. It can then be moved to the 1906A by using either the BSI or a modified version of LISTIT which creates 1906A filestore files (see JRG).
As mentioned earlier, the log file is not a completely standard symbolic file. When the file is transferred to the 1906A and interpreted as a character file this will have the following effects:
- The first 200 or so lines of the file contain junk (from the header block) mostly lines consisting of just the single character A. The beginning of the log records is indicated by a line containing the 5 characters "START".
- The two housekeeping words in each data block will cause an unpredictable number of spurious characters to appear in unpredictable locations within the log records.
This situation, particularly (b), is obviously unsatisfactory. Three possible solutions come to mind.
- Modify FR80 LIST to skip the housekeeping data when it writes the 1906A file.
- Write an FR80 program to convert the log file to a standard form before dumping to tape. (I think that simply zeroing the housekeeping information will do the trick since FR80 LIST and MOVEIT ignore zero's)
- Rewrite the disc utilities used by SYSLOG so that the housekeeping information is kept in a separate file, while the log file is kept as a clean symbolic file.
Alternatively, (b) is probably the simplest, although (c) is the most satisfactory solution. Method (c) would not necessitate any changes to SYSLOG since this program communicates with the disc only through the use of those macros provided by the disc utilities - namely:
GETHDR, PUTHDM and WLGREC
Modification to the physical disc layout need not change the specification of these macros.
12. THE ACTION OF SYSLOG ON A "GO" COMMAND
When it receives a GO command, either from the data tape, or from the FR80 operator, SYSLOG first checks to see whether it still has outstanding a request from the operator to issue a LOG JOB command. (See the discussion of the ABEND record in section 9.5 (c) for an explanation of this point). Provided that no such request is outstanding, SYSLOG backspaces the data tape by one record and then starts reading tape records in a forwards direction. The LOADGO system will interrupt this process when a filemark is detected and will pass control to another program.
The reason for backspacing the tape is to allow the FR80 operators to issue M0N;SYS type SKIP commands to SYSLOG. Ordinary FR80 programs (including SYSLOG) only cause a new program to be brought in by LOADGO when they encounter a filemark. MON;SYS works slightly differently, however, and the SKIP commands which the operators are used to using will position the tape after the filemark preceding the job which it is intended to process. This situation is handled correctly by MON;SYS, but other programs (including SYSLOG) would normally fail to detect the start of the new job. By backspacing, SYSLOG forces the filemark to be encountered during the subsequent forward read, and so solves the problem.
When a 1906A tape is positioned at load point, and SYSLOG is running, processing of the tape can be started by simply issuing a GO command. There is no need to SKIP over the 1906A header with SYSLOG. This procedure is particularly useful when dealing with tapes which have been copied using NUTS. These tapes seem to have the wrong parity filemarks, Which causes them to go undetected during a SKIP, but which are sensed correctly during a read. These tapes cannot be started off from MON;SYS using the SKIP to fi1emark command (SKIP/) but must be initiated using the SKIP/2 command. In contrast, SYSLOG can process these tapes correctly by simply typing GO as usual.
The new type of non-standard IBM tapes which will be generated by the 360/195 in the future can also be started from SYSLOG in this way.
Since DEBUG stops the clock, it is to the operators advantage to remain in SYSLOG as much as possible and not to return to DEBUG at the end of a tape - since this will involve them in having to re-enter the time to SYSLOG.
13. ASSEMBLING THE LOGGING SYSTEM
All the files necessary to create a new SYSLOG and a new MAKE are present on the tapes marked LOGGING SYSTEM TAPE (one is 7--track 800bpi, the other 9-track 1600bpi.
The sources for SYSLOG are in the directory JMR, and the main file is JMR;SYSLOG. To assemble a new SYSLOG, use SYS;R to WIPE the disc, then copy ALL or one or the logging system tapes onto the disc. Start the editor (E$J) and enter the main file (type ERJMR;SYSLOG). Then type EG to compile the program. This will create a binary file with the name MON;SYSLOG BINARY. (If this file is already present on the disc, it must be deleted before re-compiling as there is insufficient room on the disc).
The file JMR;SYSLOG contains the top level code for SYSLOG, and it explicitly inserts the three files:
JMR;SYSLOG SUBRS1 JMR;SYSLOG SUBRS2 JMR;SYSLOG SUBRS3
which contain the rest of the code. The file JMR;SYSLOG HACRO which contains SYSLOG's macro definitions is also inserted explicitly.
The disc file utilities written by RWW are included by inserting the file ROB;ROBLOG WLGREC, which in turn inserts various other files from directory ROB.
SYSLOG uses 7 words in the log file header block in order to record information which must be preserved from one run of the program to the next. These locations are defined in the file JMR;HDRBLK EQUIV which is inserted by ROB;ROBLOG STORE, which in turn is inserted by ROB;ROBLOG WLGREC.
The only interaction between SYSLOG and the disc file utilities are by means of the 4 macros:
GETHDR PUTHDR WLGREC FATAL
and the subroutine T.MSG8.
SYSLOG also explicitly inserts the following files from directory SYM which in turn insert many others:
III109 III166 IIll64 III163 III147 III183 IlI161 GO Ill161
The log file creation program is compiled in much the same way. Its main file is ROB;ROBLOG MS and it creates an object file called LOG;MAKE BINARY. This main file inserts various other files in ROB and SYM. (RWW will document this). It also inserts the file JMR;HDRBLK INIT which is responsible for assigning the initial values to the log file header block locations used by SYSLOG and defined in JMR;HDRBLK EQUIV.
14. THE LOGFILE HEADER BLOCK
As described earlier, SYSLOG keeps some of its private data in the log file header block. In fact 7 words of this block are used for the purpose. The location and initial values of these words are defined by the files JMR;HDRBLK EQUIV and JMR;HDRBLK INlT respectively. The names of these 7 locations are:
NEWFIL LASTT LASTD GSTIME SEQN ECHO DBUG
They are used as follows:
- NEWFIL contains a SKP instruction if the log file has not yet had a log record written to it. Otherwise it contains a NOP instruction. It is initialised to SKP.
- LASTT contains the time of day (in seconds since midnight) at which the last log record was written to the log file, or -1 (2's complement) if this is unknown. It is initialised to -1.
LASTD contains the current date, or -1 if this is unknown. The date is recorded by placing the day of the month in bits 2-6, the month of the year in bits 7-10 and the year of the century in bits 11-17 (the bits of a word are numbered 0-17 from most significant to least).
In other words,
LASTD = Year + month*128 + day*2048
so that, for example 1 April 1975 is:
75 + 4*128 + 2048 = 2635 (decimal)
LASTD is initialised to -1.
- GSTIME contains the time of day (in seconds since midnight) at which the last job LOGGED IN, or -1 if this is unknown. Jobs set GSTIME to -1 when they LOG OUT. GSTIME is initialised to -1.
- SEQN contains the sequence check to be used by the next record written to the file. Its initial value is 0.
- ECHO contains a SKP instruction if logging commands are to be echoed from tape to teletype, or a NOP if not. Its initial value is SKP.
- DBUG similarly controls the dumping of debugging information to the teletype, but its initial value is NOP.
15. THE LOGGING SYSTEM TAPES
- There are 2 tapes marked LOGGING SYSTEM TAPE. One is 7-track, the other 9-track. These tapes contain all the files needed to create a new logging system. In their directory MON they have a patched version of an FR80 displayer. This displayer will automatically set make film to zero if the console data switch 1 (in second from the left) is ON. This is useful for the purpose of testing a new logging system against an actual LOADGO tape.
- In addition, there is a 7-track tape marked LOG SOURCES DIRECTORIES JMR AND ROB. Which contain only the contents of the two directories JMR and ROB. This tape is useful for getting listings easily via the 1906A.
- There are two tapes numbered 803 in the FR80 area. One is 7-track. the other 9-track. Both contain a complete FR80 system for 7-track data tapes, including all the version 3.3 displayers.
- Note that when the operators need a 9-track displayer, they have to load it from a version 3.1 tape which contains a totally out of date version of SYSLOG.
16.1 SWITCH 6
When console data switch 6 is on, SYSLOG inhibits all of its logging functions (although it will still echo commands). Operator confirmation is always requested when switch 6 is found to be on, and if refused, logging proceeds normally. The ability to inhibit the logging activity in this way should be used with great caution.
On the following pages are given:
- The teletype output produced during a compilation of SYSLOG.
- A list of the commands available in SYSLOG.
- A listing of the directories of the logging system tapes.
- The punched card format required by Bill Jones for the accounts people.
A COMPILATION OF SYSLOG (Operator input is emphasised)
F$J MON SYSLOG$B E$J ERJMR;SYSLOG EG / SYSLOG - THE FR80 LOGGING PROGRAM ADDRESS OF END OF PROG IS 8099. CURRENT LABEL IS G00l16 ADDRESS OF END OF STRING POOL IS 15375. CURRENT LABEL IS G00117 / SYSLOG - THE FR80 LOGGING PROGRAM
A LIST OF SYSLOG'S COMMANDS
* *TIME=9:4'36.3" *FRAME=0 *GO *CONTINUE *MAKE FILM= 1 *CLEAR *ADVANCE *TAPE TYPE -2,5,8 OR 9=5 *BACK *PARlTY=1 *USE=l *REWIND *SKIP *TRY AGAIN=10 *HlTS-CHARS,VEC,PTS=1,1,1 *FOCUS *PULLDOWN=6 *LOAD-MONITO *ROTATION=O *GSTART *GEND *GCOMMMENT *SABEND *ECHO *DEBUG *START TAPE *END TAPE *LOG JOB *COMMENT *NO CHARGE *RESET TIME *
(a) LOGGING SYSTEM TAPE
18 SEP 75 VERSION S LOGGING SYSTEM - ALL SOURCES SYS;D BINARY 26(1) SYS;F BINARY 27(1) SYS;R BINARY 31(1) SYS;S BINARY 24(1) SYS;A BINARY 25(1) SYS;E BINARY 23(1) MON;SYSLOG BINARY 45(1) SYM;III109 29 SYM;III109 FR80 4 SYM;III109 CAMRA1 2 SYM;III109 CAMRA2 6 SYM;III147 9 SYM;III161 43 SYM;III161 GO 5 SYM;III166 72 SYM;III166 ADVAN 38 SYM;III166 INVAR 25 SYM;III166 SPEC 39 SYM;III166 TABLE 10 SYM;III162 13 SYM;III162 MACRO 1 SYM;III163 39 SYM;III164 24 SYM;III182 4 SYM;III183 41 SYM;III183 BUFFER 1 SYM;III188 9 SYM;III164 OCRB3 42 SYM;BINSYM 2 ROB;ROBLOG MS 15 ROB;ROBLOG T.MSG8 4 ROB;ROBLOG WLGREC 11 ROB;ROBLOG STORE 5 ROB;ROBLOG MACROS 3 ROB;ROBLOG SUBRTN 14 ROB;ROBLOG FATAL 3 ROB;ROBLOG ERRORS 3 SYM;SYSLOG 14 SYM;HDRBLK EQUIV 1 SYM;HDRBLK INIT 1 SYM;SYSLOG MACROS 6 SYM;SYSLOG SUBRS1 22 SYM;SYSLOG SUBRS3 20 SYM;SYSLOG SUBRS2 8 LOG;MAKE BINARY 22(1)
(b) LOG SOURCES DIRECTORIES JMR and ROB
18 SEP 75 DIRECTORIES JMR AND ROB - LOG SOURCES JMR;SYSLOG 14 JMR;HDRBLK EQUIV 1 JMR;HDRBLK INIT 1 JMR;SYSLOG MACROS 6 JMR;SYSLOG SUBRS1 22 JMR;SYSLOG SUBRS3 20 JMR;SYSLOG SUBRS2 8 ROB;ROBLOG MS 15 ROB;ROBLOG T.MSG8 4 ROB;ROBLOG WLGREC 11 ROB;ROBLOG STORE 5 ROB;ROBLOG MACROS 3 ROB;ROBLOG SUBRTN 14 ROB;ROBLOG FATAL 3 ROB;ROBLOG ERRORS 3
(c) TAPE 803
18 SEP 75 V3.3 DISPLAYERS WITH VS LOG SYS;D BINARY 30(1) SYS;F BINARY 28(1) SYS;R BINARY 34(1) SYS;S BINARY 26(1) SYS;A BINARY 26(1) SYS;E BINARY 28(1) SYS;M BINARY 23(1) SYS;COPY BINARY 19(1) LOG;MAKE BINARY 22(1) MON;SYS BINARY 23(1) MON;SYSLOG BINARY 45(1) HF; FRFO BINARY 54(1) HF ;FRFC BINARY 54(1) RF; FRFO BINARY 57(1) RF ;FRFC BINARY 54(1) MF; FRFO BINARY 54(1) MF ;FRFC BINARY 54(1) CF; FRFO BINARY 53(1) CF ;FRFC BINARY 53(1)
FR80 ACCOUNTS FORMAT
|NUMBER OF SUBFRAMES||999999||27-32||16|
|NUMBER OF FRAMES||999999||33-38||4|
|TYPE OF OUTPUT*||9||39||8|
|NUMBER OF TAPES||99||40-41||1|
1 = no charge
1 = external processing
* To be entered manually by FR80 operator
Type of Output
CL16 = 1 PR16 = 5 BW16 = 2 MFCM = 6 CL35 = 3 HCS = 7 BW35 = 4 HCM = 8