ASMB,C,Q  
      HED RFMST: 91740-16039 REV 2001 (C) HEWLETT-PACKARD C0. 1980
      NAM RFMST,7 91740-16039 REV 2001 791024 
      SPC 2 
******************************************************************
*  * (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 THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 4 
****************************************************************
* 
*     NAME:         RFMST 
*     SOURCE:       91740-18039 
*     RELOC:        91740-16039 
*     PGMR:         DAN GIBBONS   
* 
* 
*     MODIFIED BY:
* 
*************************************************************** 
      SPC 3 
      ENT DAPOS,DCLOS,DCONT,DCRET,DLOCF 
      ENT DNAME,DOPEN,DPOSN,DPURG,DREAD 
      ENT DSTAT,DWIND,DWRIT 
      EXT .ENTR,D65MS 
* 
      SUP 
      SKP 
* 
*  THIS PROGRAM SUPPORTS ALL REMOTE FILE ACCESS (RFA) MASTER CALLS
*  IN THE DS/1000 SYSTEM.  BELOW ARE THE VALID CALLING SEQUENCES, WITH
*  OPTIONAL PARAMETERS INDICATED BY PARENTHESES: [].  OPTIONAL PARAMETER
*  "ERLOC" WHEN SPECIFIED WILL CONTAIN THE NODAL ADDRESS AT WHICH AN
*  ERROR OCCURRED (IF ANY).  THE PARAMETER "ICR" IN THE "DCRET","DNAME",
*  "DOPEN", AND "DPURG" CALLS IS A 2 WORD ARRAY WITH THE FIRST WORD EQUAL 
*  TO THE REQUIRED CARTRIDGE LABEL AND THE SECOND WORD HAVING THE FILE'S
*  NODAL ADDRESS (DEFAULT IS 0,-1).  ALL OTHER PARAMETERS HAVE THE
*  CONVENTIONAL FMP MEANINGS. 
* 
* 
*     1.  CALL DAPOS(IDCB,IERR,IREC[,IRB,IOFF,ERLOC]) 
*           SETS ABSOLUTE RECORD POSITION OF FILE TO VALUE OF "IREC"
* 
*     2.  CALL DCLOS(IDCB,IERR[,ITRUN,ERLOC]) 
*           CLOSES DCB AND OPTIONALLY TRUNCATES BASED ON "ITRUN". 
* 
*     3.  CALL DCONT(IDCB,IERR,ICON1[,ICON2,ERLOC]) 
*           PERFORMS RTE I/O CONTROL REQUEST FOR TYPE 0 (NON-DISC) FILES. 
* 
*     4.  CALL DCRET(IDCB,IERR,NAME,ISIZE,ITYPE[,ISECU,ICR,ERLOC])
*           CREATES THE NAMED FILE WITH THE SPEDIFIED NUMBER OF BLOCKS. 
*           THE FILE IS LEFT OPEN EXCLUSIVELY TO THE CALLER.
* 
*     5.  CALL DLOCF(IDCB,IERR,IREC[,IRB,IOFF,JSEC,JLU,JTY,JREC,ERLOC]) 
*           FORMATS AND RETURNS LOCATION AND STATUS INFORMATION FOR 
*           THE DCB.
* 
*     6.  CALL DNAME(IDCB,IERR,NAME,NNAME[,ISECU,ICR,ERLOC])
*           RENAMES THE SPECIFIED FILE
* 
*     7.  CALL DOPEN(IDCB,IERR,NAME[,IOPTN,ISECU,ICR,ERLOC])
*           OPENS THE NAMED FILE
* 
*     8.  CALL DPOSN(IDCB,IERR,NUR[,IR,ERLOC])
*           REPOSITIONS FILE
* 
*     9.  CALL DPURG(IDCB,IERR,NAME[,ISECU,ICR,ERLOC])
*           CLOSES THE DCB AND PURGES THE FILE AND ALL ITS EXTENTS
* 
*    10.  CALL DREAD(IDCB,IERR,IBUF,IL[,LEN,NUM,ERLOC]) 
*           READS THE NEXT RECORD INTO THE USER'S BUFFER
* 
*    11.  CALL DSTAT(ISTAT,IERR,IDEST[,ERLOC])
*           RETURNS INFORMATION ON ALL MOUNTED CARTRIDGE LABELS 
*           AT THE NODE SPECIFIED BY "IDEST"
* 
*    12.  CALL DWIND(IDCB,IERR[,ERLOC]) 
*           REWINDS TYPE 0 FILES, OR SETS DISC FILE POSITION TO THE 
*           FIRST RECORD
* 
*    13.  CALL DWRIT(IDCB,IERR,IBUF,IL[,NUM,ERLOC]) 
*           WRITES THE SPECIFIED BUFFER TO THE FILE 
* 
      SKP 
      SPC 3 
* 
*  DAPOS PERFORMS A REMOTE FMGR "APOSN" CALL
* 
DAPOS NOP 
      JSB $PREP     DO REQUEST SET-UP 
CONWD OCT 100000    FUNCTION CODE = 0 
* 
      JSB $VER3     GET & VERIFY 3RD PARAMETER
* 
      STB REQST+8   SAVE IREC IN THE REQST
* 
      LDB PRAMS+4,I GET OPTIONAL IOFF 
      LDA PRAMS+3,I GET THE OPTIONAL IRB
* 
DAPUR DST REQST+9   STORE INTO REQUEST BUFFER 
* 
      JSB $MS65     DO D65MS CALL 
      DEC 11        REQUEST LENGTH
* 
      LDA PRAMS+5 
      JMP $POST     DO REQUEST WRAP-UP
      SKP 
* 
*  DCLOS PERFORMS A REMOTE FMGR "CLOSE" CALL
* 
DCLOS NOP 
      JSB $PREP     PERFORM PRE-PROCESSING
      OCT 100001    FUNCTION CODE = 1 
* 
      LDA PRAMS+2,I GET THE OPTIONAL ITRUN
      STA REQST+8 
* 
      JSB $MS65     DO D65MS CALL 
      DEC 9         REQUEST LENGTH
* 
      JMP DSX       WRAP-UP AND EXIT
      SKP 
* 
*  DCONT PERFORMS A REMOTE FMGR "FCONT" CALL
* 
DCONT NOP 
      JSB $PREP     DO REQUEST PRE-PROCESSING 
      OCT 100002    FUNCTION CODE= 2
* 
*  BELOW CODE IS COMMON TO DCONT AND DPOSN
DCOPS JSB $VER3     GET & VERIFY 3RD PARAMETER ADDR 
      STB REQST+8   SAVE ICON1 (OR NUR) IN REQUEST
* 
      LDB PRAMS+3,I GET OPTIONAL ICON2/ IR
      STB REQST+9 
* 
      JSB $MS65     DO D65MS CALL 
      DEC 10        REQUEST LENGTH
* 
      LDA PRAMS+4 
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DCRET PERFORMS A REMOTE FMGR "CREAT" CALL
* 
DCRET NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
K3    DEC 3         FUNCTION CODE = 3 
* 
      STB REQST+9   SET THE ID SEGMENT ADDRESS
      STB PRAMS,I     IN THE REQST AND IN THE DCB 
* 
      CPA PRAMS+4   TYPE ADDRESS PROVIDED?
      JMP PRERR     NO, PARAMETER ERROR 
      LDB PRAMS+4,I GET TYPE
      STB REQST+13  SAVE IN REQST 
* 
      LDA PRAMS+5,I GET OPTIONAL ISECU
      STA REQST+10
* 
      DLD PRAMS+3,I GET ISIZE (2 WORD PARAMETER)
NNAMA EQU *+1 
      DST REQST+11  SAVE IN REQUEST 
* 
      LDA PRAMS+6   GET ADDRESS OF ICR
      JSB $ICR      SET-UP CR/NODE & MOVE FILE NAME 
* 
      LDA PRAMS     FINISH
      ADA K3          BUILDING
      STB 0,I           THE DCB (STORE NODE)
* 
      JSB $MS65     DO D65MS CALL 
K14   DEC 14        REQUEST LENGTH = 14 
* 
      LDA PRAMS+7 
      JMP DOPNX     WRAP-UP AND EXIT
      SKP 
* 
*  DLOCF PERFORMS A REMOTE FMGR "LOCF" CALL 
* 
DLOCF NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      OCT 100004    FUNCTION CODE = 4 
* 
      JSB $VER3     GET & VERIFY 3RD PARAMETER ADDRESS
* 
      JSB $MS65     DO D65MS CALL 
      DEC 8         REQUEST LENGTH
* 
      LDX N7        SET A COUNTER 
LOOP1 LBX REQST+14  GET A RETURNED VALUE
      LAX PRAMS+9   GET RETURN ADDRESS
      STB 0,I       PASS VALUE BACK 
      ISX           ALL DONE ?
      JMP LOOP1     NO, CONTINUE. 
* 
      LDA PRAMS+9 
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DNAME PERFORMS A REMOTE FMGR "NAMF" CALL 
* 
DNAME NOP 
      JSB $PREP     PERFORM PRE-PROCESSING
K5    DEC 5         FUNCTION CODE = 5 
* 
      JMP DNOPN     DO LOGIC COMMON TO DOPEN
* 
DNNAM LDA PRAMS+3   GET ADDRESS OF NNAME
      SZA,RSS 
      JMP PRERR     NOT PROVIDED
      LDB NNAMA 
      MVW K3        MOVE NEW NAME TO REQST
* 
      JSB $MS65     DO D65MS CALL 
      DEC 14        REQUEST LENGTH
* 
      JMP DRX       WRAP-UP AND EXIT
      SKP 
* 
*  DOPEN PERFORMS A REMOTE FMGR "OPEN" CALL 
* 
DOPEN NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
K6    DEC 6         FUNCTION CODE = 6 
* 
      STB PRAMS,I   SET ID SEG ADDR IN DCB
* 
DNOPN STB REQST+9   SET ID SEG ADDR IN REQUEST
* 
      LDB PRAMS+4,I GET OPTIONAL ISECU
      STB REQST+10  SAVE IN REQST 
* 
      LDB PRAMS+3,I GET OPTIONAL ITRUN
      STB REQST+11
* 
      LDA PRAMS+5   GET ADDRESS OF ICR
      JSB $ICR      SET-UP CR/NODE & MOVE FILE NAME 
* 
      LDA REQST+4 
      CPA K5        DOING "DNAME"?
      JMP DNNAM     YES 
* 
      LDA PRAMS     FINISH
      ADA K3          BUILDING
      STB 0,I           THE DCB.
* 
      JSB $MS65     DO D65MS CALL 
      DEC 12        REQUEST LENGTH
* 
      LDA PRAMS+6 
* 
DOPNX LDX PRAMS     X= ADDR OF USERS 4 WORD DCB 
      LDB REQST+7   GET RFAMD ENTRY # 
      SBX 1         STORE IN 2ND WORD OF DCB
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DPOSN PERFORMS A REMOTE FMGR "POSNT" CALL
* 
DPOSN NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      OCT 100007    FUNCTION CODE = 7 
* 
      JMP DCOPS     REST IS IN COMMON WITH DCONT
      SKP 
* 
*  DPURG PERFORMS A REMOTE FMGR "PURGE" CALL
* 
DPURG NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      DEC 8         FUNCTION CODE = 8 
* 
      LDA PRAMS+4   GET ADDRESS OF ICR
      JSB $ICR      SET-UP CR/NODE & MOVE FILE NAME 
* 
      CLA 
      LDB PRAMS+3,I GET OPTIONAL ISECU
      LDA XEQT      GET ID SEGMENT ADDRESS
* 
      JMP DAPUR     REST IS IN COMMON WITH DAPOS
      SKP 
* 
*  DREAD PERFORMS A REMOTE FMGR "READF" CALL
* 
DREAD NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      OCT 100011    FUNCTION CODE = 9 
* 
      LDB PRAMS+5,I GET THE OPTIONAL NUM
* 
      LDA PRAMS+3,I GET IL
      STA REQST+8   SAVE IT IN THE REQST
      STA RDLEN      AND FOR THE "MS" CALL
* 
      JSB XDATA     DO COMMON DREAD/DWRIT LOGIC 
* 
      LDA PRAMS+4 
      LDB REQST+7   PASS OPTIONAL LEN 
      STB 0,I         IF REQUIRED BY THE USER 
* 
DRX   LDA PRAMS+6 
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DSTAT PERFORMS A REMOTE FMGR "FSTAT" CALL
* 
DSTAT NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
K10   DEC 10        FUNCTION CODE = 10
* 
      JSB $VER3     GET & VERIFY THE 3RD PARAMETER ADDRESS
      STB REQST+3   STORE "IDEST" IN REQUEST
      LDA K125
      STA RDLEN     SET DATA READ LENGTH = 125
* 
      JSB $MS65     DO D65MS CALL 
      DEC 7 
* 
DSX   LDA PRAMS+3 
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DWIND PERFORMS A REMOTE FMGR "RWNDF" CALL
* 
DWIND NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      OCT 100013    FUNCTION CODE = 11
* 
      JSB $MS65     DO D65MS CALL 
      DEC 8 
* 
      LDA PRAMS+2 
      JMP $POST     WRAP-UP AND EXIT
      SKP 
* 
*  DWRIT PERFORMS A REMOTE FMGR "WRITF" CALL
* 
DWRIT NOP 
      JSB $PREP     PERFORM REQUEST PRE-PROCESSING
      OCT 100014    FUNCTION CODE = 12
* 
      LDB PRAMS+4,I GET THE OPTIONAL NUM
      LDA PRAMS+3,I GET IL
      STA REQST+8   STORE IN REQUEST
      INA,SZA       SKIP IF WRITE EOF 
      LDA REQST+8 
      STA WRLEN     SAVE WRITE LENGTH FOR MS CALL 
* 
      JSB XDATA     PERFORM COMMON DREAD/DWRIT LOGIC
* 
      LDA PRAMS+5 
      SKP 
* 
*  COMMON REQUEST POST-PROCESSING LOGIC 
* 
$POST LDB REQST+6   GET THE ERROR LOCATION
      STB 0,I       RETURN IT (OPTIONALLY)
      LDA REQST+5   ERROR CODE
* 
$PST2 STA PRAMS+1,I RETURN ERROR CODE 
      JMP CALL,I    RETURN FROM MASTER RFA CALL 
      SPC 4 
* 
*  THIS SUBROUTINE IS COMMON TO DREAD AND DWRIT 
* 
XDATA NOP 
      STB REQST+9   SAVE THE OPTIONAL NUM 
      SSA           LENGTH NEGATIVE ? 
      JMP PRERR     YES, ILLEGAL
      ADA N513      IL > 512 ?
      SSA,RSS 
      JMP PRERR     YES, TOO MUCH 
* 
      CLA 
      CPA PRAMS+3   WAS "IL" SPECIFIED? 
      JMP PRERR     NO, PARAMETER ERROR 
* 
      LDA PRAMS+2   GET BUFFER ADDRESS
      STA PRAMS     SAVE FOR MS CALL SUBROUTINE 
* 
      JSB $MS65     CALL D65MS
      DEC 10
* 
      JMP XDATA,I   RETURN
      SKP 
* 
*  COMMON REQUEST PRE-PROCESSING ROUTINE FOR ALL MASTER RFA CALLS 
* 
$PREP NOP 
* 
      CLB           CLEAN OUT PARAMETER AREA
      LDX K10 
LOOP  SBX PRAMS-1 
      DSX 
      JMP LOOP
* 
      LDB $PREP 
      ADB N2
      LDB 1,I       GET RETURN POINT
      STB CALL      SAVE
      JMP CALL+1
* 
PRAMS REP 10
      NOP 
CALL  NOP 
      JSB .ENTR     GET ADDRESSES OF PARAMETERS 
      DEF PRAMS 
      LDA K6
      STA REQST     SET RFA STREAM
      LDA PRAMS+1 
      SZA,RSS       AT LEAST 2 PARAMETERS SPECIFIED?
      JMP CALL,I    NO, RETURN NOW! 
      LDA $PREP,I   GET FUNCTION CODE/ MOVE DCB FLAG
      ISZ $PREP 
      RAL,CLE,ERA   CLEAR SIGN BIT
      STA REQST+4   SET FUNCTION CODE IN REQUEST
      SEZ,RSS       DCB MOVE REQUIRED?
      JMP $PREX     NO
* 
*   MOVE DCB TO THE REQUEST BUFFER
* 
      LDA PRAMS     GET ADDR OF DCB 
      LDB NAMA      ADDR OF NAME FIELD IN REQUEST 
      MVW K3        MOVE IT 
      LDA 0,I       GET DESTINATION FROM 4TH DCB WORD 
      STA REQST+3   SET INTO REQUEST
*  RETURN WITH B= XEQT, A= 0
$PREX LDB XEQT
      CLA 
      STA WRLEN     INITIALIZE DATA 
      STA RDLEN      BUFFER LENGTHS FOR MS CALL 
      JMP $PREP,I   RETURN
      SKP 4 
* 
*  SUBROUTINE TO PERFORM D65MS CALL 
* 
$MS65 NOP 
      JSB D65MS 
      DEF *+8 
      DEF CONWD 
      DEF REQST     REQUEST BUFFER
      DEF $MS65,I 
      DEF PRAMS,I   DATA ADDRESS (IF ANY) 
      DEF WRLEN 
      DEF RDLEN 
      DEF K14       MAX ALLOWED REPLY LENGTH
* 
      JMP COMER     ERROR RETURN
* 
$MSEX ISZ $MS65 
      JMP $MS65,I   RETURN
* 
*  SUBROUTINE TO SET-UP CARTRIDGE REFERENCE AND NODAL ADDRESS 
*  TO EITHER THE PASSED VALUES OR DEFAULTS
* 
$ICR  NOP 
      STA $MS65 
      JSB $VER3     GET & VERIFY THE 3RD PARAMETER ADDRESS
      LDA PRAMS+2   GET ADDRESS OF NAME FIELD 
      LDB NAMA      GET ADDRESS OF NAME FIELD IN REQUEST
      MVW K3        MOVE IT 
      LDA $MS65     RELOAD ICR ADDRESS
      CCB           LOCAL NODE DESIGNATOR (DEFAULT) 
      SZA,RSS       **** TEMPORARY INSTRUCTIONS UNTIL ****
      JMP *+3       **** THE 21MX-XE IS FIXED!        ****
      DLD 0,I       GET ICR & NODE
      STA REQST+8   SAVE THE CARTRIDGE #
      STB REQST+3   SAVE THE DESTINATION NODE 
      JMP $ICR,I    RETURN
      SKP 
COMER LDA REQST+4   GET ALPHABETIC PART OF THE ERROR
      CPA "DS"      IS IT "DS"? 
      JMP DSERR     YES 
      LDA N999      NO, REPORT IT AS A -999 ERROR 
      JMP NOTDS 
* 
DSERR LDA REQST+5   GET THE NUMERICAL PART OF THE ERROR 
      AND B17         CODE AND DECODE IT
      CMA,INA       NEGATE IT 
      ADA N50 
NOTDS LDB REQST+6   GET ERROR LOCATION
      ELB,CLE,ERB   STRIP THE SIGN BIT
NAMA  EQU *+1 
      DST REQST+5   RESTORE THE ERROR LOCATION
      JMP $MSEX     RETURN
* 
"DS"  ASC 1,DS
N999  DEC -999
      SPC 3 
* 
*  SUBROUTINE TO GET & VERIFY THE 3RD PARAMETER ADDRESS 
* 
$VER3 NOP 
      CLA           ALWAYS RETURN A=0 
      CPA PRAMS+2   3RD PARAMETER ADDRESS 
      JMP PRERR     NOT SPECIFIED, GIVE ERROR 
      LDB PRAMS+2,I GET 3RD PARAMETER 
      JMP $VER3,I     & RETURN
      SPC 2 
* 
PRERR LDA N10       INSUFFICIENT PAAMETERS, GIVE -10 ERROR
      JMP $PST2 
      SKP 
* 
*     CONSTANTS & VARIABLES 
* 
XEQT  EQU 1717B 
* 
WRLEN NOP 
RDLEN NOP 
B17   OCT 17
K125  DEC 125 
N2    DEC -2
N7    DEC -7
N10   DEC -10 
N50   DEC -50 
N513  DEC -513
* 
REQST REP 14
      NOP 
      SPC 3 
      END 
                                                                                                                                                                                                      