ASMB,R,L,C
      HED PLOS 91700-16101 REV A * (C) HEWLETT-PACKARD CO. 1976 
      NAM PLOS,2,30 91700-16101 REV A 760329
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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.       *
******************************************************************
      SPC 2 
      SPC 1 
**************************************************
* 
*PLOS PROGRAM LOAD SAVE FOR BASIC 
* 
*SOURCE PART #      91700-18101 REV A 
* 
*REL PART #         91700-16101 REV A 
* 
*WRITTEN BY:        LARRY POMATTO 
* 
*DATE WRITTEN:      12-17-74
* 
*MODIFIED BY        JEAN-PIERRE BAUDOUIN
* 
*DATE MODIFIED:     DECEMBER 1975 
* 
*************************************************** 
      SPC 1 
      SUP 
      SPC 2 
* 
*     PROGRAM TO DO LOADS AND SAVE ON UP TO 
*     MAXN TERMINALS. WHERE MAXN IS THE NUMBER OF TERMINALS 
*     WHICH CAN OPERATE AT ANY ONE TIME 
*     REMEMBER EACH TERMINAL TAKE 145 WORDS!!!
*     CENTRAL PROGRAM WHEN SCHEDULED MUST BE
*     PASSED THE CLASS NUMBER 
* 
      SPC 2 
*     DEFINE ENTRY POINTS 
      SPC 2 
*     DEFINE EXTERNALS
      SPC 1 
      EXT EXEC,READF,POSNT,CLOSE,WRITF
      EXT OPEN,CREAT,D65SV
      EXT D65CL 
      SPC 2 
*     DEFINE A AND B REG
      SPC 1 
A     EQU 0 
B     EQU 1 
      SKP 
* 
*     PROGRAM STARTS HERE 
* 
PLOS  LDA B,I       GET CLASS NUMBER
      STA CLSNM     SAVE CLASS NUMBER 
      JMP PLOSS     AND WAIT FOR FIRST USER 
* 
*     WE SHOULD ONLY GO THROUGH THE ABOVE ONCE
* 
      SPC 1 
PLOS0 BSS 0         HERE ON ALL OTHER CALLS 
PLOSS JSB EXEC      DO A GET CALL...WAIT FOR SOMETHING
      DEF *+5 
      DEF D21       CODE FOR A GET CALL 
      DEF CLSNM     CLASS # 
      DEF RBUF      REQUEST BUFFER
      DEF D35       REQUEST BUFFER LENGTH 
* 
      LDA RLU       GET COMM. LU
      AND MSK1      KEEP ONLY LOW 6 BITS
      STA RLU 
* 
* 
*     WHEN WE GET HERE SOMEONE WANTS SOMETHING
* 
      LDA DCBN      GET DCB NUMBER..IF ZERO 
      SZA           IT IS A NEW REQUEST 
      JMP PLOS1     NOT A NEW REQUEST 
      LDA CALOC     NEW REQUEST...SEE IF WE CAN HANDLE IT 
      ADA MMAXS 
      LDB M3        SET ERROR TO -3 ...CAN'T HANDLE IT
      SSA,RSS       HANDLE REQUEST? 
      JMP TERM      NO...TELL THEM TRY LATER
      LDB M4        GET ERROR CODE IF LENGTH ERROR
      LDA BLEN      GET LENGTH WORD 
      ADA MBUFS     SEE IF LARGER THAN BUFFER 
      SSA,RSS 
      JMP TERM      YES...ERROR 
      LDA LSFG      GET LOAD-SAVE FLAG
      SSA           LOAD OR SAVE LOAD=0,SAVE=1
      JMP PSAV1     SAVE
PSAV3 JSB OPN       GO OPEN FILE
      JMP PLOS1     OK ON OPEN...TREAT AS STANDARD
PSAV2 LDB M2        SET FOR NOT THERE 
      JMP TERM      AND TERMINATE 
* 
*     HERE FOR SAVE 
* 
PSAV1 JSB OPN       CHECK FOR TYPE 0 FILE 
      RSS           POSSIBLE
      JMP PSAV4     TRY TO CREATE IT
      LDA DCBN      SEE IF TYPE 0 
      ADA D2
      LDA A,I 
      SZA           TYPE ZERO?
PSAV4 JSB CRET      NO...TRY TO CREATE IT 
      JMP PLOS1     OK..GO TO IT
      JSB DALOC     CLOSE FILE IF OPEN
      JMP PSAV2     TERMINATE 
* 
*     AT THIS POINT THE DCB IS DEFINED
*     THE FILE IS OPENED AND WE ARE READ TO DO
*      OUR THING. 
* 
PLOS1 LDA LSFG      LOAD OR SAVE? 
      SSA 
      JMP PLOS2     SAVE
      JSB LBUF      LOAD THE BUFFER FROM THE DISC 
      STB STAT      SAVE THE FILE STATUS
      JSB WREC      SEND THE DATA ACROSS THE LINE 
      JSB WRPLY     SEND STATUS REPLY 
      JMP PLOS0     AND TERMINATE AND WAIT
      SPC 1 
PLOS2 JSB RREC      READ THE DATA FOR SAVE
      CLB           TELL THEM ALL WENT WELL 
      STB STAT      SAVE IT IN THE STATUS WORD
      JSB SBUF      SAVE BUFFER IN FILE 
      JSB WRPLY     SEND REPLY
      JMP PLOS0     GO WAIT FOR MORE
      SKP 
* 
*     SUBROUTINE TO READ RECORDS FROM A FILE UNTIL
*     BUFFER IS FULL. 
*     CALLING SEQUENCE
*     JSB LBUF
*     UPON RETURN...B REG= STATUS 
*     STATUS= -1=EOF,O=BUFFER FULL
* 
LBUF  NOP 
      LDA DBUFA     GET DATA BUFFER ADDRESS 
      STA TEMP1     SAVE AS CURRENT DATA ADDRESS
      INA           GET TO FIRST DATA WORD
      STA LBUF1     SAVE FOR FILE WRITE COMMAND 
      LDA BLEN      GET MAX BUFFER SIZE 
      ADA M1        MAKE SURE DON'T OVERWRITE BUFFER
      STA TEMP2     SAVE CURRENT BUFFER SIZE
LBUFA JSB READF     GO READ A RECORD
      DEF *+6 
      DEF DCBN,I    DCB ADDRESS GOES HERE 
      DEF FERR      FILE STATUS AFTER READ
LBUF1 NOP           BUFFER ADDRESS GOES HERE
      DEF TEMP2     CURRENT MAX BUFFER LENGTH 
      DEF TEMP3     ACTUAL SIZE OF RECORD 
      LDA FERR      GET FILE STATUS 
      LDB TEMP3     GET LENGTH
      SSA,RSS       EOF?
      JMP LBUFF     NO
      CCB           YES...SET TO -1 
      JMP LBUFG     AND TERMINATE 
LBUFF CPB TEMP2     ACTUAL=REQUESTED LENGTH?
      CLB,RSS       YES...SET THAT WE LOST SOMETHING
      SZB           IF LENGTH NOT MATCH, IS IT A ZERO LN REC.?
      RSS           NO...CONTINUE PROCESSING
      JMP LBUFA     YES, ZERO LENGTH RECORD...IGNORE IT 
LBUFG STB TEMP1,I   SET STATUS IN BUFFER
      SZB           EOF OR BUFFER FULL? 
      CPB M1        ? 
      JMP LBUFB     YES...EITHER BACKSPACE OR TERMINATE 
      JSB LIMCK     CHECK IF IN LIMITS
      JMP LBUFA     NOT IN LIMITS...IGNORE
      LDB TEMP3     GET RECORD LENGTH AGAIN 
      ADB LBUF1     GET ADDRESS OF NEXT RECORD TO READ
      STB TEMP1     SAVE ADDRESS
      INB           GET TO FIRST DATA WORD
      STB LBUF1     SAVE AS CURRENT BUFFER ADDESS 
      LDB TEMP3     GET LENGTH OF LAST READ 
      CMB           NEGATE AND SUBTRACT 1 (INCLUDE COUNT WORD)
      ADB TEMP2     SAVE AS NEW LENGTH
      STB TEMP2     SAVE NEW LENGTH 
      SSB,RSS       SHOULD NEVER GO NEGATIVE
      JMP LBUFA     BUT MAKE SURE ANYWAY
* 
*     AT THIS POINT THE BUFFER IS FULL OR AN
*     EOF HAS BEEN HIT...IN ANY CASE DON'T READ 
*     ANY MORE NOW
* 
LBUFB SZB           EOF?
      JMP LBUFC     YES...CLOSE FILE
      JSB POSNT     NO...BACKSPACE ONE RECORD 
      DEF *+4 
      DEF DCBN,I
      DEF FERR
      DEF M1
      CLB           SET THE B REG...BUFFER FULL 
      JMP LBUF,I    RETURN
* 
*     EOF HIT...CLOSE FILE
* 
LBUFC JSB DALOC     DEALOCATE THE DCB 
      CCB           SET B=-1...EOF
      JMP LBUF,I    RETURN
      SKP 
* 
*     SUBROUTINE TO MOVE BUFFER TO FILE 
*     CALLING SEQUENCE
*     JSB SBUF
* 
SBUF  NOP 
      LDA DBUFA     GET DATA BUFFER ADDRESS 
      STA TEMP1     SAVE BUFFER ADDRESS 
SBUFA LDA TEMP1,I   GET LENGTH OF RECORD
      SZA,RSS       DONE? 
      JMP SBUF,I    YES...RETURN
      INA,SZA,RSS   EOF?
      JMP SBUFB     YES...CLOSE FILE
      STA TEMP2     SAVE LENGTH FOR WRITE 
      LDB C4040     GET TWO SPACES
      STB TEMP1,I   MOVE SPACES INTO LENGTH WORD
      JSB WRITF     WRITE THE RECORD
      DEF *+5 
      DEF DCBN,I
      DEF FERR      ERROR STATUS
      DEF TEMP1,I   BUFFER ADDRESS
      DEF TEMP2     LENGTH OF WRITE GOES HERE 
      LDA TEMP2     GET LENGTH OF LAST WRITE
      ADA TEMP1     GET ADDRESS OF NEXT WRITE 
      STA TEMP1     SAVE FOR NEXT WRITE 
      JMP SBUFA     CONTINUE WRITING ON FILE
* 
*     HERE WHEN EOF REACHED 
* 
SBUFB JSB DALOC     DEALOCATE THE DCB 
      JMP SBUF,I    RETURN
      SKP 
* 
*     SUBROUTINE TO ALOCATE DCB AND OPEN A FILE 
*     CALLING SEQUENCE
*     JSB OPN 
*     NORMAL RETURN 
*     ERROR RETURN
* 
OPN   NOP 
      JSB ALOC      GO GET A DCB ADDRESS
      LDA DCBN      GET DCB ADDRESS 
      STA OPEN1     SAVE DCB ADDRESS
      JSB OPEN      GO TRY TO OPEN FILE 
      DEF *+7 
OPEN1 NOP           DCB ADDRESS HERE
      DEF FERR
      DEF PNAM      NAME OF FILE
      DEF D0
      DEF SC
      DEF LU
      LDA FERR      ANY ERRORS? 
      SSA,RSS 
      JMP OPN,I     NO...RETURN 
      JSB DALOC     YES...DEALOCATE THE DCB 
      ISZ OPN       SET FOR ERROR RETURN
      JMP OPN,I     ERROR RETURN
      SKP 
* 
*     SUBROUTINE TO CREATE A FILE 
*     CALLING SEQUENCE
*     JSB CRET
*     NORMAL RETURN 
*     ERROR RETURN
* 
CRET  NOP 
      JSB ALOC      GO GET A DCB
      LDA DCBN      GET THE DCB ADDRESS 
      STA CRET1     SAVE DCB ADDRESS
      LDA TYPE      GET TYPE WORD 
      SZA,RSS       IS IT ZERO? 
      LDA D9        YES...DEFAULT TO TYPE 9 
      STA TYPE      SAVE TYPE WORD
      LDA SIZE      GET SIZE WORD 
      SZA,RSS       IS IT ZERO? 
      LDA D40       YES...DEFAULT TO 40 RECORDS 
      STA SIZE      SAVE SIZE WORD
      JSB CREAT     CREATE THE FILE 
      DEF *+8 
CRET1 NOP 
      DEF FERR
      DEF PNAM      NAME TO BE USED 
      DEF SIZE
      DEF TYPE      TYPE IS DEFINED AS TYPE 9 
      DEF SC        SECURITY CODE 
      DEF LU
      LDA FERR      GET FILE STATUS 
      SSA,RSS       ANY ERRORS? 
      JMP CRET,I    NO...RETURN 
      JSB DALOC     DEALOCTE DCB
      ISZ CRET      SET FOR ERROR RETURN
      JMP CRET,I    RETURN...ERROR
      SKP 
* 
*     SUBROUTINE TO ALOCATE A DCB 
*     CALLING SEQUENCE
*     JSB ALOC
* 
ALOC  NOP 
* 
*     BEFORE WE ALOCATE A DCB, CHECK IF ONE IS
*     ALREADY ALOCATED
* 
      LDA SATA      GET ADDRESS OF ACTIVE SATELITE TABLE
      STA TEMP1     SAVE IN UP COUNTER
      LDA MMAXS     GET MAX # OF ENTRIES
      INA 
      STA TEMP2     SAVE IN DOWN COUNTER
      CLA           SET UP FOR TABLE DISPLACEMENT 
      STA TEMP3 
      LDA RLU       GET REMOTE LU # 
ALOC4 CPA TEMP1,I   IS THERE A MATCH
      JMP ALOC5     YES...DCB ALOCATED FOR TERMINAL ALREADY 
      ISZ TEMP1     NO...GET NEXT ENTRY 
      ISZ TEMP3 
      ISZ TEMP2     DONE? 
      JMP ALOC4     NO...CONTINUE 
* 
*     TERMINAL DOESN'T ALREADY HAVE A DCB...TRY TO FIND ONE 
* 
      LDA DCBBA     GET ADDRESS OF DCB AVAILABLE TABLE
      STA TEMP1     SAVE IN TEMP LOCATION 
      LDA MMAXS     GET MAX # OF ENTRIES
      STA TEMP2     SAVE IN DOWN COUNTER
      CLA           GET A ZERO
      STA TEMP3     SAVE AS MULT. FACTOR
ALOC1 ISZ TEMP2     DONE? 
      JMP ALOC3     NO...CONTINUE 
      LDB M3        YES...NO ROOM 
      JMP TERM      TELL OTHER SIDE TO TRY LATER
ALOC3 LDA TEMP1,I   GET CONTENTS OF TABLE 
      SZA,RSS       IS THERE SOMETHING THERE? 
      JMP ALOC2     NO...GOOD FOUND A HOME!!! 
      ISZ TEMP1     GET NEXT ADDRESS
      ISZ TEMP3     INCREMENT MULT COUNT
      JMP ALOC1     CONTINUE
* 
*     HERE IF WE HAVE ROOM
* 
ALOC2 LDA TEMP3     GET MULT FACTOR 
      MPY D144      GET DISPLACEMENT FROM FIRST 
      ADA DCBA      ADDRESS OF AVAILABLE DCB
      STA TEMP1,I   SAVE IN TABLE TO HOLD A PLACE 
      STA DCBN      SAVE IN PARMB 
      ISZ CALOC     INCREMENT # OF ACTIVE TERMINALS 
      LDA TEMP3     GET DISPLACEMENT
      ADA SATA      ADD FOR SATELLITE TABLE ENTRY 
      LDB RLU       GET REMOTE LU 
      STB A,I       SAVE PLACE IN TABLE 
      JMP ALOC,I    RETURN
      SPC 3 
* 
*     TERMINAL ALREADY HAS A DCB...CLOSE IT AND REUSE IT
* 
ALOC5 LDA TEMP3     GET DISPLACEMENT
      ADA DCBBA     GET TO DCB ADDRESS
      LDA A,I       GET DCB ADDRESS 
      STA DCBN      SAVE DCB ADDRESS IN PARMB 
      STA CLSAL     SAVE FOR CLOSE
      JSB CLOSE     CLOSE CURRENTLY OPEN DCB
      DEF *+3 
CLSAL NOP 
      DEF FERR
      JMP ALOC,I    DCB IS NOW ALOCATED 
      SKP 
* 
*     SUBROUTINE TO DALOCATE A DCB
*     CALLING SEQUENCE
*     JSB DALOC 
* 
DALOC NOP 
      LDA DCBBA     GET ADDRES OF DCB ACTIVE TABLE
      STA TEMP1     SAVE IN TEMP LOCATION 
      LDA MMAXS     GET MAX # OF ENTRIES
      STA TEMP2     SAVE IN TEMP LOCATION 
      LDA SATA      GET ADDRESS OF SATELLITE OPEN TABLE 
      STA TEMP3 
DALC1 ISZ TEMP2     GONE THRU TABLE?
      JMP DALC2     NO....GOOD
      LDB M4        WE IN BIG TROUBLE...SHOULD NEVER GET HERE 
      JMP TERM      UNKNOWN DCB 
DALC2 LDA TEMP1,I   GET ADDRESS IN TABLE
      CPA DCBN      THE SAME? 
      JMP DALC3     YES...DEALOCATE IT
      ISZ TEMP3     GET TO NEXT SATELLITE ENTRY 
      ISZ TEMP1     GET NEXT BUFFER ADDRESS 
      JMP DALC1     GO TRY AGAIN
* 
*     HERE FOR MATCH CONDITION
* 
DALC3 JSB CLOSE     CLOSE FILE...IF OPEN
      DEF *+3 
      DEF DCBN,I    DCB ADDRESS 
      DEF DCBN      IGNORE ERROR
      CLA           GET A ZERO
      STA TEMP1,I   CLEAR OUT TABLE LOCATION
      STA TEMP3,I   CLEAR OUT SATELLITE ENTRY 
      STA DCBN      CLEAR OUT DCB POINTER 
      LDA CALOC     GET CURRENT # OF ACTIVE TERMINALS 
      ADA M1        DECREASE IT BY 1
      STA CALOC     SAVE AS CURRENT # OF ACTIVE 
      JMP DALOC,I   RETURN
      SKP 
* 
*     SUBROUTINE TO SEND DATA TO TERMINAL 
*     CALLING SEQUENCE
*     JSB WREC
* 
WREC  NOP 
* 
      LDA RLU 
      IOR MSK2      DATA ONLY 
      STA IMODE 
* 
      JSB D65CL     SEND DATA CALL
      DEF *+7 
      DEF IRWW      WRITE 
      DEF IMODE 
      DEF DBUF
      DEF BLEN
      DEF RBUF+33   PASS TIME-TAGS
      DEF RBUF+34 
* 
      JMP BAD       ERROR RETURN
      JMP WREC,I    RETURN
      SPC 4 
* 
*     ROUTINE TO READ DATA FROM A TERMINAL
*     CALLING SEQUENCE
*     JSB RREC
* 
RREC  NOP 
* 
      LDA RLU 
      IOR MSK2
      STA IMODE 
* 
      JSB D65CL     READ DATA 
      DEF *+7 
      DEF IRWR
      DEF IMODE 
      DEF DBUF
      DEF BLEN      LENGTH
      DEF RBUF+33   PASS TIME-TAGS
      DEF RBUF+34 
* 
      JMP BAD       ERROR RETURN
      JMP RREC,I    RETURN
      SPC 3 
BAD   JSB CMER
      JMP PLOS0 
      SKP 
* 
*     SUBROUTINE TO DO LIMIT CHECKING 
*     CALLING SEQUENCE
*     JSB LIMCK 
*     OUT OF RANGE RETURN 
*     IN RANGE RETURN 
*     B REG=BUFFER LENGTH ON ENTRY
* 
LIMCK NOP 
      LDA LBUF1     GET STARTING BUFFER ADDRESS 
      CLE,ELA       CONVERT TO BYTE ADDRESS 
      STA LMCKA     SAVE AS STARTING BYTE ADDRESS 
      CLE,ELB       CONVERT LENGTH TO BYTE LENGTH 
      CMB,INB       NEGATE LENGTH 
      STB LMCKC     SAVE IN DOWN COUNTER
      LDA ULIM      GET UPPER LIMIT 
      SZA,RSS       ANY LIMITS? 
      JMP INRNG     NO...ALL LINES IN RANGE 
      CLA           GET A ZERO
      STA LMCKB     CLEAR BINARY SUM...LINE # 
LMCK1 LDB LMCKA     GET BYTE ADDRESS
      ISZ LMCKA     GET NEXT BYTE ADDRESS 
      ISZ LMCKC     OUT OF BUFFER?
      RSS           NO
      JMP LIMCK,I   YES...TREAT AS OUT OF RANGE 
      JSB ABYTE     GET A CHARACTER 
      CPA C40       IS IT A SPACE?
      JMP LMCK1     YES...IGNORE SPACES 
      STA B         MOVE CHAR TO B REG
      ADB MC60      ADD TO -60B 
      ADA MC72      ADD TO -72B 
      SSA           OUT OF RANGE? 
      SSB           TO LOW? 
      JMP CKRNG     LAST NUMERIC...CHECK RANGE
      LDA LMCKB     GET PARTICAL SUM
      STB LMCKB     SAVE CURRENT VALUE
      MPY D10       MOVE OVER A PLACE FOR NEXT CHAR 
      ADA LMCKB     ADD IN CURRENT NUMBER 
      STA LMCKB     SAVE AS PARTICAL
      JMP LMCK1     GET NEXT CHAR 
      SPC 2 
*     AT THIS POINT WE HAVE BINARY LINE NUMBER
      SPC 1 
      SPC 1 
CKRNG LDA LMCKB     GET LINE NUMBER 
      CMA,INA       CONVERT TO NEGATIVE VALUE 
      STA B         GET IT IN B REG 
      ADA M1        ADD 1 FOR CHECKING LOWER LIMIT
      ADA LLIM      ADD IN LOWER LIMIT...+..OUT OF RANGE
      ADB ULIM      ADD IN UPLIM...-..OUT OF RANGE
      SSA 
      SSB 
      JMP LIMCK,I   OUT OF RANGE
INRNG ISZ LIMCK     IN RANGE...IN RANGE RETURN
      JMP LIMCK,I 
      SPC 2 
LMCKA NOP 
LMCKB NOP 
LMCKC NOP 
* 
*     SUBROUTINE TO SEND A REPLY TO THE TERMINAL
*     CALLING SEQUENCE
*     JSB WRPLY 
*     B REG= STATUS 
* 
WRPLY NOP 
      LDA RBUF      SET IN REPLY BIT
      IOR BIT14 
      STA RBUF
      LDB D35       GET FRIENDLY REPLY SIZE(35WDS)
      ALF           POSITION FRIENDLY BIT(#11) TO SIGN. 
      SSA,RSS       IF REPLY GOING TO AN ALIEN SATELLITE, 
      LDB D21         MAX. REPLY LENGTH IS 21 WORDS.
      STB RBUFL     CONFIGURE THE REPLY LENGTH. 
      JSB D65SV     SEND REPLY
      DEF *+7 
      DEF IRWW
      DEF RLU       REQ ONLY
      DEF RBUF
      DEF RBUFL     LENGTH
      DEF DUMMY 
      DEF DUMMY 
      JSB CMER      ERROR RETURN
* 
      JMP WRPLY,I   RETURN
      SPC 4 
* 
*     HERE TO TERMINATE ON AN ERROR CONDITION 
*     B REG=STATUS
* 
TERM  STB STAT      SAVE STATUS 
      JSB D65CL     TELL OTHER SIDE, NO DATA
      DEF *+7 
      DEF ICR       SEND STOP 
      DEF RLU 
      DEF DUMMY 
      DEF DUMMY 
      DEF DUMMY 
      DEF DUMMY 
* 
      JSB CMER      ERROR RETURN
      JSB WRPLY     SEND REPLY...REASON FOR STOP
      JMP PLOS0     WAIT FOR SOMEONE ELSE 
      SPC 3 
* 
*     SUBROUTINE TO GET A CHARACTER 
*     CALLING SEQUENCE
*     JSB ABYTE 
*     B REG= BYTE ADDRESS....UPON RETURN A REG=CHAR 
* 
ABYTE NOP 
      CLE,ERB       CONVERT TO WORD ADDRESS 
      LDA B,I       GET CHARACTER 
      SEZ,RSS       UPPER HALF? 
      ALF,ALF       YES 
      AND B377      MASK OFF UPPER HALF 
      ELB,CLE       GET BYTE ADDRESS AGAIN
      JMP ABYTE,I   RETURN
      SPC 3 
CMER  NOP 
      DST ERVAL 
      JSB EXEC
      DEF *+5 
      DEF D2
      DEF D1
      DEF ERMS
      DEF ERML
* 
      JMP CMER,I
      SPC 3 
ERMS  ASC 9,PLOS : COMM. ERROR
ERVAL BSS 2 
ERML  DEC 11
      SKP 
* 
*     TEMP VALUES,CONSTANTS,BUFFERS, WHAT EVER
* 
MAXN  EQU 2         MAX # OF OPEN TERMINALS 
BUFS  EQU 512       SIZE OF DATA BUFFER 
      SPC 1 
CLSNM NOP           CLASS NUMBER
B377  OCT 377 
BIT14 OCT 40000 
D21   DEC 21
D1    DEC 1 
D2    DEC 2 
D9    DEC 9 
D10   DEC 10
D35   DEC 35
D40   DEC 40
D144  DEC 144 
MC60  OCT -60 
MC72  OCT -72 
C40   OCT 40
C4040 ASC 1,
M1    DEC -1
M2    DEC -2
M3    DEC -3
M4    DEC -4
MMAXS ABS 0-MAXN-1  MAX # OF TERMINALS + 1
MBUFS ABS 0-BUFS-1 DATA BUFFER SIZE 
CALOC OCT 0         CURRENT # OF ACTIVE DCB'S 
TEMP1 NOP 
TEMP2 NOP 
TEMP3 NOP 
D0    OCT 0 
DBUFA DEF DBUF
RBUFL NOP           REPLY LENGTH: 35WD-FRIEND/21WD-ALIEN. 
DCBBA DEF DCCB
DCBA  DEF DCBF
SATA  DEF SAT 
IRWW  OCT 100002
IRWR  OCT 100001
DUMMY OCT 0 
MSK1  OCT 77
MSK2  OCT 300 
ICR   OCT 100003
IMODE NOP 
      SPC 2 
* 
*     HERE WE DEFINE THE PRMB 
* 
RBUF  NOP           STREAM ID 
DCBN  NOP           DCB ADDRESS 
LSFG  NOP           LOAD-SAVE FLAG,OVERIDE FLAG 
FERR  NOP           FILE MANAGER STATUS 
STAT  NOP           STATUS
PNAM  NOP           PROGRAM NAME
      BSS 2 
SC    NOP           SECURITY CODE 
LU    NOP           LOGICAL UNIT
TYPE  NOP           FILE TYPE 
SIZE  NOP           FILE SIZE 
BLEN  NOP           BUFFER LENGTH 
LLIM  NOP           LOWER LIMIT 
ULIM  NOP           UPPER LIMIT 
      BSS 9         NOT USED
RLU   NOP           REMOTE LU 
      BSS 10
      SPC 2 
* 
*     DEFINE SATELLITE OPEN TABLE 
* 
SAT   REP MAXN
      NOP 
      SPC 2 
*     DEFINE DCB TABLE
DCCB  BSS 0 
      REP MAXN
      NOP 
      SPC 2 
*     DEFINE DCB AREA 
DCBF  BSS 0 
      REP MAXN
      BSS 144 
      SPC 2 
*     DEFINE DATA BUFFER
DBUF  BSS 512 
END   EQU * 
      END PLOS
                                                                                                                                                  