ASMB,Q,C
      HED FOPEN: HP 3000 RFA SUBROUTINE * (C) HEWLETT-PACKARD CO. 
      NAM FOPEN,7 91750-1X119 REV.2013 790328 MEF 
      SPC 1 
******************************************************************
*  * (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 2 
      ENT FOPEN,D$RFH 
* 
      EXT .ENTR,D3KMS,D$INI,D$STW,D$3BF 
      EXT D$PRM,D$NWD,D$ASC,D$RQB,D$ERR 
      SPC 2 
      UNL           NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING 
*  NAME: FOPEN
*SOURCE: 91750-18119
* RELOC: 91750-1X119
*  PGMR: DMT
      LST 
*************************  FOPEN  ************************* 
*                                                         * 
*    SOURCE: 91750-18119                                  * 
*                                                         * 
*    BINARY: 91750-1X119                                  * 
*                                                         * 
*    PROGRAMMER: JIM HARTSELL                             * 
*                                                         * 
*    DATE: AUGUST 7, 1975                                 * 
*                                                         * 
*---------------------------------------------------------* 
*                                                         * 
*   MODIFIED FOR DS/1000 ENHANCEMENTS BY DMT BEGINNING    * 
*   MARCH 26, 1979.                                       * 
*                                                         * 
*********************************************************** 
      SPC 2 
A     EQU 0 
B     EQU 1 
      SPC 2 
FOPEN NOP           ENTRY POINT.
      LDA DPRAM     CLEAR OLD PARAM ADDRESSES.
      STA ENTRY 
      LDB COUNT 
      CLA 
      STA ENTRY,I 
      ISZ ENTRY 
      INB,SZB 
      JMP *-3 
      LDA FOPEN 
      STA ENTRY 
      JMP BEGIN 
COUNT DEC -13 
* 
PRAMS NOP           FILE NAME (BYTE ARRAY)
      NOP           FOPTIONS
      NOP           AOPTIONS
      NOP           RECORD SIZE 
      NOP           DEVICE SPECS (BYTE ARRAY) 
      NOP           FORMS MESSAGE (BYTE ARRAY)
      NOP           # USER LABELS 
      NOP           BLOCK FACTOR
      NOP           # BUFFERS 
      NOP           FILE SIZE (DBL-WORD)
      NOP           # EXTENTS 
      NOP           INITALLOC 
      NOP           FILE CODE 
* 
ENTRY NOP           ENTRY POINT.
BEGIN JSB .ENTR     GET ADDRESSES OF USER PARAMS. 
DPRAM DEF PRAMS 
      CLA           CLEAR ERROR CODE FOR FCHEK. 
      CLB 
      DST D$ERR 
* 
* BUILD THE REQUEST BUFFER. BEGIN WITH SETUP OF 
* 8-WORD FIXED FORMAT HEADER FOR RFA, THEN "RFA " IN
* THE NEXT TWO WORDS. 
* 
      LDA DPRAM     POINT TO ADDR OF FIRST PARAM. 
      JSB D$INI     INITIALIZE BUFFER STUFFERS. 
* 
      JSB D$RFH     SET CLASS, STREAM, & "RFA ".
* 
      CLA,INA 
      JSB D$STW     FOPEN CODE = 1. 
* 
* MOVE USER CALL PARAMETERS TO REQUEST BUFFER.
* 
      LDA N9        MOVE DUMMY,FOPTN,AOPTN,RECSZ, 
      JSB D$PRM      DUMMY,DUMMY,ULABL,BLCKF,NUMBF. 
* 
      LDA N2        MOVE FILE SIZE
      JSB D$NWD      (DOUBLE-WORD PARAM). 
* 
      LDA N3        MOVE NUMXT,INALC,FLCOD. 
      JSB D$PRM 
* 
* SET UP PARAMETER MASK FOR 13 PARAMS: BIT 12 REPRESENTS THE
* FILENAME PARAM; BIT 0 REPRESENTS FILECODE.  IF A BIT IS SET,
* THAT PARAMETER WAS SPECIFIED IN THE CALLING SEQUENCE. 
* 
      LDA DPRAM     POINTER TO PARAM ADDRESSES. 
      STA TEMP
      LDA N13       MAX. OF 13 PARAMS.
      STA TEMP1 
      CLA,RSS 
MSK   RAL           SHIFT ACCUMULATED BITS. 
      LDB TEMP,I    SEE IF PARAM GIVEN. 
      SZB 
      IOR B1        YES. SET THE BIT. 
      ISZ TEMP
      ISZ TEMP1 
      JMP MSK       LOOP FOR 13 PARAMS. 
      STA TEMP      SAVE PRELIMINARY MASK.
* 
* FOR ASCII PARAMETERS, CHECK WHETHER A FILLER OF ZERO
* WAS GIVEN TO SPECIFY NO PARAMETER.
* 
      CLA           CLEAR (A) IN CASE PARAM NOT SPECIFIED.
      CLB           INITIALIZE RESET MASK.
      LDA PRAMS,I   GET 1ST WORD OF FILE NAME (ASCII).
      SZA,RSS 
      LDB B10K      NO FILE NAME. SET BIT 12. 
      CLA           CLEARED IN CASE NO PARAM. 
      LDA PRAMS+4,I GET 1ST WORD OF DEV NAME. 
      SZA,RSS 
      ADB B400      NO DEV NAME. SET BIT 8. 
      CLA           CLEARED IN CASE NO PARAM. 
      LDA PRAMS+5,I GET 1ST WORD OF FORMMSG.
      SZA,RSS 
      ADB B200      NO FORMMSG. SET BIT 7.
      CMB           COMPLIMENT (B), 
      LDA TEMP       GET THE PRELIMINARY MASK,
      AND B          AND CLEAR REQUIRED BITS. 
* 
      JSB D$STW     STORE MASK IN REQUEST.
      INA 
      STA NBYTS 
* 
* MOVE ASCII STRINGS TO REQUEST BUFFER. 
* 
      CLA           CLEAR BYTE POINTERS IN REQUEST. 
      LDB D$RQB 
      ADB D11 
      STA B,I         FILE NAME POINTER.
      ADB B4
      STA B,I         DEV NAME POINTER. 
      INB 
      STA B,I         FORMMSG POINTER.
* 
      LDA PRAMS     CHECK IF FILE NAME SPECIFIED. 
      LDB A,I 
      SZA 
      SZB,RSS 
      JMP SEND      NO NAME.
      LDB D$RQB     GET ADDR OF FLNAME BYTE 
      ADB D11        POINTER IN RQBUF.
      LDA NBYTS     REPLACE DUMMY VALUE WITH
      ADA N1
      STA B,I        BYTE POINTER TO ASCII STRING.
      LDA PRAMS     MOVE FILE NAME ASCII STRING 
      LDB N14 
      JSB D$ASC       TO REQUEST BUFFER.
      INA 
      STA NBYTS 
* 
      LDA PRAMS+4   CHECK IF DEV NAME SPECIFIED.
      LDB A,I 
      SZA 
      SZB,RSS 
      JMP FRMSG     NO NAME. GO CHECK FORMMSG.
      LDB D$RQB 
      ADB D15 
      LDA NBYTS     REPLACE DUMMY VALUE WITH
      ADA N1
      STA B,I        BYTE POINTER TO ASCII STRING.
      LDA PRAMS+4   MOVE DEVICE NAME. 
      LDB N4        MAX WORDS (NEG).
      JSB D$ASC 
      INA 
      STA NBYTS 
* 
FRMSG LDA PRAMS+5   CHECK IF FORMMSG SPECIFIED. 
      LDB A,I 
      SZA 
      SZB,RSS 
      JMP SEND      NO FORMMSG. 
      LDB D$RQB 
      ADB D16 
      LDA NBYTS     REPLACE DUMMY VALUE WITH
      ADA N1
      STA B,I        BYTE POINTER TO ASCII STRING.
      LDA PRAMS+5   MOVE FORMS MESSAGE. 
      LDB N25       MAX WORDS (NEG).
      JSB D$ASC 
* 
* REQUEST BUFFER READY: D3KMS WILL WRITE IT TO QUEX'S 
* I/O CLASS. USER WILL BE SUSPENDED UNTIL D3KMS'S CLASS GET 
* IS COMPLETED WHEN THE REPLY ARRIVES. D3KMS WILL RETURN
* WITH A-REG = STATUS WORD (FILE NUMBER). 
* 
SEND  JSB D3KMS     SHIP THE REQUEST BUFFER TO QUEX.
      DEF *+2 
      DEF BIT15     NO ABORT. 
      JMP ABERR     ERROR RETURN. 
* 
      AND B377      ISOLATE FILE NUMBER IN A-REG. 
      JMP ENTRY,I   RETURN TO USER. 
* 
ABERR DST D$ERR     STORE CODE FOR FCHEK RETRIEVAL. 
      CLA 
      JMP ENTRY,I   FILE NUMBER = 0.
      SPC 3 
* 
* D$RFH - COMMON SUBROUTINE FOR ALL RFA CALLS TO 3000.
* SET UP FRONT END OF REQUEST BUFFER. 
* 
D$RFH NOP 
      LDA B7        STORE MESSAGE CLASS = 7.
      STA D$3BF 
      LDA B20       STORE STREAM TYPE = 20 OCTAL. 
      STA D$3BF+2 
      LDA "RF"
      JSB D$STW     STORE "RFA ". 
      LDA "A" 
      JSB D$STW 
      JMP D$RFH,I   RETURN. 
      SPC 4 
* 
* CONSTANTS AND WORKING STORAGE.
* 
B1    OCT 1 
B4    OCT 4 
B7    OCT 7 
B20   OCT 20
B377  OCT 377 
B200  OCT 200 
B400  OCT 400 
B10K  OCT 10000 
D11   DEC 11
D15   DEC 15
D16   DEC 16
N1    DEC -1
N2    DEC -2
N3    DEC -3
N4    DEC -4
N9    DEC -9
N13   DEC -13 
N14   DEC -14 
N25   DEC -25 
"RF"  ASC 1,RF
"A"   ASC 1,A 
BIT15 OCT 100000
NBYTS OCT 0 
TEMP  NOP 
TEMP1 NOP 
* 
      END 
                                                              