ASMB,R,L,C
      HED (FMGR) LL.UT: LIST FILE UTILITY ROUTINES
*     NAME:   LL.UT 
*     SOURCE: 92071-18217 
*     RELOC:  92071-16217 
*     MOD:    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 LL.UT,7 92071-1X217 REV.2041 800807 
* 
      ENT L.OPN, L.HED, L.WRT, L.SPC, L.WEF 
* 
      EXT O.BUF, TMP., CR.L, SC.L, .E.R 
      EXT JER.
      EXT OPENF, WRITF
      EXT .ENTR, EXEC, FTIME
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     THESE ROUTINES PROVIDE A STANDARD ACCESS THE THE FMGR LIST
*     FILE
* 
* 
*     L.OPN OPENS THE LIST FILE (USING O.BUF FOR THE DCB) 
* 
*     CALLING SEQUENCE: L.OPN 
* 
*     L.HED WRITES A BUFFER TO THE LIST FILE
*     CONCATENATED WITH THE CURRENT TIME (IN COLUMNS 40:65) 
* 
*     CALLING SEQUENCE: L.HED(BUF)
* 
*     WHERE:
* 
*     BUF    IS THE BUFFER TO BE WRITTEN (36-WORD ARRAY). 
*            THE FIRST WORD IS RESERVED FOR CARRIAGE CONTROL, 
*            IF THE LIST FILE IS A LINE PRINTER.
*            WORDS 21 THROUGH 36 WILL BE REPLACED WITH THE
*            CURRENT TIME.
* 
* 
*     L.WRT WRITES A BUFFER TO THE LIST FILE
* 
*     CALLING SEQUENCE: 
* 
*     L.WRT(BUF,LEN)
* 
*     WHERE:
* 
*     BUF    IS THE BUFFER TO BE WRITTEN (LEN-WORD ARRAY).
*            THE FIRST WORD IS RESERVED FOR CARRIAGE CONTROL, 
*            IF THE LIST FILE IS A LINE PRINTER.
* 
*     LEN    IS THE LENGTH (IN WORDS) OF BUF
* 
* 
*     L.SPC SPACES THE LIST FILE. 
* 
* 
*     L.WEF WRITES AN EOF MARK ON THE LIST FILE.
      SKP 
* 
*     L.OPN SUBROUTINE
* 
L.OPN NOP 
* 
      JSB OPENF     OPEN LIST FILE
      DEF *+7 
      DEF O.BUF 
      DEF .E.R
      DEF TMP.
      DEF ZERO
      DEF SC.L
      DEF CR.L
* 
      JSB JER.      CHECK FOR BREAK OR ERROR
* 
      LDA .E.R      GET FILE TYPE 
      SZA,RSS       IF TYPE ZERO, 
      JMP TYP0       THEN DO TYPE ZERO STUFF
* 
      CLA           INDICATE
      STA LP         NOT LINE PRINTER 
      STA TTY         AND NOT TERMINAL
      JMP L.OPN,I   RETURN
* 
TYP0  LDA O.BUF+3   GET DEVICE LU FROM DCB
      AND B77        ISOLATE LU 
      STA LLU         AND SAVE
* 
      JSB EXEC      ISSUE STATUS REQUEST
      DEF *+4        TO GET DEVICE TYPE 
      DEF NAB13 
      DEF LLU 
      DEF DVT6
      JMP L.OPN,I   ERROR RETURN
* 
      LDA DVT6      GET STATUS WORD 
      ALF,ALF        MOVE TYPE INTO POSITION
      AND B77         ISOLATE DEVICE TYPE 
      CLB           PRESET B-REG
      CPA B12       IF LINE PRINTER,
      CCB            THEN INDICATE SO 
      STB LP        SAVE LP STATUS
* 
      CLB           PRESET B-REG
      ADA N7        TEST FOR TERMINAL 
      SSA           IF TERMINAL,
      CCB            THEN INDICATE SO 
      STB TTY       SAVE TTY STATUS 
      JMP L.OPN,I    AND RETURN 
      SKP 
* 
*     L.HED SUBROUTINE
* 
HEADR NOP 
* 
L.HED NOP 
      JSB .ENTR     GET PARAMETER 
      DEF HEADR 
* 
      LDA HEADR     GET HEADER ADDRESS
      ADA .21        POINT TO TIME AREA 
      STA LEN1
* 
      JSB FTIME     GET CURRENT TIME
      DEF *+2 
      DEF LEN1,I
* 
      JSB L.WRT     NOW WRITE OUT LINE
      DEF *+3 
      DEF HEADR,I 
      DEF .36 
* 
      JMP L.HED,I   RETURN
* 
*     L.WRT SUBROUTINE
* 
BUF   NOP 
LEN   NOP 
* 
L.WRT NOP 
      JSB .ENTR     GET PARAMETERS
      DEF BUF 
* 
      CLA           CLEAR LINE TWO LENGTH 
      STA LEN1
* 
      LDA LP        GET LP STATUS 
      LDB LEN,I     GET BUFFER LENGTH 
      SZA           IF LINE PRINTER,
      JMP L.WR1      THEN CONTINUE
* 
      ISZ BUF       START BUFFER AT SECOND WORD 
      ADB N1        SUBTRACT ONE FROM BUFFER LENGTH 
* 
      LDA TTY       GET TTY STATUS
      SZA,RSS       IF NOT TTY, 
      JMP L.WR1      THEN CONTINUE
* 
L.WR2 CLA           CLEAR LINE TWO LENGTH 
      STA LEN1
      LDA N36       SUBTRACT 36 FROM
      ADA B          LENGTH 
      SZA           IF LENGTH EQUAL OR
      SSA            LESS THAN 72 CHARACTERS, 
      JMP L.WR1       THEN CONTINUE 
* 
      STA LEN1      SAVE LINE TWO LENGTH
      LDB .36        AND GET LINE ONE LENGTH
* 
L.WR1 STB LEN       SAVE LENGTH FOR WRITF 
      JSB WRITF     WRITE BUFFER TO LIST FILE 
      DEF *+5 
      DEF O.BUF 
      DEF .E.R
      DEF BUF,I 
      DEF LEN 
* 
      JSB JER.      CHECK FOR BREAK OR ERROR
* 
      LDB LEN1      CHECK IF ANOTHER LINE 
      SZB,RSS       IF ZERO,
      JMP L.WRT,I    THEN RETURN
* 
      STB LEN       SAVE LENGTH 
      LDA BUF       FIND NEW BUFFER ADDRESS 
      ADA .36 
      STA BUF 
      JMP L.WR2     DO ANOTHER LINE 
      SKP 
* 
*     L.SPC SUBROUTINE
* 
L.SPC NOP 
* 
      JSB WRITF     WRITE A BLANK LINE TO LIST FILE 
      DEF *+5 
      DEF O.BUF 
      DEF .E.R
      DEF BLANK 
      DEF .1
* 
      JSB JER.      CHECK FOR BREAK OR ERROR
* 
      JMP L.SPC,I   RETURN
      SKP 
* 
*     L.WEF SUBROUTINE
* 
L.WEF NOP 
* 
      LDA TTY       GET TTY STATUS
      SZA,RSS       IF NOT TTY, 
      JMP WEOF       THEN GO WRITE ACTUAL EOF 
* 
      JSB L.SPC     SPACE DOWN TWO LINES
      JSB L.SPC 
      JMP L.WEF,I   RETURN
* 
WEOF  JSB WRITF     WRITE AN EOF TO LIST FILE 
      DEF *+5 
      DEF O.BUF 
      DEF .E.R
      DEF BLANK 
      DEF N1
* 
      JSB JER.      CHECK FOR BREAK OR ERROR
* 
      JMP L.WEF,I   RETURN
      SKP 
* 
*     STORAGE AREA
* 
ZERO  NOP 
.1    DEC 1 
.21   DEC 21
.36   DEC 36
* 
N1    DEC -1
N7    DEC -7
N36   DEC -36 
* 
B12   OCT 12
B77   OCT 77
* 
NAB13 OCT 100015
* 
BLANK ASC 1,
* 
LP    NOP           LINE PRINTER STATUS FLAG
TTY   NOP           TERMINAL STATUS FLAG
* 
LEN1  NOP           REMAINING WORDS TO BE WRITTEN 
LLU   NOP           DEVICE LOGICAL UNIT NUMBER
DVT6  NOP           DEVICE STATUS WORD
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
                                              