
      HED COMMAND TABLE 
* 
**
***   COMMAND TABLE 
**
* 
*  THIS TABLE CONSISTS OF TWO PARTS.  PART 1 CONTAINS THE ENCODED 
*  SYMBOLIC COMMANDS.  THESE ARE CODED AS THREE BYTES, EACH BYTE
*  BEING OF LENGTH 5 BITS AND OF OCTAL VALUE 101 LESS THAN THE
*  OCTAL VALUE OF THE CHARACTER.  THE THREE BYTES ARE IN BIT POSI-
*  TIONS 14-10,9-5, AND 4-0, RESPECTIVELY. BIT 15 IS SET TO 1 FOR 
*  COMMANDS THAT ARE LEGAL FOR THE SYSTEM CONSOLE.
* 
*  PART 1 IS ITSELF DIVIDED INTO 3 SECTIONS. COMMANDS IN SECTION 1
*  ARE THOSE COMMANDS WHICH ARE HANDLED IMMEDIATELY BY THE EXECUTIVE
*  WITHOUT ANY DISC ACCESS. THOSE IN SECTION 2 ARE COMPILER COMMANDS
*  WHICH ARE RESIDENT BUT WHICH REQUIRE THE PROGRAM TO BE LOADED
*  FROM DISC.  COMMANDS IN SECTION 3 ARE SYSTEM COMMANDS WHICH ARE
*  DISC RESIDENT.  ALL SYSTEM COMMANDS ARE OF THIS TYPE AND MUST BE 
*  LOCATED AFTER COM4.
* 
*  PART 2 OF THE COMMAND TABLE CONTAINS THE CORE STARTING ADDRESSES 
*  FOR THOSE COMMANDS IN SECTIONS 1 AND 2, AND THE TWO WORD DISC
*  ADDRESSES OF THOSE IN SECTION 3. 
* 
*  PART I 
* 
*  SECTION I
* 
COM1  OCT 44121     SCRATCH 
SCR   EQU COM1
      OCT 46017     TAPE
      OCT 24230     KEY 
* 
*  SECTION II 
* 
COM2  OCT 43215     RUN 
LIS   OCT 26422     LIST
PUN   OCT 37215     PUNCH 
XPUN  OCT 056764    XPUNCH
UCDAB OCT -1        FOR ABORT UPDATE CHANGE DATE
CTAPR OCT -1        USED FOR TAPE ERROR PRINTOUT. 
* 
*  SECTION III
* 
COM3  OCT -1        FOR LENGTH SECTION
      OCT -1        FOR TWO HALVES
      OCT -1          OF FUSS TABLE 
COMFL OCT -1        FOR FILES 
ASGNA OCT -1        ASSIGN
COMCH OCT -1        FOR CHAIN 
SAVE  OCT 44025     SAVE
CSAV  OCT 5100      CSAVE 
SAVO  OCT -1        FOR SAVE OVERLAY
      OCT 14223     GET 
      OCT 757       APPEND
HELLO OCT 16213     HELLO 
BYE   OCT 3404      BYE 
      OCT 24413     KILL
      OCT 42215     RENUMBER
      OCT 32014     NAME
CAT   OCT 004023    CATALOG 
      OCT 26401     LIBRARY 
      OCT 15056     GROUP 
      OCT 6421      DIRECTORY - USER CONSOLE
      OCT 42217     REPORT - USER CONSOLE 
      OCT 45140     STATUS - USER CONSOLE 
STA   OCT -1        STATUS OVERLAY - USER CONSOLE 
      OCT  6213     DELETE
      OCT 46414     TIME
      OCT 37056     PROTECT 
      OCT 50657     UNPROTECT 
OPE   OCT 34744     OPEN
      OCT 26215     LENGTH
      OCT 10107     ECHO
      OCT 030222    MESSAGE 
      OCT 26761     LPRINTER
      OCT 36721     PORT-USER CONSOLE 
COM4  EQU * 
      OCT 142217    REPORT - SYSTEM CONSOLE 
      OCT 106421    DIRECTORY - SYSTEM CONSOLE
      OCT 145140,-1 STATUS - SYSTEM CONSOLE 
      OCT 136721    PORT-SYSTEM CONSOLE 
ROS   OCT 142722    ROSTER
      OCT 100655    ANNOUNCE
      OCT 142222    RESET 
      OCT 104340    CHANGE
      OCT 144544    SLEEP 
      OCT 116401    HIBERNATE 
      OCT 132226    NEWID 
      OCT 124413    KILLID
      OCT 131215    MUNLOCK 
      OCT 130556,-1 MLOCK 
      OCT 104717    COPY
      OCT 102222    BESTOW
      OCT 137221    PURGE 
      OCT 130006    MAGTAPE 
      OCT 136356    PHO 
      OCT 137050    PRINTER 
      OCT 144744    SPEED 
      OCT 103044    BREAK 
      SKP 
* 
*  PART II -- STARTING ADDRESSES
* 
*  SECTION I
* 
COM5  DEF #SCR
      DEF #TAP
      DEF SCH20     KEY 
* 
*  SECTION II 
* 
      DEF CMPLE 
      DEF LIST
      DEF PUNCH 
      DEF XPNCH 
      DEF ABUCD 
      DEF TAPER 
* 
*  SECTION III
* 
*     THIS SECTION CONTAINS THE TWO WORD DISC ADDRESSES OF THE
*     LIBRARY ROUTINES.  THIS TABLE IS FILLED BY THE LOADER.
* 
COM6  BSS COM5-COM3+COM5-COM3 
      SPC 1 
FILIB EQU COM6-COM3+COMFL-COM3+COMFL    FILES 
CHLIB EQU COM6-COM3+COMCH-COM3+COMCH    CHAIN 
ASNIB EQU COM6-COM3+ASGNA-COM3+ASGNA    ASSIGN
      SPC 2 
DSERA BSS 8         ERROR MESSAGE DISC ADDRESSES
      SPC 2 
LOGGR BSS 64        HOLDS INFO FOR LOGGING
      HED LIBRARY SUBROUTINES 
* 
**   LIBRARY SUBROUTINE POINTERS AND TEMPORARIES
* 
LSTP1 BSS 1 
LSTP2 BSS 1 
LSTP3 BSS 1 
LSTP4 BSS 1 
LSTP5 BSS 1 
TECNT EQU LTEMP+5   = TABLE ENTRY COUNT (NEGATIVE)
DLPTR EQU LTEMP+11  => TO A TRACK LENGTH
DAPTR EQU LTEMP+12  => TO A TWO WORD DISC ADDRESS 
DALEN EQU LTEMP+13  = DISC ADDRESS LENGTH 
DADDR EQU LTEMP+14  CONTAINS A 2 WORD 
*                     EQU LTEMP+15    DISC ADDRESS
      SPC 2 
ADTAP DEF ADTAT     => TO ADT ADDRESS TABLE 
IDECL DEF IDEC+11   => LAST IDEC ENTRY TRACK LENGTH 
DFNAM DEF LIBUS+10176  DIRTY FILE NAMES BUFFER
LCDFC BSS 1         COUNT OF FILES TO BE CHECKED
DFCNT BSS 1         COUNT OF CHANGED (DIRTY) FILES
LCDID BSS 1         POINTER TO USER ID
LCDBS BSS 1         POINTER FOR LCD'S SEARCHES
MOVFB DEF MOVEB 
MOVFW DEF MOVEW 
DLOKA DEF DLOOK 
LOUTA DEF LOUT
LEN2A DEF LEND2 
DSCH7 DEF SCH7
DSYID DEF SYSID 
M8190 DEC -8190 
LFSPA OCT 5040
ZERSL ASC 1,0/
      SKP 
* 
**
***     FIND ADT
**
* 
*  THIS ROUTINE FINDS THE ADT THAT THE DISC ADDRESS CONTAINED IN
*  DADDR SHOULD GO INTO.  THE RETURNED RESULTS ARE: 
*         DAPTR => ADT DISC ADDRESS 
*         DLPTR => ADT LENGTH 
* 
FADT  NOP 
      LDA .-9       SET COUNT FOR 
      STA LSTP1       NUMBER OF ADTS
      LDA MHAD      A => DISC TABLES
      ADA .+48      START WITH LAST ENTRY 
FADT1 STA DAPTR     A => DISC TABLE ENTRY 
      DLD DAPTR,I   AB = FIRST ADDRESS ON THIS DISC 
      CLE,ERA       CONVERT 
      ERB             TO BLOCKS 
      JSB DASUB 
      SSA,RSS 
      JMP FADT3     RESULT POSITIVE, FOUND THE DISC 
      LDA DAPTR     RESULT NEGITIVE, MOVE 
      ADA .-6         TO PRECEEDING ENTRY 
      ISZ LSTP1 
      JMP FADT1     GO TRY NEXT DISC
FADT2 HLT DEATH+37B BETTER FIND DISC
      JMP *-1 
      SPC 1 
FADT3 LDA LSTP1 
      CMA 
      CPA .+8       CHECK FOR BAD 
      JMP FADT2       DISC ADDRESS
      MPY .+3       GENERATE TABLE
      ADA ADTAP       ADDRESS FOR DISC
      STA DAPTR         POINTER - AND 
      ADA .+2             POINTER FOR 
      STA DLPTR             DISC LENGTH 
      JMP FADT,I
      SKP 
* 
**
***     RETURN BLOCK TO ADT 
**
* 
*  THIS ROUTINE ADDS A BLOCK OF DISC SPACE BACK INTO THE ADT. 
*  THE ROUTINE ASSUMES THE FOLLOWING: 
* 
*        DADDR =  2 WORD DISC ADDRESS OF BLOCK TO BE ADDED
*        DALEN =  LENGTH OF THE BLOCK 
*        DAPTR => 2 WORD DISC ADDRESS OF ADT TRACK
*        DLPTR => LENGTH OF ADT TRACK 
* 
*        THE CORRECT ADT TRACK IS IN CORE 
* 
*  THE ROUTINE RETURNS WITH THE LENGTHS IN MWORD AND DLPTR,I BOTH 
*  UPDATED, BUT THE TRACK IS NOT WRITTEN OUT. 
* 
      SPC 1 
RBADT NOP 
      LDA DALEN     DON'T WASTE 
      SZA,RSS         TIME ON 
      JMP RBADT,I       ZERO LENGTH 
      LDA DLPTR,I   GET ADT LENGTH
      CMA,INA 
      ADA LIBD
      STA LSTP1     => END OF ADT TRACK 
      LDB LIBD      => BEGINNING OF ADT TRACK 
RADT1 STB LSTP2     B => CURRENT ENTRY
      CPB LSTP1     CHECK FOR END OF TRACK
      JMP RADT3     YES, INSERT ENTRY AT END
      DLD LSTP2,I   GET DISC ADDRESS FOR THIS ENTRY 
      JSB DASUB     SUB. FROM ADDRESS BEING RETURNED
      SSA           FAR ENOUGH? 
      JMP RADT2     YES, FOUND NEXT ENTRY GREATER 
      LDB LSTP2     NO, ADVANCE 
      ADB .+3         ADT POINTER 
      JMP RADT1         TO NEXT ENTRY 
* 
*         CHECK TO SEE IF THE NEW ENTRY IS
*         ADJACENT TO THE FOLLOWING ENTRY 
* 
RADT2 DLD DADDR     GET CURRENT DISC ADDRESS
      CLE 
      ADB DALEN     ADD LENGTH OF RETURNED BLOCK
      SEZ           CHECK FOR 
      INA             OVERFLOW
      CPA LSTP2,I   CHECK FOR MATCH 
      CLA,INA,RSS   FIRST WORDS ARE EQUAL 
      JMP RADT3     NO MATCH
      ADA LSTP2     CHECK SECOND
      CPB A,I         WORD FOR MATCH
      RSS           YES, COMBINE THE TWO ENTRIES
      JMP RADT3     NO, ENTRIES CAN'T BE COMBINED 
* 
*         COMBINE THIS ENTRY WITH THE NEXT ENTRY
* 
      DLD DADDR     REPLACE THE NEXT ENTRY WITH 
      DST LSTP2,I     DISC ADDRESS OF RETURNED BLOCK
      LDB LSTP2 
      ADB .+2       B => LENGTH OF ENTRY
      LDA DALEN     A = RETURNED LENGTH 
      ADA B,I       ADD RETURNED LENGTH 
      STA B,I         TO CURRENT LENGTH 
* 
*         CHECK TO SEE IF THE NEW ENTRY IS
*         ADJACENT TO THE PREVIOUS ENTRY
*         (DID RETURNED BLOCK BRIDGE THE GAP) 
* 
      LDA LSTP2     CHECK FOR NO
      CPA LIBD        PREVIOUS ENTRY
      JMP RBADT,I   NONE
      ADA .-1 
      STA LSTP1     => PREVIOUS ENTRY LENGTH
      ADA .-2 
      DLD A,I       = PREVIOUS ENTRY DISC ADDRESS 
      CLE 
      ADB LSTP1,I   ADD PREVIOUS LENGTH 
      SEZ             TO PREVIOUS ADDRESS 
      INA 
      CPA LSTP2,I   CHECK FOR FIRST WORD MATCH
      CLA,INA,RSS   FIRST WORDS ARE EQUAL 
      JMP RBADT,I   NO MATCH
      ADA LSTP2     CHECK SECOND
      CPB A,I         WORD FOR MATCH
      INA,RSS       => LENGTH OF COMBINED ENTRY 
      JMP RBADT,I   NO MATCH
* 
*         COMBINE PREVIOUS ENTRY WITH THE COMBINED ENTRY
* 
      LDB A,I       B = LENGTH OF COMBINED ENTRY
      ADA .-3       A => LENGTH OF PREVIOUS ENTRY 
      ADB A,I       SUM AND THEN
      STB A,I         UPDATE LENGTH 
      LDB LSTP2     NOW SET UP FOR MOVE 
      STB MOVED     COMBINED
      ADB .+3         ENTRY IS TO 
      STB MOVES         BE REMOVED
      ADB MLIBD     COMPUTE LENGTH
      ADB DLPTR,I     OF MOVE 
      JSB MOVFW,I   MOVE TABLE DOWN 
      LDA DLPTR,I   A = CURRENT ADT LENGTH
      ADA .+3       SHORTEN AND 
      STA DLPTR,I     UPDATE ADT
      STA MWORD     UPDATE LENGTH WORD
      JMP RBADT,I 
* 
*         NOT ADJACENT TO THE FOLLOWING ENTRY - 
*         CHECK FOR COMBINABILITY WITH PREVIOUS ENTRY 
* 
RADT3 LDA LSTP2     CHECK FOR NO
      CPA LIBD        PREVIOUS ENTRY
      JMP RADT4     NONE
      ADA .-1 
      STA LSTP1     => PREVIOUS ENTRY LENGTH
      ADA .-2 
      DLD A,I       = PREVIOUS ENTRY DISC ADDRESS 
      CLE 
      ADB LSTP1,I   ADD PREVIOUS LENGTH 
      SEZ             TO PREVIOUS ADDRESS 
      INA 
      CPA DADDR     CHECK FOR FIRST 
      RSS             WORD MATCH
      JMP RADT4     NO MATCH
      CPB DADDR+1   DO SECOND WORDS MATCH?
      RSS           YES, ENTRIES CAN COMBINE
      JMP RADT4     NO MATCH
      LDA DALEN     COMPUTE NEW 
      ADA LSTP1,I     LENGTH AND
      STA LSTP1,I       UPDATE ENTRY
      JMP RBADT,I 
* 
*         THE NEW ENTRY IS NOT ADJACENT TO
*         THE FOLLOWING OR PRECEEDING ENTRY - 
*         MOVE TABLE IF POSSIBLE AND INSERT 
* 
RADT4 LDB DLPTR,I   IF THERE IS NO RROM 
      CPB M8190       TO EXPAND THE ADT,
      JMP RBADT,I       THE SPACE IS LOST 
      CMB 
      ADB LIBD
      STB MOVES     SET UP FOR
      ADB .+3 
      STB MOVED       THE MOVE
      CMB,INB 
      ADB .+2 
      ADB LSTP2 
      JSB MOVFB,I   MOVE TABLE UP TO MAKE ROOM
      DLD DADDR     GET DISC ADDRESS AND
      DST LSTP2,I     SET INTO THE ADT
      LDB LSTP2 
      ADB .+2       GET LENGTH OF 
      LDA DALEN       NEW ENTRY AND 
      STA B,I           SET INTO ADT
      LDA DLPTR,I   INCREASE ADT
      ADA .-3         TRACK LENGTH
      STA DLPTR,I       THREE WORDS 
      STA MWORD 
      JMP RBADT,I 
      SPC 2 
* 
**
***   DISC ADDRESS SUBTRACTION
**
* 
*   THE TWO WORD DISC ADDRESS IN AB IS SUBTRACTED 
*   FROM THE DISC ADDRESS IN DADDR AND DADDR+1
* 
DASUB NOP 
      CMB,CLE,INB 
      CMA,SEZ 
      INA 
      CLE 
      ADB DADDR+1   ADD LOWER ADDRESS WORDS 
      SEZ 
      INA 
      ADA DADDR     ADD UPPER ADDRESS WORDS 
      JMP DASUB,I 
      SKP 
* 
**
***   RETURN TABLE TO ADT 
**
* 
*  THIS ROUTINE SCANS A TABLE AND PUTS DISC SPACE BACK INTO 
*  THE ADTS.  THE ROUTINE RETURNS ALL SPACE ON ONE ADT BEFORE 
*  WRITING IT BACK.  THE DISC ADDRESS OF EACH ENTRY IS ZEROED 
*  AS THE SPACE IS RETURNED.  THE FORMAT OF THE TABLE IS: 
* 
*         LIBUS+8192 / (ID) 
*                    / LENGTH 
*                    / DISC 
*                    /   ADDRESS
*                    .
*                    .
*                    .
* 
*         TECNT - CONTAINS THE NEGATIVE NUMBER OF ENTRIES 
* 
RTADT NOP 
RTAD1 LDA TECNT     GET ENTRY COUNT 
      STA LSTP3       AND SAVE IT 
      SZA,RSS       DON'T WASTE TIME
      JMP RTADT,I     ON A NULL TABLE 
      LDB L8192     LOAD TABLE BASE 
      INB           => DISC LENGTH OF FIRST ENTRY 
RTAD2 LDA B,I       GET LENGTH AND SAVE 
      STA DALEN       FOR FADT AND RBADT
      INB           => DISC ADDRESS 
      STB LSTP4     SAVE POINTER
      DLD B,I       GET THE DISC ADDRESS
      SZA,RSS       CHECK FOR 
      SZB             NULL ENTRY
      RSS           NON-ZERO ENTRY, RETURN SPACE
      JMP RTNUL     NULL ENTRY
      DST DADDR     SAVE DISC ADDRESS FOR FADT,RBADT
      CLA           PREVENT SECOND
      CLB             RETURN OF 
      DST LSTP4,I       SPACE 
      JSB FADT      FIND THE CORRECT ADT TRACK
      DLD DAPTR,I   CHECK FOR 
      IOR B           EXISTANCE 
      SZA,RSS           OF ADT TRACK
      JMP RTNUL     DOESN'T EXIST 
      LDA DLPTR,I   GET THE ADT'S LENGTH AND
      STA MWORD       SET UP FOR DISC TRANSFER
      LDA DAPTR     => DISC ADDRESS 
      STA LSTP5     SAVE POINTER
      LDB LIBDI     READ IN 
      JSB DISCZ,I     ADT TRACK 
      JMP RTDER     DISC ERROR
      JSB RBADT     RETURN BLOCK TO ADT 
RTAD3 ISZ LSTP3     CHECK COUNTER 
      JMP RTAD4     MORE ENTRIES
      LDA LSTP5     WRITE ADT                    [B]
      LDB LIBD        BACK TO 
      JSB DISCZ,I       DISC
      JMP RTDER     DISC ERROR
      JMP RTAD1     SCAN TABLE UNTIL EMPTY
      SPC 1 
RTAD4 LDB LSTP4 
      ADB .+3       => NEXT DISC LENGTH 
      LDA B,I       GET LENGTH AND SAVE 
      STA DALEN       FOR FADT AND RBADT
      INB           => DISC ADDRESS 
      STB LSTP4     SAVE UPDATED POINTER
      DLD B,I       GET DISC ADDRESS
      SZA,RSS       CHECK FOR 
      SZB             NULL ENTRY
      RSS           NON-ZERO, RETURN SPACE
      JMP RTAD3     NULL, GO TRY NEXT ENTRY 
      DST DADDR     SAVE ADDRESS
      JSB FADT      FIND THE CORRECT ADT TRACK
      LDA DAPTR     DOES THIS ENTRY GO
      CPA LSTP5       ON THE ADT TRACK
      CLA,RSS           CURRENTLY IN CORE?
      JMP RTAD3     NO - - DEFER
      CLB           YES - PREVENT 
      DST LSTP4,I     DOUBLE RETURNS
      JSB RBADT     RETURN BLOCK TO ADT 
      JMP RTAD3     PROCESS NEXT ENTRY
      SPC 2 
RTDER CLA           DISC ERROR DURING ADT I/O 
      CLB           REMOVE ADT
      STA DLPTR,I     TRACK FROM
      DST DAPTR,I       ADTAT 
      SPC 1 
RTNUL ISZ LSTP3     CHECK THE 
      RSS             COUNTER 
      JMP RTADT,I   DONE, NO MORE ENTRIES 
      LDB LSTP4     GET THE TABLE POINTER 
      ADB .+3       => NEXT DISC LENGTH 
      JMP RTAD2     TRY THIS ENTRY
      SKP 
* 
**
***   FIND IDT
**
* 
*  THIS ROUTINE FINDS WHICH ID TRACK THE SPECIFIED ID IS ON AND 
*  READS THAT TRACK INTO CORE.  ENTER WITH THE IDCODE IN ID. THE
*  RETURNED RESULTS ARE:
*              IDTAD => DISC ADDRESS OF IDT 
*              IDTLN => LENGTH OF ID TRACK
*              MWORD =  LENGTH OF ID TRACK
*              LSTP1 =0 IF ID NOT ON ANY TRACK
* 
FIDT  NOP 
      LDA .-3       INITIALIZE
      STA LSTP1       COUNTER 
      LDA IDECL     => LAST IDEC ENTRY TRACK LENGTH 
FIDT1 STA IDTLN     STORE IN POINTER
      LDB A,I       SKIP THIS ENTRY 
      ADA .-3 
      SZB,RSS         IF THE TRACK
      JMP FIDT2         LENGTH IS ZERO
      LDB A,I       = FIRST ID ON THIS TRACK
      CMB,INB 
      ADB ID        > OR < ?
      SSB,RSS 
      JMP FIDT3     FOUND THE TRACK 
FIDT2 ADA .-1       => NEXT TRACK LENGTH
      ISZ LSTP1     ANY MORE TRACKS?
      JMP FIDT1     YES 
      INA           NO, READ IN 1ST TRACK AS DEFAULT
* 
FIDT3 INA           => DISC ADDRESS 
      STA IDTAD     STORE IN POINTER
      LDB IDTLN,I   SET DISC DRIVER 
      STB MWORD       TRANSFER LENGTH 
      LDB LIBDI     READ IDT
      JSB DISCZ,I     FROM DISC 
      JSB SICKP,I   BAD NEWS
      JMP FIDT,I    RETURN
      SKP 
* 
**
***   SEARCH IDT
**
* 
*  THIS ROUTINE SEARCHES THE ID TRACK IN CORE FOR THE IDCODE
*  SPECIFIED BY ID, AND RETURNS WITH B POINTING TO IT.  IF B = 0, 
*  THEN THE IDCODE WAS NOT FOUND.  MWORD MUST EQUAL THE NEGATIVE
*  TRACK LENGTH.
* 
SIDT  NOP 
      LDB MWORD 
      CMB,INB 
      ADB LIBD      => EOT+1
      LDA ID        GET THE ID
SIDT1 CPB LIBD      START OF TABLE? 
      JMP SIDT2     YES, NO SUCH ID 
      ADB .-8       => NEXT ENTRY 
      CPA B,I       CHECK FOR ID
      JMP SIDT,I    FOUND IT
      JMP SIDT1     TRY NEXT ENTRY
* 
SIDT2 CLB           ID DOES NOT 
      JMP SIDT,I      EXIST, B=0
      SPC 3 
* 
**
***   GET CURRENT USER'S IDT
**
* 
*  GCIDT READS THE PROPER ID TRACK INTO CORE, SEARCHES IT FOR 
*  THE CURRENT USER'S ID, AND RETURNS WITH B POINTING TO IT.
*  IF B=0, THE USER LOGGED OFF OR HIS ID DOES NOT EXIST.
* 
GCIDT NOP 
      LDB MLINK+1 
      ADB .+?ID-?LINK 
      LDB B,I       GET USER'S ID 
      STB ID          AND SAVE IT 
      SZB,RSS       RETURN WITH B=0 IF
      JMP GCIDT,I     USER NOT LOGGED ON
      JSB FIDT      FIND ID TRACK 
      LDB LSTP1     RETURN WITH 
      SZB,RSS         B=0 IF TRACK
      JMP GCIDT,I       NOT FOUND 
      JSB SIDT      SEARCH ID TRACK 
      JMP GCIDT,I 
