ASMB,L,R,C
*     NAME:   POSNT 
*     SOURCE: 92064-18074 
*     RELOC:  92064-16061 
*     PGMR:   G.A.A.
*     MOD:    G.L.M 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  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 POSNT,7  92064-16061  REV.1650  760426
* 
     ENT POSNT
      EXT EXEC,.ENTR,READF,DSTAT
* 
*     POSNT  IS THE  FILE  POSITION ROUTINE  FOR THE
*            RTE  FILE  MANAGEMENT PACKAGE
* 
*     CALLING  SEQUENCE:
*     CALL POSNT (IDCB,IERR,NP,IR)
*         WHERE:
*           IDCB  IS THE FILES DATA CONTROL BLOCK 
*                 ADDRESS 
*           IERR  IS THE  ERROR RETURN ADDRESS
*                 POSNT ERRORS ARE: 
*              0  NONE
*             -1  DISC DOWN 
*             -5  AN ILLEGAL RECORD WASENCOUNTERED
*                 (LENGTHS AT EACH END DID NOT MATCH
*             -10 NOT ENOUGH PARAMETERS 
*             -11 DCB NOT OPEN
*             -12 EOF OR SOF SENSED 
*           NP    IF >0  THEN SKIP NP RECORDS 
*                 IF <0  THEN BACK SPACE NP RECORDS 
*                 IF =0  THEN  NO  OPERATION
*           IR  (OPTIONAL) IF NOT CODED OR ZERO 
*                 NP  IS RELATIVE  OTHERWIZE
*                 NP IS ABSOLUTE (NP MUST BE>0) 
      SPC 3 
*     PRE  STORAGE
      SPC 1 
.2    OCT 2 
.4    OCT 4 
.5    OCT 5 
N10   DEC -10 
N11   DEC -11 
DFZER DEF ZERO
ZERO  NOP 
* 
* 
POSNT NOP 
      LDA DFZER     RESET ENTRY PARMS 
      STA NP
      STA IR
      LDA POSNT 
      STA DOSNT 
      JMP DOSNT+1 
* 
* 
DCB   NOP 
ER    NOP 
NP    DEF ZERO
IR    DEF ZERO
      SPC 1 
DOSNT NOP           ENTRY POINT 
      JSB .ENTR      FETCH
      DEF DCB         ADDRESSES 
      LDA N10       ENOUGH
      LDB NP         PRAMS
      CPB DFZER       SUPPLIED? 
      JMP EXIT         NO,EXIT
* 
* 
*   SETUP REQUIRED DCB ADDRESSES
* 
* 
      LDA DCB 
      ADA .3
      STA LU
      ADA .2
      STA SPACE 
      ADA .4
      STA OPEN
      ADA .5
      STA RC
* 
      LDA N11       GET NOT OPEN ERROR.CODE TO A
      LDB OPEN,I    GET OPEN FLAG TO B
      CPB XEQT      OPEN
      RSS 
* 
      JMP EXIT      NO;  EXIT OPEN ERROR
* 
      LDA IR,I      GET RELATIVE /ABSOLUTE  FLAG
      CLB           ASSUME ABSOLUTE 
      SZA,RSS       RELATIVE? 
      LDB RC,I      YES; GET CURRENT RECORD NO. 
      ADB NP,I      ADD THE  REQUESTED  MOVEMENT
      STB ABRC      SAVE NEW ABSOLUTE ADDRESS 
      CMB,INB       SET NEGATIVE AND
      ADB RC,I      COMPUTE RELATIVE RECORD NUMBER
      CMB,INB,SZB,RSS SET TO RIGHT  SIGN - ZERO?
      JMP EXOK      YES - GO EXIT 
      STB RCOU      NO;  SET COUNT
      SPC 1 
      JMP TYP0      YES; GO TO TYPE ZERO ROUTINE
*     FORWARD SPACE TYPE ZERO AND 3 AND ABOVE FILES 
* 
FSRC  STB RCOU      SET COUNT 
FSRC1 JSB READF     READ
      DEF REART      A
      DEF DCB,I       RECORD
      DEF ER,I         TO 
      DEF DUM           LOCAL DUMMY 
      DEF .1             ONE WORD BUFFER
      DEF LN
REART SSA           IF ERROR
      JMP EXIT      EXIT
      LDB LN
      SSB 
      JMP EOFEX 
      ISZ RCOU
      JMP FSRC1 
      JMP EXIT
      SPC 2 
N3    DEC -3
      SPC 2 
*     TYPE ZERO  SPACE  ROUTINE 
      SPC 1 
TYP0  CMB,SSB,INB     IF FORWARD  SPACE 
      JMP FSRC      GO TO READ ROUTINE
      SPC 1 
      LDA N3        PRESET FOR ERROR
      LDB SPACE,I   BACK SPACE  GET 
      SSB,RSS       LEGAL CODE
      JMP EXIT      BACK SPACE NOT LEGAL-EXIT 
      SPC 1 
      LDA LU,I      GET AND 
      AND B77       ISOLALE  LU 
      ADA B200      ADD BACK SPACE FUNCTION 
      STA CONND     SET FOR CALL
      CCA           SET FIRST EOF RECORD FLAG 
SPC0  STA OPEN      IN OPEN 
      JSB EXEC      CALL EXEC 
      DEF EXRTN      TO 
      DEF .3          BACK
      DEF CONND         SPACE 
* 
EXRTN LDA LU,I      FETCH   LU
      JSB DSTAT           FOR DYNAMIC STATUS CALL 
* 
*   RETURNS EQT 5-(A)  4-(B)
* 
      AND B200      MASK  EOF BIT 
      CCB           DECREMENT 
      ADB RC,I      THE RECORD COUNT
      STB RC,I
      CCB           SET  B  TO FORWARD SPACE 1
      SZA,RSS       IF  EOF TEST FOR FIRST
      JMP *+3       ELSE SKIP TO COUNT THE RECORD 
      ISZ OPEN      SKIP IF EOF ON FIRST RECORD 
      JMP FSRC      ELSE  GO  FORWARD  SPACE
      ISZ RCOU      DONE? 
      JMP SPC0      NO;  DO NEXT ONE
      JMP EXOK      YES;  GO  EXIT
      SPC 2 
N5    DEC -5
B200  OCT 200 
B77   OCT 77
      SPC 2 
EXOK  CLA,RSS       GOOD EXIT 
EOFEX LDA N12       EOF/SOF EXIT
      SPC 1 
EXIT  STA ER,I      SET ERROR AND 
      JMP DOSNT,I   RETURN
      SPC 2 
N12   DEC -12 
*     POST   STORAGE
      SPC 2 
.1    DEC 1 
.3    DEC 3 
RCOU  NOP 
OPEN  NOP 
RC    NOP 
CONND NOP 
LU    NOP 
SPACE NOP 
LN    NOP 
DUM   NOP 
ABRC  NOP 
      SPC 2 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      SPC 1 
END   EQU * 
      SPC 1 
      END 
                                        