ASMB,R,L,C
      HED (FMP) LOCF: RETRIEVE FILE STATUS AND POSITION 
*     NAME:   LOCF
*     SOURCE: 92071-18045 
*     RELOC:  92071-16045 
*     PGMR:   G.A.A.
*     MOD:    M.L.K., E.D.B.
* 
*  ***************************************************************
*  * (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 LOCF,7 92071-1X045 REV.2041 800905
* 
      ENT LOCF,  ELOCF
* 
      EXT GTOPN, CV.RB
      EXT .ENTR, $SETP
* 
      EXT F.DCB, F.LU,  F.TYP, F.SIZ, F.RCL 
      EXT F.FLG, F.RCN, F.DLU 
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     LOCF RETURNS THE CURRENT STATUS OF A
*          RTE FILE TO THE CALLER.
* 
*     THE FORTRAN CALLING SEQUENCE IS:
* 
*     CALL LOCF(IDCB,IERR,IREC,IRB,IOFF,JSEC,JLU,JTY,JREC)
* 
*     WHERE:
* 
*     IDCB   IS THE DATA CONTROL BLOCK FOR THE FILE 
* 
*     IERR   WILL BE THE ERROR RETURN CODE
* 
*     IREC   WILL BE THE RECORD NUMBER OF THE NEXT RECORD 
* 
*     IRB    WILL BE THE RELATIVE BLOCK OF THE NEXT RECORD
*            (OPTIONAL) 
* 
*     IOFF   WILL BE THE WORD OFFSET OF THE NEXT RECORD (OPTIONAL)
* 
*     JSEC   WILL BE THE FILE'S EXTENT SIZE (IN SECTORS) (OPTIONAL) 
* 
*     JLU    WILL BE THE FILE'S LOGICAL UNIT NUMBER (OPTIONAL)
* 
*     JTY    WILL BE THE FILE'S TYPE (OPTIONAL) 
* 
*     JREC   WILL BE THE FILE'S RECORD LENGTH (OPTIONAL)
* 
*     POSSIBLE ERRORS:
* 
*       0  NO ERROR 
*     -11  DCB NOT OPEN 
*     -10  NOT ENOUGH PARAMETERS
      SKP 
* 
*     ENTRY 
* 
ELOCF NOP           DOUBLE WORD ENTRY POINT 
      CCA           SET DOUBLE WORD FLAG
      LDB ELOCF     AND GET RETURN ADDRESS
      JMP SETUP     GO FINISH SET UP
* 
LOCF  NOP 
      CLA           CLEAR DOUBLE WORD FLAG
      LDB LOCF      GET RETURN ADDRESS
* 
SETUP STA DBLWD     STORE DBL FLAG
      STB DOCF      STORE RETURN ADDRESS
      LDA DDUM
      STA IREC
      STA IRB 
      STA IOFF
      STA JSEC
      STA JLU 
      STA JTY 
      STA JREC
      JMP DOCF+1
* 
IDCB  NOP 
IERR  NOP 
IREC  DEF DUM 
IRB   DEF DUM 
IOFF  DEF DUM 
JSEC  DEF DUM 
JLU   DEF DUM 
JTY   DEF DUM 
JREC  DEF DUM 
* 
DOCF  NOP           ENTRY 
      JSB .ENTR     GET 
      DEF IDCB      PARAMETERS ADDRESSES
* 
      LDB IREC      PRAM
      CPB DDUM       TEST 
      JMP ER10        NOT ENOUGH - EXIT 
* 
      LDA IDCB      SET UP POINTERS INTO DCB
      LDB F.DCB 
      JSB $SETP 
      DEF .16 
      NOP 
* 
      JSB GTOPN     GET PROGRAM'S OPEN FLAG 
      DEF *+1 
      CPA F.FLG,I   IS IT THE SAME AS IN DCB? 
      RSS 
      JMP ER11      NO, TAKE ERROR EXIT 
      SKP 
* 
*     PROCESS REQUEST 
* 
      LDA F.TYP,I   GET THE TYPE
      SZA,RSS       IS IT ZERO? 
      JMP TYPST      YES, JUMP
* 
      ADA N3        NOW TEST IF TYPE 3
      SSA           IF NOT TYPE 3,
      JMP RALOC      THEN LOCATE RANDOM ACCESS
* 
      JSB CV.RB     COMPUTE CURRENT LOCATION
      JMP STRS
* 
RALOC CCA           SUBTRACT ONE
      ADA F.RCN,I    FROM RECORD NUMBER 
      CLB 
      MPY F.RCL,I   MULTIPLY BY RECORD LENGTH 
      DIV .128       DIVIDE BY WORDS / BLOCK
* 
STRS  STA IRB,I     GIVE RELATIVE BLOCK TO CALLER 
      STB IOFF,I    GIVE WORD OFFSET TO CALLER
* 
TYPST LDB F.TYP,I   GET FILE TYPE AGAIN 
      STB JTY,I      AND GIVE TO CALLER 
* 
      LDA F.LU,I    GET DISC FILE LU
      SZB,RSS       IF NOT DISC FILE? 
      LDA F.DLU,I    THEN USE DEVICE LU 
      AND B77       ISOLATE LU
      STA JLU,I      AND GIVE TO CALLER 
* 
      LDA F.RCL,I   GET THE RECORD LENGTH 
      STA JREC,I     AND GIVE TO CALLER 
* 
      ISZ DBLWD     TEST DOUBLE WORD FLAG 
      JMP SINGL      DO 16-BIT STORES 
* 
      CLA           CLEAR UPPER 16 BITS OF DOUBLE INTEGERS
      LDB F.RCN,I 
      DST IREC,I
      LDB F.SIZ,I 
      DST JSEC,I
      LDB IRB,I 
      DST IRB,I 
      JMP EXIT      RETURN
* 
SINGL LDB F.RCN,I 
      STB IREC,I
      LDB F.SIZ,I 
      STB JSEC,I
      SKP 
* 
*     EXIT
* 
EXIT  CLA           NO ERROR INTENDED 
      JMP EREX
* 
ER10  LDA N10       NOT ENOUGH PARAMETERS 
      JMP EREX
* 
ER11  LDA N11       FILE NOT OPEN 
* 
EREX  STA IERR,I    SAVE ERROR
      JMP DOCF,I     AND RETURN 
      SKP 
* 
*     STORAGE AREA
* 
.16   DEC 16
.128  DEC 128 
* 
N3    DEC -3
N10   DEC -10 
N11   DEC -11 
* 
B77   OCT 77
* 
DDUM  DEF DUM 
* 
DBLWD NOP           DOUBLE WORD FLAG
* 
DUM   NOP           DUMMY RETURN ADDRESS
      NOP            (TWO WORDS)
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
                                                                                                                                                                                                      