ASMB,R,L,C
      HED LO.. SUBROUTINE TO LOAD PROGRAMS FROM A REMOTE NODE 
*     NAME:   LO..
*     SOURCE: 91750-18131 
*     RELOC:  91750-1X131 
*     PGMR:   GERRY BELDEN
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM LO..,7 91750-1X131 REV.2013 800316 L
* 
      SKP 
* 
      ENT LO..
* 
      EXT $LIBR,$LIBX,IDSGA,NAM..,$.LOA,.ENTR 
      EXT O.BUF,WRITF,CNUMD 
      EXT $ID#,$IDA 
      EXT $CKSM,IDMEM,.MVW
      EXT $FWBG,$BGBP,D$OVR 
      EXT #NCNT,SECUR,FINFO         
      EXT DOPEN,DREAD,DCLOS 
      SUP 
* 
* 
*  PURPOSE: 
*    TO ACCOMPLISH THE EQUIVALENT OF A FMGR ":RP,PROG" REMOTELY IN A
*    SUBROUTINE. CALL IS STANDARD "L-ACTION ROUTINE" FORMAT.
*    THE PROGRAM IS LOADED INTO MEMORY AFTER THE ID SEGMENT 
*    IS LOADED. LO.. WILL HANDLE R.T. PROGRAMS OR B.G. BUT
*    B.G. IS ONLY ALLOWED IF "LOAD/SWAP" IS NOT IN THE SYSTEM.
* 
*  WORDS SET BY LO..: 
* 
*     LONG ID SEGMENT 
*     7       PRIORITY CHANGED IF 0 TO 99 
*     13-15   PROGRAM NAME FROM LOAD FILE NAME
*     16      ID BIT ALWAYS LEFT RESET, MR BIT SET
*     28      DISC LU LEFT 0
* 
* 
*     SHORT ID SEGMENT
*     7       SEGMENT MAIN'S LOAD FILE BLOCK # FOR SEGLD
*     8       SHORT ID SEGMENT'S CHECKSUM (ONE'S COMPLEMENTED)
*             FOR SEGLD.
* 
      SKP 
DUMMY NOP 
NAME  NOP 
ER    NOP 
LO..  NOP           ENTRY POINT 
      JSB .ENTR 
      DEF DUMMY     GET PARAMETERS
      LDA NAME      ADVANCE TO
      INA             THE NAME
      STA ANAME     MOVE THE NAME 
      LDB ER          TO THE 2ND
      INB               THROUGH 4TH 
      JSB .MVW            RETURN PARAMETERS 
      DEF D3
      NOP 
* 
      LDA ANAME,I 
      AND B77       TEST FOR LU 
      CPA ANAME,I 
      JMP ERR00     ANY LU IS ILLEGAL ! 
      LDA #NCNT     IS THIS NODE INITIALIZED ?
      SZA,RSS       YES -- GO OPEN FILE 
      JMP ERR01     NO -- DSPLY MSG & ABORT 
* 
      CLA,INA       TURN ON REMOTE SESSION
      STA D$OVR      OVERIDE FOR FILE ACCESS
      JSB DOPEN     OPEN THE ABS INPUT FILE 
      DEF *+7 
      DEF DCB 
      DEF IERR
ANAME NOP           A(FILE NAME)
      DEF D4        FORCE FILE TO TYPE 1
      DEF SECUR     SECURITY CODE 
      DEF FINFO     CRN & FILE NODE (2 WORDS) 
      LDA IERR      ANY ERROR ? 
      SSA 
      JMP ERR50     RFA ERROR 
      SKP 
* 
*     WORK ON LONG ID 
* 
      JSB DREAD     READ IN SKELETON ID 
      DEF *+6 
      DEF DCB 
      DEF IERR
DEFID DEF IDBUF 
      DEF D34       LENGTH OF ID + 4 EXTRA WORDS
      DEF LEN 
* 
      LDA IERR      ANY ERROR ? 
      SSA 
      JMP ERR50     RFA ERROR 
* 
      CLA,CCE       CLEAR SUM TOTAL 
      JSB SUM       CALCULATE CHECKSUM
      DEF IDBUF 
      DEC -31 
      CPA ID+32     EQUAL TO WORD 32 ?
      CLA,RSS       YES 
      JMP ERR12     NO
      LDA $CKSM     GET SYSTEM CHECKWORD
      CPA ID+31     COMPARE ? 
      RSS 
      JMP ERR12 
* 
*     TEST FOR BACKGROUND PROGRAM - IF SO, ONLY LEGAL 
*      TO LOAD IF 'LOAD' & 'SWAP' MODULES NOT IN SYSTEM 
*      AND NO OTHER BG PROGRAM IS LOADED
* 
      LDA $FWBG     START OF BACKGROUND 
      CMA,INA       COMPARE WITH LOW MAIN 
      ADA ID+21 
      SSA 
      JMP LO..1     REAL TIME SO OK 
      LDA $ID#      GET NEGATIVE NUMBER 
      CMA,INA         OF ID SEGMENTS
      STA LPCNT         FOR COUNTER 
      LDB $IDA      POINT TO LO MAIN ADDRESS
      ADB D20         OF FIRST ID SEGMENT 
LO..5 LDA B,I       IS THIS 
      CPA $FWBG       A BACKGROUND PROGRAM? 
      RSS             YES 
      JMP LO..6     NO, NO PROBLEM
      ADB M8        YES, GET FIRST WORD 
      LDA B,I         OF NAME 
      SZA           NON-ZERO? 
      JMP ERR40     YES, PROGRAM CONFLICT 
      ADB D8        NO, GO BACK TO LOW MAIN ADDRESS 
LO..6 ADB D30       ADVANCE TO NEXT ID SEGMENT
      ISZ LPCNT     MORE TO DO? 
      JMP LO..5     YES 
      LDA $.LOA     'LOAD MODULE IN SYSTEM' FLAG
      SZA           0 IS YES
      JMP LO..2     BACKGROUND OK ! 
      JMP ERR13     ILLEGAL BG LOAD ATTEMPT 
* 
*     TEST FOR SEGMENTED PROGRAM AND IF SO RAISE HIGH 
*      MAIN TO LIMIT OF REAL-TIME AREA FOR PROGRAM
*      CONFLICT CHECKS LATER. 
* 
LO..1 LDA ID+24     FIND # OF SEGMENTS
      AND B176K 
      SZA,RSS 
      JMP LO..2     NONE
      LDA $FWBG     YES, CHANGE UPPER LIMIT 
      STA ID+33 
      LDA $BGBP     ALSO OF BASE PAGE 
      STA ID+34 
      SKP 
* 
*     SET UP PROGRAM NAME 
* 
LO..2 JSB NAM..     CHECK FOR LEGAL NAME
      DEF *+2 
      DEF ANAME,I   PROGRAM NAME IS FILE NAME 
      SZA           NAME OK ? 
      JMP ERR00     NO
      LDB ANAME     GET 1ST 2 CHARS OF NAME 
      LDA B,I 
      STA ID+13     SAVE THEM 
      INB 
      DLD B,I       NOW GET THE REST
      STA ID+14 
      LDA B         LAST CHAR.
      AND UBYTE     CLEAR LOWER BYTE
      STA ID+15 
* 
*     CHECK PRIORITY, SET TO 99 IF 0
* 
      LDA ID+7      GET PRIORITY
      SZA,RSS       TEST FOR ZERO 
      LDA D99        IF SO SET IT TO 99 
      STA ID+7
* 
*     GO PRIVILEGED TO WRITE THE ID SEGMENT 
* 
      JSB $LIBR 
      NOP 
* 
      JSB IDSGA     SEARCH FOR DUPLICATE PROGRAM NAMES
      DEF *+2 
      DEF ANAME,I 
      SEZ,CME       IF NOT FOUND, CLEAR E-REG           
      JMP RTPRG      AND CHECK MEMORY BOUNDS          
      LDA M61       SET ERROR 
      STA ER,I        CODE
      DLD DUP       IF FOUND, RETURN DUPLICATE ERROR
      JMP PEXIT      WITH E-REG = 1 
* 
*     TEST FOR REAL-TIME PROGRAM MEMORY CONFLICT
* 
RTPRG JSB IDMEM     TEST FOR REAL-TIME MEMORY BOUNDS
      DEF *+2         CONFLICTS 
      DEF IDBUF     PASS IT THE BUILT UP ID SEGMENT 
      CCE,SZA,RSS   IF NO CONFLICT FOUND (OR NOT R.T.)
      JMP SERCH      THEN SEARCH FOR FREE ID SEG. 
      LDB A         PUT NAME ADDRESS IN B 
      CLA            & FLAG SPECIAL 'REMOVE' MESSAGE
      JMP PEXIT      WITH E-REG = 1 
      SKP 
* 
*     SEARCH FOR FREE ID SEGMENT
* 
SERCH JSB IDSGA     CALL FOR MATCH OF BLANK NAME
      DEF *+2 
      DEF ZERO      ARRAY OF THREE ZEROS
      SEZ,RSS       IF FOUND, GO MOVE ID DOWN 
      JMP MOVE
      LDA M64       SET ERROR 
      STA ER,I        CODE
      DLD NOID      OTHERWISE 'NO ID' MESSAGE & EXIT
      JMP PEXIT      E-REG = 1
* 
*     MOVE ID SEGMENT INTO SYSTEM 
* 
MOVE  STA B         SAVE COPY OF ID ADDRESS 
      STB IDSEG     SAVE FOR COMPLETION 
      LDA DEFID     SET A TO SOURCE (B TO DEST.)
      JSB .MVW      MOVE THE ID SEGMENT 
      DEF D30 
      NOP 
      CLA,CLE       SET UP FOR GOOD RETURN
PEXIT JSB $LIBX     DONE! 
      DEF *+1 
      DEF LO..3 
* 
LO..3 SEZ,RSS       CHECK FOR AN ERROR
      JMP LO..4     NONE
      SZA           'REM' ERROR ? 
      JMP ERR30     ID SEG ERROR
      JMP ERR40     MEMORY CONFLICT ('REM') 
      SKP 
* 
*     LOAD BASE PAGE
*      FIND BLOCK # OF BP, POSITION FILE PTR, LOAD IT 
* 
LO..4 LDA D2        SET SECTOR POINTER
      STA SECTR       TO START OF MAIN
      LDA ID+22     HIGH MAIN 
      STA HMAIN 
      LDB ID+21     LOW MAIN
      STB LMAIN 
      JSB BUMP      GET NEXT BLOCK #
      LDA SECTR     SET UP FILE POSITIONING 
      STA IREC
      LDA ID+24     LOW BASE PAGE 
      STA LBSPG 
      AND BPMSK      (B1777)
      LDB A 
      LDA ID+25     HIGH BASE PAGE
      STA HBSPG 
      JSB LODIT     LOAD IT ! 
* 
*     LOAD THE MAIN 
* 
      LDA D2        BLOCK # OF MAIN 
      STA IREC      SET UP FILE POSITIONING 
      LDA HMAIN     HIGH MAIN 
      LDB LMAIN     LOW MAIN
      JSB LODIT     LOAD IT ! 
      SKP 
* 
*     SET UP BLOCK NUMBERS OF SEGMENT MAINS & PLACE IN
*       SHORT IDS 
* 
      LDA LBSPG     FIND # OF SEGMENTS
      ALF,ALF 
      RAR,RAR 
      AND B77 
      SZA,RSS       ARE THERE ANY ? 
      JMP DONE      SET MR BIT & EXIT 
      CMA,INA       NEGATE & SAVE AS LOOP COUNT 
      STA LPCNT 
      LDA LMAIN     LOW MAIN ADDRESS (1ST SHORT ID) 
      STA SEGAD     SAVE FOR CHECKSUM 
* 
*     FIND BLOCK # OF 1ST SEGMENT MAIN
* 
      LDA LBSPG     LOW BP ADDRESS
      AND BPMSK 
      LDB A 
      LDA HBSPG     HIGH BP 
      JSB BUMP      SECTR NOW IS BLOCK # OF 1ST 
*                                    SEGMENT MAIN 
* 
*     FIX UP SHORT IDS
* 
LOOP  LDB SEGAD     CURRENT SHORT ID
      STB SIDAD     SAVE FOR CHECKSUM CALL
      ADB D4
      STB TEMP      SAVE A(SEG HIGH MAIN) 
      ADB D2
      STA B,I       SAVE SEG MAIN BLK# (FROM BUMP CALL) 
      INB           POINT TO CHECKSUM WORD
      STB SEGAD 
      CLA 
      JSB SUM       DO CHECKSUM 
SIDAD NOP 
      DEC -7
      CMA           DS REQUIRES ONE'S COMPLEMENT
      STA SEGAD,I 
      ISZ SEGAD     NEXT SHORT ID 
      LDA TEMP,I    SEGMENT HIGH MAIN+1 
      LDB HMAIN     SEGMENT START ADDRESS 
      JSB BUMP      ADVANCE FILE BLOCK #
      ISZ TEMP      A(HIGH BASE PAGE+1) 
      LDA TEMP,I
      LDB HBSPG     SEG. B.P. START 
      JSB BUMP      ADVANCE FILE BLOCK #
*                                    (BLOCK # FOR NEXT SEG IN A)
      ISZ LPCNT     DONE ?
      JMP LOOP
      SKP 
* 
*     SET UP DS RESERVED AREA FOLLOWING SHORT IDS 
* 
      LDA ANAME     PICK UP 6TH CHAR OF FILE NAME 
      ADA D2
      LDA A,I 
      AND B377
      STA SEGAD,I   PLACE IN 1ST WORD OF BLOCK
      LDB SEGAD     BLOCK ADDRESS 
      STB TEMP      SAVE FOR CHECKSUM 
      ISZ SEGAD     POINT TO 2ND WORD 
      LDA SECUR     SAVE FILE SECURITY CODE 
      STA SEGAD,I 
      ISZ SEGAD     3RD WORD
      DLD FINFO     SAVE FILE CRN & NODE #
      DST SEGAD,I 
      CLA           CLEAR CHECKSUM
      JSB SUM 
TEMP  NOP           START ADDR OF RESERVED BLOCK
      DEC -7
      CMA           ONE'S COMPLEMENT FOR DS SEGLD 
      LDB SEGAD 
      ADB D5        POINT TO CHECKSUM WORD
      STA B,I       SAVE IT 
      SKP 
* 
*     DONE LOADING & FIXING UP SEGMENTS AS WAS REQUIRED 
*      - NOW DO CLEANUP & EXIT
* 
DONE  DLD DNMSG     MESSAGE ADDRESS 
      DST MESS1 
      LDA AD5       A(LENGTH) 
      STA LENGT     A(MESSAGE LENGTH) 
      JSB MSOUT     DISPLAY THE MESSAGE 
      LDB IDSEG     FIND ADDRESS OF ID SEG STATUS WRD 
      ADB D15 
      JSB $LIBR     GO PRIVELEGED 
      NOP 
      LDA B,I 
      IOR SBIT      SET MR BIT (#15)
      STA B,I 
      JSB $LIBX 
      DEF *+1 
      DEF EXIT
* 
*     EXIT
* 
EXIT  JSB DCLOS     CLOSE INPUT FILE IF ANY 
      DEF *+3 
      DEF DCB 
      DEF IERR
* 
      CLA           TURN OFF SESSION OVERIDE
      STA D$OVR 
      JMP LO..,I
      SKP 
* 
*     ERROR PROCESSING
* 
ERR00 LDA M65       SET ERROR 
      STA ER,I        CODE
      DLD BDNM      ILLEGAL FILE NAME 
      JMP ERR30 
ERR01 DLD NODE      NODE NOT INITIALIZED
      JMP ERR30 
ERR12 LDA M66       SET ERROR 
      STA ER,I        CODE
      DLD CKSM      ID CHECKSUM OR SYSTEM 
      JMP ERR30      CHECKWORD MISMATCH 
ERR13 LDA M62       SET ERROR 
      STA ER,I        CODE
      DLD NOBG      ILLEGAL ATTEMPT TO LOAD BG
* 
ERR30 DST MESS1     SAVE IN MESSAGE BUFFER
      LDA AD5        STANDARD LENGTH
ECONT STA LENGT     SAVE LENGTH DEF 
      JSB MSOUT 
      DLD ABORT     LOAD ABORT MESSAGE
      DST MESS1     SAVE IT 
      LDA AD5 
      STA LENGT     LENGTH OF MESSAGE 
      JSB MSOUT 
      JMP EXIT      ALL DONE
* 
*          * REMOVE CONFLICTING PROGRAM * 
*     ENTERED WITH B POINTING TO NAME OF PROGRAM
*      TO BE REMOVED
* 
ERR40 LDA B         REMOVE PROGRAM: MEMORY BOUNDS 
      LDB AMES2      CONFLICT 
      JSB .MVW      MOVE THE NAME TO MSG BUFFER 
      DEF D3
      NOP 
      LDA AMES2     ALSO MOVE TO
      LDB ER          RETURN PARAMETERS 
      INB               2 THROUGH 4 
      JSB .MVW
      DEF D3
      NOP 
      LDA M60       SET ERROR 
      STA ER,I        CODE
      DLD REM       'REMOVE' MESSAGE
      DST MESS1 
      LDA AD8       MESSAGE LENGTH
      JMP ECONT     OUTPUT IT 
* 
*     RFA / DS ERROR EXIT 
* 
ERR50 LDA IERR      GET RFA ERROR 
      STA ER,I      SET IT FOR APLDR
      CMA,INA        & MAKE IT POSITIVE 
      STA IERR
      JSB CNUMD     CONVERT TO ASCII
      DEF *+3 
      DEF IERR
      DEF MESS1     MESSAGE BUFFER
      DLD ERMSG     OVERLAY MSG ONTO 1ST
      DST MESS1      TWO WORDS OF BUFFER
      LDA AD6 
      JMP ECONT 
      SKP 
* 
*     ERROR MESSAGES
* 
BDNM  ASC 2,BDNM
NODE  ASC 2,NODE
ERMSG ASC 2,ERR-
CKSM  ASC 2,CKSM
DNMSG ASC 2,DONE
ABORT ASC 2,ABRT
REM   ASC 2,REM 
DUP   ASC 2,DUP 
NOID  ASC 2,NOID
NOBG  ASC 2,NOBG
      SKP 
* 
* BUMP - BUMP BLOCK NUMBERS TO POINT AT THE VARIOUS MAINS, BASE 
*        PAGES, AND SEGMENTS CONTAINED WITHIN A TYPE 6 FILE.
* 
* 
*     CALLING SEQUENCE: 
*                       A = HIGH ADDRESS + 1
*                       B = LOW ADDRESS 
*                       JSB BUMP
* 
*     ON RETURN:        A = BLOCK #   AND  SECTR = BLOCK #
*                       B IS DESTROYED
* 
* 
BUMP  NOP 
      CMB,INB       SET THE LOW ADDRESS NEGATIVE
      ADA B         AND ADD TO HIGH ADDRES. 
      CLB           CLEAR FOR DIVIDE
      DIV D128      FIND # OF BLOCKS
      SZB           IF REMAINDER IS ZERO OK 
      INA            OTHERWISE, ADD 1 MORE BLOCK
      ADA SECTR     CURRENT + OLD 
      STA SECTR 
      JMP BUMP,I    RETURN
      SKP 
* 
*     MESSAGE OUTPUTTER 
* 
MSOUT NOP 
      CLA           TURN OFF OVERIDE TEMPORARILY
      STA D$OVR 
      JSB WRITF     OUTPUT  THE MESSAGE 
      DEF *+5 
      DEF O.BUF 
      DEF IERR
      DEF MESSG 
LENGT NOP 
      CLA,INA       TURN SESSION OVERIDE BACK ON
      STA D$OVR 
      JMP MSOUT,I 
* 
* 
MESSG ASC 3, LOAD 
MESS1 BSS 2 
MESS2 BSS 3 
AMES2 DEF MESS2 
      SKP 
* 
*     LODIT - LOAD MEMORY FROM A REMOTE FILE
* 
*     LODIT LOADS PROGRAM OR BASE PAGE FROM A REMOTE FILE AS
*     FOLLOWS:  IT TAKES THE HIGH & LOW LOAD ADDRESSES FROM 
*     THE A & B REGISTERS, THE STARTING LOAD FILE RECORD #
*     FROM IREC AND TRANSFERS THE DATA BLOCK BY BLOCK UNTIL 
*     COMPLETE. THE FILE MUST BE AN ALREADY OPENED TYPE 6 
*     FILE (FORCED TO TYPE 1) AND NO CHECKING IS DONE AS TO 
*     WHETHER THE HIGH & LOW LOAD ADDRESSES ARE CORRECT.
* 
*     CALLING SEQUENCE: 
*                        A = HIGH ADDRESS + 1 
*                        B = LOW ADDRESS
*                        IREC = LOAD FILE RECORD #
* 
*                        JSB LODIT
*     ON RETURN:
*                        CONTENTS OF BOTH REGS. DESTROYED 
* 
LODIT NOP 
      STA HIHAD     SAVE HIGH ADDRESS 
      LDA D128      INITIALIZE TRANSFER SIZE
      STA SVAMT 
* 
*     READ / LOAD LOOP
* 
LODLP STB LOWAD     SAVE LOW ADDRESS
      CMB,INB 
      ADB HIHAD     HIGH - LOW
      SZB,RSS       ANYTHING LEFT ? 
      JMP LODIT,I   NOPE, DONE !
      SSB 
      JMP LODIT,I   DONE !
      LDA D128      LESS THAN 128 WORDS LEFT ?
      CMA,INA 
      ADA B 
      SSA 
      STB SVAMT     YES, ONLY TRANSFER REMAINDER
* 
      JSB DREAD     READ IN A BLOCK 
      DEF *+7        (OR PARTIAL BLOCK) 
      DEF DCB 
      DEF IERR
      DEF IDBUF     INPUT BUFFER
      DEF SVAMT     # WORDS (</= 128) 
      DEF LEN       # WORDS READ
      DEF IREC      1ST RECORD REQ'D OR 0 
* 
      LDA IERR
      SSA 
      JMP ERR50     RFA ERROR 
      SKP 
* 
*     MOVE PROGRAM TO FINAL DESTINATION 
* 
      LDA AIDBF     SOURCE
      LDB LOWAD     DESTINATION 
      JSB $LIBR     GO PRIVILEGED 
      NOP 
      JSB .MVW
      DEF SVAMT     # WORDS 
      NOP 
      JSB $LIBX     BACK TO NORMAL STATE
      DEF *+1 
      DEF *+1 
* 
      CLA           PREPARE TO READ NEXT
      STA IREC       SEQUENTIAL RECORD
      LDB LOWAD     CALCULATE NEW LOAD ADDRESS
      ADB SVAMT 
      JMP LODLP     CONTINUE
      SKP 
* 
*     SUM - USED TO SUM THE WORDS IN ID SEGMENTS FOR CHECKSUM TESTS 
* 
SUM   NOP           P+1 = ADDRESS, P+2 = NEGATIVE NUMBER OF 
      LDB SUM,I                           WORDS TO SUM
      ISZ SUM 
      STB #MOVE     SAVE START SUMMING ADDRESS
      LDB SUM,I     GET NUMBER OF WORDS 
      ISZ SUM       POINT TO RETURN ADDRESS 
      ADA #MOVE,I   ACCUMULATE THE SUM
      ISZ #MOVE     BUMP TO NEXT WORD 
      INB,SZB       DONE ?
      JMP *-3       NO, ADD THE NEXT
      JMP SUM,I 
      SKP 
* 
*     CONSTANTS 
* 
ZERO  DEC 0         DO NOT CHANGE THE NEXT 3
      DEC 0           LOCATIONS !!! 
      DEC 0 
* 
M66   DEC -66 
M65   DEC -65 
M64   DEC -64 
M62   DEC -62 
M61   DEC -61 
M60   DEC -60 
M8    DEC -8
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
D5    DEC 5 
D6    DEC 6 
D8    DEC 8 
D15   DEC 15
D20   DEC 20
D30   DEC 30
D34   DEC 34
D99   DEC 99
D128  DEC 128 
B176K OCT 176000
B77   OCT 77
B377  OCT 377 
UBYTE OCT 177400
BPMSK OCT 1777
SBIT  OCT 100000
* 
AD5   DEF D5
AD6   DEF D6
AD8   DEF D8
* 
*     VARIABLES 
* 
IERR  NOP           WRITF OR RFAM ERRORS
LPCNT NOP           # SEGMENTS IN LOADED PROGRAM
IDSEG NOP           ADDRESS OF PROGRAM ID SEGMENT 
DCB   BSS 4         DS DCB FOR RFAM 
IDBUF BSS 128       LONG ID SEG & LD FILE WORK AREA 
LEN   NOP           RETURN LENGTH FROM DREAD
SECTR NOP           FILE BLOCK # POINTER
IREC  NOP           LOAD FILE READ INDICATOR
SEGAD NOP           CURRENT SHORT ID MEMORY ADDR
HIHAD NOP           HIGH LOAD ADDRESS + 1 
LOWAD NOP           LOW LOAD ADDRESS
SVAMT NOP           LOAD TRANSFER SIZE
#MOVE NOP           USED BY SUM 
LMAIN NOP           LOW MAIN ADDRESS
HMAIN NOP           HIGH MAIN + 1 
LBSPG NOP           # SEGS / LOW BASE PAGE
HBSPG NOP           HIGH BASE PAGE
* 
AIDBF DEF IDBUF 
* 
ID    EQU IDBUF-1 
A     EQU 0 
B     EQU 1 
END   EQU * 
      END 
                                                                                                          