ASMB,R,Q,C
*     NAME:   PTAPE 
*     SOURCE: 92070-18235 
*     RELOC:  92070-1X235 
*     PGMR:   HLC 
* 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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 PTAPE,7  92070-1X235  REV.1941  790205
      ENT PTAPE 
      EXT REIO,.ENTR
* 
* 
*     CALLING SEQUENCE
*         CALL PTAPE(UNIT, #FILES, #RECORDS)
* 
*         UNIT ------ RTE LOGICAL UNIT NUMBER   
*         #FILES ---- > 0 FOR FORWARD 
*                     < 0 FOR REVERSE 
*         #RECORDS -- > 0 FOR FORWARD 
*                     < 0 FOR REVERSE 
*                     (A FILE MARK ENCOUNTERED DURING RECORD
*                         SPACING COUNTS AS ONE RECORD) 
* 
*     A BACKSPACE FILE LEAVES THE TAPE AT THE BEGINNING OF THE FILE.
*     AN END-OF-TAPE CONDITION CAUSES IMMEDIATE RETURN TO THE USER. 
* 
* 
UNIT  NOP           LOGICAL UNIT NUMBER 
FILES NOP 
RECS  NOP 
* 
* 
PTAPE NOP           
      JSB .ENTR     TRANSFER
      DEF UNIT               PARAMETERS 
      LDA UNIT,I    
      AND =B77      ISOLATE UNIT NUMBER 
      SZA,RSS 
      JMP PTAPE,I   BIT BUCKET
      IOR =B40200   CONFIGURE BACKSPACE CONTROL WORD
      STA BSR       
      IOR =B100     CONFIGURE FORWARD SPACE 
      STA FSR       
      XOR =B500     CONFIGURE DYNAMIC STATUS REQUEST
      STA DSTAT     
* 
      LDA RECS,I    GET NUMBER OF RECORDS 
      STA RECS           AND SAVE IT
      LDB FILES,I   GET NUMBER OF FILES 
      JSB ABS       SET UP FOR FILE SPACING 
      JMP RCRD      NO FILES
      JSB SPACE     SPACE A RECORD  
      JMP *-1       FILE MARK NOT FOUND: DO ANOTHER 
      ISZ COUNT     FILE MARK FOUND: ENOUGH SPACED? 
      JMP *-3       NO: REPEAT
      LDA FILES,I   GET ORIGINAL FILE COUNT AGAIN 
      SSA           HAVE WE BEEN BACKSPACING? 
      ISZ RECS      YES: ADD 1 TO THE RECORD COUNT
      RSS           IF NOT ZERO, SPACE RECORDS  
      JMP PTAPE,I   ELSE RETURN TO USER 
* 
* 
RCRD  LDB RECS      GET NUMBER OF RECORDS 
      JSB ABS       SET UP FOR RECORD SPACING 
      JMP PTAPE,I   NO RECORDS: RETURN TO USER
      JSB SPACE     SPACE A RECORD OR TO FILE MARK
      NOP           FILE MARK NOT FOUND 
      ISZ COUNT     ENOUGH RECORDS SPACED?
      JMP *-3       NO: SPACE ANOTHER 
      JMP PTAPE,I   RETURN TO USER
* 
* 
SPACE NOP           ENTRY POINT TO TAPE MOTION SECTION
      JSB REIO      GET DYNAMIC STATUS  
      DEF *+3       RETURN ADDRESS
      DEF RCODE     I/O CONTROL REQUEST CODE  
      DEF DSTAT     DYNAMIC STATUS CONTROL WORD 
      RRR 5         
      SLA           END OF TAPE?
      JMP PTAPE,I   YES: RETURN IMMEDIATELY TO USER 
* 
* 
      JSB REIO      NO: SPACE THE TAPE
      DEF *+3       RETURN ADDRESS
      DEF RCODE     CONTROL REQUEST 
      DEF FUNCT     FUNCTION CONTROL WORD 
      RRR 4         SHIFT SOT BIT TO POSITION 15
      SLA           START OF TAPE?
      JMP PTAPE,I   YES: RETURN TO USER 
      RRR 3 
      SLA           NO: END OF FILE MARK FOUND? 
      ISZ SPACE     
      JMP SPACE,I   
* 
* 
ABS   NOP           ENTRY TO SPACE SET UP ROUTINE 
      LDA FSR       GET FORWARD SPACE CONTROL WORD
      SSB           IS COUNT NEGATIVE?
      LDA BSR       YES: GET BACKSPACE CONTROL WORD 
      STA FUNCT     
      SSB,RSS       IS COUNT POSITIVE?
      CMB,INB       YES: TAKE 2'S COMPLIMENT
      STB COUNT     STORE NEGATIVE COUNT
      SZB           IS COUNT ZERO?
      ISZ ABS       NO: INCREMENT RETURN ADDRESS
      JMP ABS,I     RETURN
* 
* 
FSR   NOP           FORWARD SPACE CONTROL WORD
BSR   NOP 
RCODE DEC 3         I/O CONTROL REQUEST CODE
DSTAT NOP           DYNAMIC STATUS CONTROL WORD 
FUNCT NOP           DEFINED CONTROL WORD  
COUNT EQU UNIT      'UNIT' DOUBLES AS RECORD COUNT
      END 
                                                                                                                                                                          