ASMB,R,L,C
      HED RFAEX 91700-16125 REV A * (C) HEWLETT-PACKARD CO. 1976
      NAM RFAEX,18,30 91700-16125 REV A 760212
      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 
      EXT EXEC
      IFZ 
      EXT DBUG
      XIF 
A     EQU 0 
B     EQU 1 
* EXTERNALS FOR REMOTE FILE ACCESS-LEVEL 1
      EXT NAMF,FCONT,LOCF,APOSN 
      EXT CREAT,PURGE,OPEN,WRITF
      EXT READF,POSNT,RWNDF,CLOSE 
      EXT FSTAT 
      EXT D65SV 
      EXT D65CL,#RXCL 
* 
      SPC 5 
* 
* RFAEX 
* SOURCE:91700-18125
* BINARY:91700-16125
* SHANE DICKEY
* JULY 30,1974
* 
*     DATE MODIFIED : JANUARY 1976
* 
*     MODIFIED BY JEAN-PIERRE BAUDOUIN
* 
* 
* Z OPTION INCLUDES DBUG PACKAGE
      SPC 5 
RFAEX NOP 
* 
* GET THE I/O CLASS FOR THIS MONITOR SAET UP BY LSTEN 
* 
START LDA B,I       IS P1 = I/O CLASS?
      IFZ 
      CPA D99       IF 99 GO INTO DBUG
      JMP *+3       AND TERMINATE-IF REAL CALL- 
      JMP GET 
* 
      JSB DBUG      SET UP DBUG 
      DEF *+1 
* 
      JSB EXEC      SAVE RESOURCES AND TERMINATE
      DEF *+4 
      DEF D6
      DEF ZERO
      DEF D1
* 
      JMP START     LSTEN CALL STARTS HERE
      XIF 
* 
* ISSUE GET ON I/O CLASS
* 
GET   JSB EXEC      THIS GET WILL SUSPEND 
      DEF *+5       RFAEX UNTIL RFAM WRITES 
      DEF D21       IN ITS CLASS
      DEF #RXCL     THE REQUEST PARMB WILL BE 
      DEF IRBUF     IN THE IRBUF BUFFER AREA
      DEF IRBFL 
* 
* 
* PARMB+24=LU 
* 
* MOVE FILE NAME TO FSNAM FROM PARMB
* 
* 
      LDB PARMB 
      ADB D6
* 
      JSB PIKUP     GET 1ST TWO CHARS 
      STA FSNAM 
* 
      JSB PIKUP     THEN NEXT TWO 
      STA FSNAM+1 
* 
      JSB PIKUP 
      STA FSNAM+2 
* 
      LDA PARMB 
      ADA D22 
* 
      LDB A,I       GET CURRENT DCB ADDRESS 
      RSS           RESOLVE THE INDIRECT
      LDB B,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      STB CDCBA 
* 
      INA 
      INA           THEN GET LU # 
      LDB A,I 
      STB FSTLU 
* 
* THE ORIGINAL CALL IS RECONSTRUCTED
* THE PREPROCESS FLAG IS CHECKED TO DETERMINE 
* IF THERE IS ANY PREPROCESSING TO BE DONE
* AN EXAMPLE OF THIS WOULD BE THE GATHERING OF
* A DATA BUFFER BEFORE EXECUTION OF A FILE WRITE
* ALSO ERROR CHECKING CAN BE DONE IN PREPROCESS S/R 
* FOLLOWING THE PREPROCESS THE RECONSTITUTED CALL 
* IS EXECUTED AND STATUS IS RETURNED TO RFAEX BY FMP
* IT IS THE RETURN OF THIS STATUS INFORMA-
* TION THAT COMPRISES THE MAJOR PART OF POST- 
* PROCESSING, OF COURSE OTHER TYPES OF POSTPROCESSES
* CAN BE ACCOMPLISHED. AN EXAMPLE IS THE WRITING OF 
* AN ACQUIRED DATA BUFFER TO THE TERMINAL FOLLOWING 
* A DATA READ 
* 
* 
* ISOLATE THE FUNCTION CODE 
      LDA PARMB 
      ADA D2
      LDA A,I 
      AND MSK0      MASK OUT UPPER BYTE 
      ADA BASE
      STA FCODE 
* 
* 
* 
* CLEAR THE JSB BUFFER TO ZEROS AT THE START
* 
      LDB DM20      SET UP A COUNTER TO 
      STB CONTR     CLEAR 20 WORDS OF THE JSB BUFFER
      LDA JSBFA     TO 0-THEN SET UP START ADDRESS
      STA AJSBF     TO CLEAR
      CLA 
LOOP7 STA AJSBF,I   CLEAR A WORD
* 
* INCREMENT COUNTERS
* 
* 
      ISZ AJSBF 
      ISZ CONTR 
      JMP LOOP7     IF NOT DONE DO NEXT ONE 
* 
* PICK UP THE LU# FROM THE FST AND PUT IT IN FSTLU
* 
* 
* RECONSTRUCT THE CALL
* 
      LDA PARMB     BUILD A POINTER TO THE
      ADA D6        1ST USER PARAMETER IN 
      STA BLOKA     PARMB & STORE IT IN BLOKA 
      LDA PRMSA     BUILD A POINTER TO THE ASSEMBLY 
      STA APRMS     AREA & SAVE IT-ACTUAL PARAMETERS' 
      LDA JSBFA     BUILD A POINTER TO THE JSB
      STA AJSBF     ASSEMBLY AREA 
      LDA FCODE     GET FCODE TO CHECK IF IT IS IN THE
      ADA M1        THE GOOD RANGE. 
      SSA 
      JMP CODER     FCODE < 150, ERROR
      ADA M13 
      SSA,RSS 
      JMP CODER     FCODE > 162, ERROR
* 
      LDA FCODE     USE CODE AS INDEX IN THE FMGR 
      ADA JSBTA      ROUTINES TABLE 
      ADA M1
      LDA A,I       PICK UP THE ADDRESS OF THE
      STA AJSBF,I    S/R THAT WILL SERVICE
      ISZ AJSBF       THIS REQUEST AND PUT IT 
      ISZ AJSBF        IN THE JSB TABLE 
      SPC 2 
* AFTER PUTTING IN THE JSB STEP PAST DEF RETURN 
*(THIS WILL BE COMPUTED AND FILLED IN LATER)
* INITIALIZE PARAMETER COUNTER TO DO SAME 
* 
* 
      CLA           THIS WILL BE INCREMENTED
      STA PRCNT 
      SPC 2 
* BEFORE THE BUFFER IS BUILT FROM PARMB IT MAY
* NEED A "MASSAGE" THIS WILL PICK UP ODD-BALL 
* PARAMETERS LIKE DCB WORK AREA POINTERS THAT 
* ARE NOT IN THE PARMB REQUEST-THE FOLLOWING
* CODE ISOLATES THE ADDRESS OF THIS "MASSAGE" S/R 
* AND TRANSFERS TO IT.
* 
* 
      LDA PREPA 
      ADA FCODE 
* 
* EXECUTE PREPROCESSING S/R 
* 
      LDB D6        SET UP ERROR REGISTER 
      LDA A,I 
      JSB A,I 
* 
* 
* 
* PICK UP THE LOCATION OF THE NEXT CONTROL BYTE 
* 
      JSB PRE7      COMPUTE "DEF RTRN" AS LAST STEP 
* 
* THE CALLING SEQUENCE IS COMPLETE-EXECUTE IT!!!
* SET THE NO DATA TO BE RETURNED FLAG-NOMINAL CASE
* 
* 
      CLA 
      STA DATA2 
      SPC 3 
* EXECUTE THE CALL
* 
* 
      JSB JSBUF-1 
      STA SAVEA     SAVE A AND B REGISTERS TO PASS THEM BACK TO 
      STB SAVEB      THE USER IN WORDS +2 AND +3 OF THE REPLY PARMB.
      SPC 2 
* AFTER THE REQUEST IS EXECUTED THE POST PROCESSING 
* S/R WILL BE EXECUTED IN A MANNER ANALOGOUS TO THAT
* SHOWN ABOVE FOR PREPROCESSING 
* 
* SET UP & CALL S/R THAT CONTROLS POSTPROCESSING
* 
* 
      LDA PSTPA 
      ADA FCODE     INDEX IN THE POST PROCESSING TABLE
      LDA A,I       GET THE PROPER ADDRESS
      JSB A,I       GO EXECUTE THE ROUTINE
* 
* RETURN IERR TO RFAM THROUGH CDCB FOR POSTPROCESSING 
* OF ALL REQUESTS EXCEPT FSTAT (NO DCB IN CDCB) 
* 
      LDA FCODE     GET REQUEST TYPE
      CPA D13       IS IT A FSTAT CALL? 
      JMP PAST      YES SKIP IT 
      LDA FERR      GET IERR AS RETURNED
      LDB CDCBA     GET CDCB ADDRESS
      ADB D145      STEP TO IERR WORD 
      STA B,I       AND STORE 
      SPC 2 
* IF THE DATA FLAG IS SET THE DATA MUST BE
* RETURNED BEFORE THE STATUS REPLY CAN BE SENT BACK 
* IS THIS A REQUEST FROM A MOD BBL TERMINAL?
* IF SO NO REPLY CAN BE RETURNED
* 
* 
PAST  LDA DATA2 
      SZA 
* 
* DETERMINE WHICH TYPE OF REPLY IS TO BE RETURNED 
* 
      JMP *+3 
      JSB SDREQ 
      JMP QUITS 
      JSB SDATA     SEND THE DATA BACK
      JSB SDREQ     SEND THE PREV FORMATTED REQUEST 
* 
* 
* TERMINATE. THIS WILL REACTIVATE RFAM WHICH IS WAITING 
* ON A SCHEDULE (RFAEX) WITH WAIT.
* 
* 
QUITS JSB EXEC
      DEF *+2 
      DEF D6
      HED RFAEX: PREPROC. * (C) HEWLETT-PACKARD CO. 1976
      SPC 5 
PRE1  NOP 
* THIS S/R INSERTS DCB & IERR INTO CALL 
* 
      LDA CDCBA     PICK UP THE DCB ADDRESS 
      INA           STEP PAST FLAG WORD 
      STA AJSBF,I 
      ISZ AJSBF     STORE IT & INCREMENT POINTER
      LDA FERRA     PICK UP THE ERROR POINTER 
      STA AJSBF,I   & STORE IT
* 
      ISZ AJSBF 
* 
      ISZ PRCNT     INCREMENT THE PRAMETER COUNT
      ISZ PRCNT 
* 
      LDA BLOKA     PICK UP THE CONTROL BYTE ADDRESS
      IOR MSK5      ADD JUSTIFICATION FLAG
      STA PRAM1 
      JMP PRE1,I
      SPC 5 
PRE2  NOP 
* INSERT DATA BUFFER RECORD ADDRESS 
      LDA DABFA     PICK UP DATA BUFFER ADDRESS 
      STA AJSBF,I   AND INSERT IT IN THE NEXT JSB 
      ISZ AJSBF     BUFFER SLOT-INCREMENT JSB BUFR
      ISZ PRCNT     POINTER & PARAMETER COUNT 
* NOTE PRAM1 HASN'T BEEN SET UP 
      JMP PRE2,I
      SPC 5 
PRE3  NOP 
* USED FOR CREATE,PURGE,OPEN,RENAME 
      JSB PRE1      INSERT DCB & IERR 
      JSB STAND     ADD STANDARD PARAMETERS 
      JMP PRE3,I
      SPC 5 
PRE4  NOP 
* MOVE PARMB POINTER PAST FILE NAME 
      LDA BLOKA 
      ADA D3
      STA BLOKA 
* GETCB SETUP 
      STA PRAM1 
      JMP PRE4,I
      SPC 5 
* 
PRE5 NOP
* USED FOR POSITION RECORD,CLOSE FILE,FILE CONTROL
* LOCATE RECORD,ABS. PON RECORD 
      JSB PRE1      INSERT DCB,IERR 
      JSB PRE4      MOVE POINTER PAST FILE NAME 
* IS THIS CALL FOR RLOCF? IF NOT NEED ONLY
* SET UP STANDARD PARAMETERS AND EXIT 
      LDA FCODE     PICK UP THE REQUEST FUNCTION
      CPA D11       CODE AND COMPARE TO 11 (RLOCF)
      RSS 
      JMP PRE5A 
* SET UP THE STORAGE FOR THE 7 RETURNED RLOCF 
* PARAMETERS AND EXIT 
* 
      LDA DM7 
      STA CONTR 
* 
      LDA LOBSA 
LOOPL STA AJSBF,I 
      INA 
      ISZ AJSBF 
      ISZ PRCNT 
      ISZ CONTR 
      JMP LOOPL 
      JMP PRE5,I    & RETURN
* SET UP TO STRIP THE STANDARD PARAMETERS 
PRE5A JSB STAND 
      JMP PRE5,I
      SPC 5 
* 
PRE6  NOP 
* WRITE PREPROCESS S/R
      JSB PRE1      INSERT DCB & ERROR ADDRESS
      JSB PRE2      INSERT DATA RECORD ADDRESS
      JSB PRE4      MOVE PAST NAME
      JSB STAND     GET STANDARD PARAMS 
      JSB PRE8      READ DATA RECORD
      JMP PRE6,I    & RETURN
      SPC 5 
* 
PRE7  NOP 
* THIS IS THE LAST PREPROCESSING S/R CALLED 
* BY EACH REQUEST 
* IT COMPUTES "DEF RTRN"
      LDA JSBFA     PICK UP THE ADDRESS OF THE
      ADA PRCNT     JSB BUFFER & ADD THE # OF PARMS 
      ADA D2        ALREADY INSERTED THEN ADD 1 FOR 
      LDB JSBFA     THE DEF RTRN & 1 FOR1ST FREE
      INB           WORD THE FIND SLOT FOR DEF RTRN 
      STA B,I       AND INSERT IT FINALLY 
      JMP PRE7,I    RETURN
      SPC 5 
PRE8 NOP
* CHECK THE RECORD SIZE 
      JSB SIZE
* IT IS OK SO SET UP TO READ THE DATA 
* SET UP EXACT WORD LENGTH
      LDA PARMB 
      ADA D5
      LDA A,I 
      STA IDBFL 
* 
* BUILD MODE
      LDA FSTLU     GET THE COMM. LU
      AND MSK2      KEEP ONLY THE LU
      IOR MSK3      INSERT DATA ONLY CODE 
      STA IMODE     SAVE FOR D65CL CALL 
* PICK UP THE DATA
* 
* 
      JSB D65CL 
      DEF *+7 
      DEF IRWR      READ REQUEST
      DEF IMODE 
      DEF DABUF     DATA BUFFER 
      DEF IDBFL     BUFFER LENGTH 
      DEF IRBUF+33  PASS TIME-TAGS TO DRIVER
      DEF IRBUF+34
* 
      JMP ABERR     ERROR RETURN
* 
      JMP PRE8,I    NO,RETURN 
      SPC 5 
      SPC 5 
PRE10 NOP 
      JSB PRE1      GET DCB & ERROR LOC 
      JSB PRE2      GET DATA RECORD ADDRESS 
      JSB PRE4      MOVE POINTER PAST NAME
      JSB STAND     GET STANDARD PARAMETERS 
      JSB SIZE
* IF IT PASSES MUSTER THEN THE REQUEST IS COMPLETE
* AND LOOKS OK SO EXIT BACK TO TO EXECUTE THE REQUEST 
      JMP PRE10,I 
      SPC 5 
PRE11 NOP 
* USED FOR STATUS 
      JSB PRE2
      LDA D124
      STA IDBFL 
      JMP PRE11,I 
      HED RFAEX: POST PROC. * (C) HEWLETT-PACKARD CO. 1976
PST1  NOP 
* NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL 
* REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM 
* USED BY ALL REMOTE FMP & EXEC CALLS 
* NOTE THAT THERE ARE NO CONTROL BYTES
* IN THE RETURNED BUFFER
      LDA PARMB     PICK UP THE ADDRESS TO RETURN 
      ADA D2        THE VALUES TO 
      STA BLOKA 
* 
      LDA SAVEA     PICK UP SAVED A REG CONTENTS
      STA BLOKA,I 
      ISZ BLOKA 
      LDA SAVEB     PICK UP SAVED B REG CONTENTS
      STA BLOKA,I 
      ISZ BLOKA 
* ADJUST THE RETURNED PARAMETER COUNT 
      LDA D4
      STA RPCNT 
      JMP PST1,I
      SPC 5 
PST2  NOP 
* SET THE DATA COUNT
* GET THE TRANSMISSION LOG
      LDA JSBFA 
      ADA D6
      LDA A,I 
      LDA A,I 
      STA BLOKA,I 
      ISZ BLOKA 
      ISZ RPCNT 
* 
* SET THE DATA TOO FLAG 
* 
      CLA,INA 
      STA DATA2 
      JMP PST2,I
      SPC 5 
PST4  NOP 
      JSB PST1
* RETURN THE 124 WORD DISC DIRECTORY FROM LOGICAL 
* UNIT # 2 FOR THE FILE STATUS FMP COMMAND
* SET THE DATA TOO FLAG 
      CLA,INA 
      STA DATA2 
      JMP PST4,I
      SPC 5 
PST6  NOP 
* RETURN IERR 
      LDA FERRA,I 
      STA BLOKA,I 
      ISZ BLOKA 
      ISZ RPCNT 
      JMP PST6,I
      SPC 5 
* 
PST7  NOP 
* RETURN A & B & IERR 
      JSB PST1
      JSB PST6
      JMP PST7,I
      SPC 5 
PST10 NOP 
* READ POST-PROCESSER 
      JSB PST7
      JSB PST2
      JMP PST10,I 
      SPC 5 
PST12 NOP 
* THIS S/R RETURNED FIVE OPTIONAL LOCATION PARAMS 
* THE CALL IS SEARCHED AND A PARAMETER IS ASSEMBLED 
* FOR EACH DEF IN THE CALL THE PROCESS ENDS WHEN A
* ZERO IS ENCOUNTERED IN THE JSB BUFFER 
      JSB PST7      FIRST PUT IN A,B,IERR 
* 
      LDA DM7 
      STA CONTR 
* 
      LDB LOBSA 
LOOP9 LDA B,I 
* 
      STA BLOKA,I 
* 
      INB 
      ISZ BLOKA 
      ISZ RPCNT 
      ISZ CONTR 
      JMP LOOP9 
      JMP PST12,I 
      SPC 5 
      SPC 5 
      HED RFAEX: EXEC PREPROC. * (C) HEWLETT-PACKARD CO. 1976 
      SPC 5 
      SPC 5 
      HED RFAEX: UTILITY S'R'S * (C) HEWLETT-PACKARD CO. 1976 
STUFF NOP 
* NOTE THAT THE E REG NEED BESET UP AT THE START ONLY 
* THEREAFTER (SINCE THE CHARACTERS ARE PICKED UP IN 
* PAIRS) THE START OF EACH WORD IS IN THE 
* RELATIVE LOCATION-& THUS E IS OK FOREVERMORE
* INCREMENT NUMBER OF ASSEMBLED PARAMETERS
* CHECK THE CHAR COUNT FOR "EVENESS"
      LDB D10       SET UP THE ERROR REGISTER 
      LDA PRMLP 
      SLA 
      JMP ERR 
      ISZ PRCNT 
* THE LOOP COUNTER IS ALREADY TO GO-PRMLP 
      LDA APRMS     PICK UP THE ADDRESS OF THE
      STA AJSBF,I   PARAMETER  TO BE BUILT & PUT
*                   IT IN THE JSB BUFFER
* INCREMENT "DEF PARAM" POINTER (JSB BUFFER)
      ISZ AJSBF 
* 
* NOW THE INITIAL CHARACTER MUST BE LOCATED 
      LDA BLOKA     PICK UP 1ST CHAR LOCATION 
      SSA           RIGHT JUSTIFIED?
      CCE,RSS       NO-SET E REG TO 1 
      CLE           YES-SET E REG TO 0
* NOW CLEAR BYTE POINTER
      AND MSK1      CLEAR SIGN & STORE
      STA BLOKA     POINTER TO NEXT PARAMETER 
* PICK UP 1ST CHARACTER 
AGAN4 LDA BLOKA,I   PICK UP 1ST CHAR OF PAIR
      SEZ,RSS       AND LEFT JUSTIFY IT 
      ALF,ALF       IF REQUIRED 
      AND MSK6
      STA PRM4
* PICK UP 2ND CHAR
      SEZ,RSS       HAVE WE CROSSED A WORD BOUNDARY?
* NOTE 2ND CHAR IS OPPOSITE JUSTIFICATION OF 1ST 1
      ISZ BLOKA     YES-INCREMENT SOURCE ADDRESS
* 
      LDA BLOKA,I   PICK UP CHAR & RIGHT JUSTIFY IT 
      SEZ,RSS       IF REQUIRED BEFORE THE MERGING
      ALF,ALF       OF THE TWO CHARS. 
      AND MSK0
* NOW MERGE THE TWO CHARS & STORE THEM
      IOR PRM4
      STA APRMS,I 
      ISZ APRMS 
* NOW A "DEF PRAM" & AT LEAST ONE PARAM WORD
* HAVE BEEN ASSEMBLED-DETERMINE IF THERE ARE
* MORE CHARACTERS IN THIS STRING
      SEZ           HAVE WE CROSSED A WORD BOUNDARY ? 
      ISZ BLOKA     YET-IF SO INCREMENT STORAGE 
      ISZ PRMLP     INCREMENT THE 
      ISZ PRMLP     CHARACTER COUNT-ARE THERE MORE? 
      JMP AGAN4     YES-SET UP TO GET TWO MORE
* WE ARE DONE WITH THIS CHAR SET UP ADDRESS OF
* NEXT CONTROL CHAR TO BE EXTRACTED BY GETCB
* 
      LDA BLOKA     PICK UP CONTROL CHAR ADDRESS-NOW
      SEZ           IS IT IN THE HIGH ORDER BYTE? IF
      IOR MSK5      LEFT JUSTIFIED BIT 15=1 & SET IT
      STA PRAM1     UP FOR THE GETCB CALL TO FOLLOW 
      JMP STUFF,I   AND EXIT
      SPC 5 
SDREQ NOP           SEND THE REPLY WITH STATUS
* AS A REQUEST
* 
* SET THE PARMB RETURN FLAG 
      LDA IRBUF     PICK UP THE STREAM TYPE 
      IOR MSK7      OR IN THE REPLY FLAG
      STA IRBUF     & RETURN TO THE PARMB 
      AND B4000     ISOLATE THE F BIT 
      LDB IRBFL     GET F LENGTH (35) 
      SZA,RSS       F BIT SET ? 
      LDB RPCNT     NO, GET SHORT, COMPUTED LENGTH
      STB LENGT     SAVE
* 
* THIS S/R ASSUMES THAT PREVIOUS POST PROCESSING
* S/R HAVE SET UP THE REQUEST BUFFER TO BE SENT 
* IN REPLY TO THE ORIGIONAL REQUEST 
      LDA FSTLU     GET COMM. LU
      AND MSK2
      STA IMODE 
* REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP 
* & NO DMA AT THE TERMINAL IS ASSUMED 
      JSB D65SV     SEND REQUEST REPLY TO TERMINAL
      DEF *+7 
      DEF IRWW
      DEF IMODE 
      DEF IRBUF 
      DEF LENGT     BUFFER LENGTH 
      DEF DUMMY 
      DEF DUMMY 
* 
      JMP ABERR     ERROR RETURN
* 
      JMP SDREQ,I   NO, RETURN
      SPC 5 
SIZE  NOP 
* FIRST PICK UP THE # OF DATA WORDS 
      LDA PARMB 
      ADA D5
      LDA A,I 
* IS IT ZERO-ERROR IF IT IS 
      SZA,RSS 
      JMP ERR1
* IS IT NEGATIVE-ERROR IF IT IS 
      SSA 
      JMP ERR1
* IT'S POSITIVE BUT IS IT GREATER THAN 128 WORDS
* LONG?-ERROR IF IT IS
      STA IDBFL     SAVE DATA BUFFER LENGTH 
      CMA,INA 
      ADA DABFL 
      SSA 
      JMP ERR1
      JMP SIZE,I
      SPC 5 
SDATA NOP 
* 
* SET UP THE TRANSMIT DATA ONLY CALL MODE 
* AND INSERT IT IN THE CALL 
* 
      LDA FSTLU     GET COMM. LU
      AND MSK2
      IOR MSK3      SEND DATA ONLY
      STA IMODE 
* 
* EXECUTE THE CALL
      JSB D65CL 
      DEF *+7 
      DEF IRWW      WRITE 
      DEF IMODE     DATA ONLY 
      DEF DABUF     DATA BUFFER 
      DEF IDBFL     BUFFER LENGTH 
      DEF IRBUF+33  PASS TIME-TAGS TO DRIVER
      DEF IRBUF+34
* 
      JMP ABERR     ERROR RETURN
* 
      JMP SDATA,I   NO, RETURN
      SPC 5 
      SPC 3 
CODER LDB MD25
      JMP ERR 
      SPC 3 
* 
* D6 PREPROCESSING ERROR
* D7 POSTPROCESSING ERROR 
* D11 SIZE ERROR
ERR   STB SAVEB 
* 
* NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL 
* REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM 
* USED BY ALL REMOTE RFA CALLS
* NOTE THAT THERE ARE NO CONTROL BYTES
* IN THE RETURNED BUFFER
* DETERMINE IF THIS ERROR OCCURED DURING AN RFA READ
* OR WRITE IF SO A STOP COMMAND MUST BE SENT TO CLEAR OUT 
* THE DATA RECORD ON THE LINE 
      LDA PARMB     ISOLATE THE FUNCTION CODE 
      ADA D2
      LDA A,I 
      AND MSK0
      ADA BASE      NORMALIZE IT
      CPA D4        IS IT A 4 (REMOTE WRITE)
      JMP STOP      YES SEND STOP 
      CPA D5        NO-IS IT A 5 (REMOTE READ)
      JMP STOP      YES SEND STOP-ALL OTHERS CONTINUE 
      JMP GO        OTHERWISE BUILD ERROR REPLY 
STOP  LDA FSTLU     GET COMM. LU
      AND MSK2
      STA FSTLU 
* 
      JSB D65CL     SEND STOP 
      DEF *+7 
      DEF ICR       CONTROL REQUEST 
      DEF FSTLU     STOP
      DEF DUMMY 
      DEF DUMMY 
      DEF DUMMY 
      DEF DUMMY 
* 
      JMP ABERR     ERROR RETURN
* 
GO    LDA PARMB 
      ADA D2        THE VALUES TO 
      STA BLOKA 
* 
* SET UP A -1 FOR THE A REG. RETURN 
* THIS WILL ALERT THE TERM. THAT AN ERROR REPLY 
* IS BEING SENT 
      LDA SAVEA 
      STA BLOKA,I 
      ISZ BLOKA 
* PICK UP THE B REG. (ERROR TYPE) 
      LDA SAVEB 
      STB IRBUF+4   SAVE THE ERROR CODE IN THE ERROR RETURN OF THE PARMB
* 
* SET THE REPLY FLAG
      LDA IRBUF     PICK UP THE STREAM WORD 
      IOR MSK7      OR IN THE REPLY FLAG
      STA IRBUF     & RESTORE TO THE BUFFER 
      AND B4000     ISOLATE THE F BIT 
      LDB IRBFL     GET F LENGTH (D35)
      SZA,RSS       F BIT SET ? 
      LDB D25       NO, GET SHORT LENGTH
      STB LENGT     SAVE FOR CALL 
* 
      LDA FSTLU     SET UP DRIVER MODE
      AND MSK2
      STA IMODE 
* REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP 
* & NO DMA AT THE TERMINAL IS ASSUMED 
* 
      JSB D65SV     SEND REQUEST REPLY TO TERMINAL
      DEF *+7 
      DEF IRWW      WRITE 
      DEF IMODE 
      DEF IRBUF 
      DEF LENGT 
      DEF DUMMY 
      DEF DUMMY 
* 
      JMP ABERR     ERROR RETURN
* 
* 
      LDA SAVEB     GET ERROR CODE AGAIN
ABEND LDB CDCBA     GET ADDRSS OF CURRENT DCB 
      ADB D145      STEP TO ERROR WORD
      STA B,I       SAVE ERROR CODE 
      JSB EXEC      TERMINATE TO REACTIVATE RFAM
      DEF *+2 
      DEF D6
      SPC 5 
ERR1  LDA D11 
      JMP ERR 
      SPC 5 
ABERR DST SSA       SAVE DRIVER ERROR RETURN
* OUTPUT ERROR MESSAGE
* 
      LDA B         CONVERT ERROR # 
      IOR B#60      TO ASCII
      STA COMER+6   FOR OUTPUT
* 
      JSB EXEC      OUTPUT ERROR MESSAGE
      DEF *+5 
      DEF D2
      DEF D1
      DEF COMER 
      DEF COMEL 
* 
                                                                                                                                                          