ASMB,L,C
      NAM RWN.C,7 92060-16102 780921 REV. 1901 $CLIB
* 
* REVISED USE OF D.RPx TO .Rx FOR RTE-LC
* 
*     NAME:   RWN.C 
*     SOURCE: 92060-18059 
*     PGMR:   EARL STUTES 
* 
*************************************************************** 
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  ALL RIGHTS     * 
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE-  * 
* REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * 
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.   * 
*************************************************************** 
      SPC 2 
*  THIS PROCEDURE PROVIDES THE REWIND FUNCTION FOR THE COMPILER 
*  LIBRARY/ 
      SPC 3 
* PROC REWIND(FCB); 
* RECORD FCB; 
* BEGIN 
* BOOLEAN READWRITEFLAG := FALSE; 
*   ADDRESSETUP;
*   IF FCB.TYPE = REWIND AND FCB.UNITRECORD THEN
*   [  FCB.UNITRECORD := FALSE; 
*      IF INTERACTIVE(FCB.FLU) THEN 
*        FCB.PROMPT := 0; 
*      ELSE 
*        UNLOCK(FCB.FLU); 
*      FCB.FLU := FCB.SLU;] 
*   IF WRITEBUFFER THEN 
*     GETNEXTSECTOR(FALSE); 
*     IF ERROR THEN GO ERROR EXIT;] 
*    FCB.EXTENT# := 0;
*    GEX.C(3,FALSE);
*             ^ 
*             +---------READWRITEFLAG = WRITE 
*      IF RETURNP1 < 0 THEN 
*        GO ERROR EXIT; 
*      FCB.STARTTRACK := RETURNP4;
*      FCB.STARTSECTOR := RETURNP5 AND @377; ]
*    FCB.OFFSETBLOCK :=0; 
*    FCB.RECORD# := 0;
*    BUFFERVALID := FALSE;
*    FCB.BP ;= 1; 
* END OF REWIND 
      SKP 
      ENT RWN.C 
      EXT ADS.C     ADDRESS SETUP PROC
      EXT C.FLU     FCB PRIMARY FILE LU 
      EXT C.SLU     FCB SECONDARY FILE LU 
      EXT C.STR     FCB START TRACK 
      EXT C.SSC     FCB START SECTOR
      EXT C.RSC     FCB OFFSET BLOCK
      EXT C.FID     FCB ID
      EXT C.EXT     FCB EXTENT #
      EXT C.BFF     FCB BUFFER POINTER
      EXT C.??      FCB PROMPT CHARACTER HOLDER 
      EXT C.WRD     FCB WORD OFFSET POINTER 
      EXT C.RC#     FCB RECORD NUMBER 
      EXT GES.C     THE DISC READ/WRITE ROUTINE 
      EXT GEX.C     THE HIDE THE FMGR/OPSYS ROUTINE 
      EXT .R4     D.RTR RETURN PARAMETER 4
      EXT .R5     D.RTR RETURN PARAMETER 5
      EXT .TTY      THE INTERACTIVE TTY TEST ROUTINE
      EXT LURQ      THE LU LOCK ROUTINE 
      SPC 2 
* PROC REWIND(FCB); 
* RECORD FCB; 
* BEGIN 
UNLOK OCT 40000 
.1    DEC 1 
* BOOLEAN READWRITEFLAG := FALSE; 
RWFLG OCT 0 
LU    BSS 1 
      SPC 2 
RWN.C BSS 1         ENTRY POINT 
*   ADDRESSETUP;
      JSB ADS.C 
      DEC 0 
*   IF FCB.TYPE = REWIND AND FCB.UNITRECORD THEN
      LDA C.FID,I 
      AND =B100007
      CPA =B100004
      JMP *+2 
      JMP WTEST 
*   [ FCB.UNITRECORD := FALSE;
      LDA C.FID,I 
      ELA,CLE,ERA 
      STA C.FID,I 
*     IF INTERACTIVE(FCB.FLU) THEN
      LDA C.FLU,I 
      AND =B77
      STA LU
      JSB .TTY
      DEF *+1+1 
      DEF LU
      SSA,RSS 
      JMP L0X 
*       FCB.PROMPT := 0;
      CLA 
      STA C.??,I
*     ELSE
*       UNLOCK(LU); 
L0X   JSB LURQ
      DEF *+3+1 
      DEF UNLOK 
      DEF LU
      DEF .1
      NOP           DON'T DO ANYTHING ABOUT IT
*     FCB.FLU := FCB.SLU; ] 
      LDA C.SLU,I 
      STA C.FLU,I 
*   IF WRITEBUFFER THEN 
WTEST LDA C.BFF,I 
      SSA,RSS 
      JMP L0
*   [ GETNEXTSECTOR(FALSE); 
      CLA 
      JSB GES.C 
*     IF ERROR THEN GO ERROR EXIT;] 
      JMP RWN.C,I 
*    FCB.EXTENT# := 0;
L0    EQU * 
      CLA 
      STA C.EXT,I 
*    GEX.C(3,FALSE);
      LDA =D3 
      JSB GEX.C 
      DEF RWFLG 
*      IF RETURNP1 < 0 THEN 
*        GO ERROR EXIT; 
      JMP RWN.C,I 
*      FCB.STARTTRACK := RETURNP4;
      LDA .R4 
      STA C.STR,I 
*      FCB.STARTSECTOR := RETURNP5 AND @377; ]
      LDA .R5 
      AND =B377 
      STA C.SSC,I 
*    FCB.OFFSETBLOCK := 0;
      CLA 
      STA C.RSC,I 
*    FCB.RECORD# := 0;
      STA C.RC#,I 
*   BUFFERVALID := FALSE; 
      STA C.BFF,I 
*   FCB.BP ;= 1;
      INA 
      STA C.WRD,I 
* END OF REWIND 
      ISZ RWN.C 
      JMP RWN.C,I 
      END 
        