SPL,L,O ! NAME: LI.. ! SOURCE: 92067-18221 ! RELOC: 92067-16185 ! PGMR: G.A.A. ! ! *************************************************************** ! * (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. * ! *************************************************************** ! NAME LI..(8) "92067-16185 REV.2001 791023" ! ! MODIFICATION RECORD: ! ! DATE REASON ! 1) 780531 TO USE NEW FSTAT FOR 256-WORD CARTRIDGE DIRECTORY ! 2) 780630 TO PRINT FILE SIZE IN BLKS OR BLK MULTIPLES ! 3) 780919 TO USE EXTENDED FMP CALL (ELOCF) ! 4) 780919 TO CHECK FOR REC #'S > 32767 & WRAP AROUND ! 5) 790127 TO PRINT ASCII CRNS AS 2 ASCII CHARACTERS ! 6) 791023 TO REPORT ERROR IF 1ST REQUESTED RECORD > ! #RECORDS IN FILE (SST #4629), AND TO SKIP TO ! 1ST RECORD USING READF FOR TYPE 1 AND 2 FILES ! ! LI.. IS THE RTE FMGR FILE LIST MODULE ! IT IS ENTERED ON COMMAND ! ! LI,NAMR,TY ! ! WHERE: ! ! ! NAMR IS THE NAME REFERENCE INCLUDING ! SECURITY CODE AND DISC ID ! ! TY IS THE LISTING TYPE AND IS ASCII: ! ! S OR A OR NULL SOURCE WITH LINE NUMBERS ! B BINARY DUMP ! D DIRECTORY HEAD ONLY ! ! ! EACH LISTING WILL BE PRECEEDED BY THE HEAD: ! ! NAMEL T=XXXXX IS ON CRXXXXX USING XXXX BLKS R=XXXX ! ! ! ! ! ! S FORMAT IS A BLANK FOLLOWED BY 4 DIGIT ! LINE NUMBER FOLLOWED BY TWO BLANKS FOLLOWED ! BY THE RECORD. ! ! B FORMAT IS : ! A)THE RECORD HEAD: REC# XXXXX ! B)N LINES FORMATED AS FOLLOWS ! 8 5-DIGIT OCTAL NUMBERS SEPARATED BY BLANKS ! AND FOLLOWED BY A "*" FOLLOWED BY THE ! 16 ASCII CHARACTERS THE DIGITS REP. ! NON-PRINTING CHARACTERS WILL BE FILLED ! WITH BLANKS ! ! D FORMAT IS THE HEAD ONLY ! ! ! ! DEFINE EXTERNALS ! LET .TTY, \DETERMINE IF INTERACTIVE NAM.. \NAME CHECKING ROUTINE BE FUNCTION,EXTERNAL ! LET JER. \FMGR ERROR HANDLING ROUTINE BE SUBROUTINE,EXTERNAL,DIRECT ! LET .E.R., \FMGR ERROR WORD BUF., \INTERNAL FMGR BUFFER I.BUF, \INTERNAL FMGR BUFFER N.OPL, \FMGR SUBPARAMETER ARRAY O.BUF, \INTERNAL FMGR BUFFER TMP. \LIST DEVICE BE INTEGER,EXTERNAL ! LET CONV., \FMGR INTEGER TO ASCII CONVERSION ELOCF, \EXTENDED FMP FILE LOCATION EXEC, \RTE EXEC ROUTINE FSTAT, \FMP CARTRIDGE LIST ROUTINE JER., \FMGR ERROR HANDLING ROUTINE LOCF, \FMP FILE LOCATION ROUTINE OPEN., \FMGR OPEN ROUTINE READF, \FMP FILE READ ROUTINE WRITF \FMP FILE WRITE ROUTINE BE SUBROUTINE,EXTERNAL ! ! DEFINE INTERNAL ROUTINES ! LET SETA, \ SPACE, \ WRIT \ BE SUBROUTINE,DIRECT ! ! DEFINE CONSTANTS ! HL LET BL.T BE CONSTANT (20124K)! T LET EQ.BL BE CONSTANT (36440K)!= LET BL.I BE CONSTANT (20111K)! I LET S.BL BE CONSTANT (51440K)!S LET O.N BE CONSTANT (47516K)!ON LET BL.C BE CONSTANT (20103K)! C LET R.BL BE CONSTANT (51040K)!R LET BL.L BE CONSTANT (20114K)! L LET U.BL BE CONSTANT (52440K)!U LET BL.U BE CONSTANT (20125K)! U LET S.I BE CONSTANT (51511K)!SI LET N.G BE CONSTANT (47107K)!NG LET BL.B BE CONSTANT (20102K)! B LET L.K BE CONSTANT (46113K)!LK LET R.EQ BE CONSTANT (51075K)!R= LET A.BL BE CONSTANT (40440K)!A LET B.BL BE CONSTANT (41040K)!B LET D.BL BE CONSTANT (42040K)!D LET R.E BE CONSTANT (51105K)!RE LET C.NO BE CONSTANT (41443K)!C# LET DST BE CONSTANT (25052K)!** LET ST.B BE CONSTANT (25102K)!*B ! ! DEFINE BUFFER SET UP ! LET LSTBF(2),LNNO,BLWD,LBF(256) BE INTEGER LET IDM(2) BE INTEGER LI..: SUBROUTINE(NOC,LIS ,ER) GLOBAL ! OPFL_401K !SET DEFAULT OPEN OPTION NUL,WRAP_0 !PRESET NULL PRAM FLAG, WRAP-AROUND FLAG LR_$([FR_[TYPF_[LIS1_@LIS +1]+4]+4]+4)!SET ADDRESSES TYPF_($TYPF AND 177400K)+40K !GET AND ISOLATE THE TYPE IF [FR_$FR] THEN[ \SET FIRST LAST RECORD IFNOT LR THEN LR_ FR] !DEFAULTS (1 IF ONLY FIRST) IF FR<0 THEN [ER_56;RETURN] !BAD 1ST RECORD PARM? IF TYPF=A.BL THEN GO TO STYP !CHECK FOR IF TYPF=40K THEN[NUL_1;GO TO STYP] !LEGAL IF TYPF=D.BL THEN GO TO TYPOK !OPTIONS IF TYPF=B.BL THEN[OPFL_311K;GO TO TYPOK]!NULL,A,S,B,D IF TYPF#S.BL THEN [ER_56;RETURN] !NO, BAD PARAMETER ! STYP: TYPF_S.BL !FORCE NULL,ATOS ! TYPOK:OPLS_ @TMP.+3 !GET LIST UNIT OP LIST ! CALL OPEN.(O.BUF,TMP.,$OPLS, 0) !OPEN LIST FILE ! CALL OPEN.(I.BUF,$LIS1,N.OPL,OPFL) !OPEN FILE TO BE LISTED ! CALL ELOCF(I.BUF,.E.R.,IDM,IDM,LP,IDM,FLU,FTYP,RECS) IFNOT NUL THEN GO TO OK !IF NULL THEN CHOSE THE RIGHT OPTION IFNOT FTYP THEN GO TO OK !TYPE ZERO DEFAULT IS ASC IF FTYP=3 THEN GO TO OK !SAME FOR TYPE 3 IF FTYP=4 THEN GO TO OK !SAME FOR TYPE 4 CTYP: TYPF_B.BL !OTHERWISE USE BINARY FORMAT ! OK: CALL LOCF(O.BUF,.E.R.,LP,LP,LP,LP,LLU) !GET LIST LU ! EXEC(13,LLU,EQT5) !GET LIST LU TYPE CODED ! P36_[P3_@LIS +4]+33 !SET UP LIST ADDRESSES LP_1 !SET LINE PRINTER FLAG IF (EQT5 AND 37400K)<5000K THEN LP_0 TTY_.TTY(LLU) FOR T_ P3 TO P36 DO[$T_20040K] ! BLANK THE BUFFER P_P3-1 SETA(BL.T) !SET BLANK T SETA(EQ.BL) !SET = BLANK P_P+2 CONV.(FTYP,$P,5) !SET TYPE SETA(BL.I) !SET BLANK I SETA(S.BL) !SET S BLANK SETA (O.N) !SET ON IF FTYP THEN[SETA(BL.C); \IF DISC FILE FIND CR # SETA(R.BL);\ CALL FSTAT(LNNO,256,1,1);\MUST BE FOUND T_@LNNO; \SO NO STOP NEEDED UNTIL ($T AND 377K)=FLU DO T_T+4; \FIND THE LU T_$( T+2);N_5; \SET IT UP P_P+1;$P_T; \MOVE CRN TO OUTPUT BUF IF NAM..($P)=0 THEN \IF PASSED NAMR TEST, [P_P+1;GOTO LI1]], \THEN SKIP CONVERSION ELSE[ \ SETA(BL.L); \SET UP A DIRECT LU SETA(U.BL);\ T_FLU;N_2] P_P+1 CONV.(T,$P,N) LI1: IFNOT FTYP THEN[N_13;GO TO WRHD] SETA(BL.U) !SET USING SETA(S.I ) SETA(N.G ) P_P+3 ! ADDR._@I.BUF+5 !DCB WORD 5 (FILE SIZE) IF $ADDR. < 0 THEN [ \IF NEGATIVE, THEN CONV.(-($ADDR.),$P,5); \CONVERT POSITIVE AND SETA(ST.B)], \REPORT AS "*BLKS" ELSE [CONV.($ADDR./2,$P,5); \CONVERT BLOCKS TO ASCII SETA(BL.B)] !SET BLKS R= ! SETA(L.K) SETA(S.BL) SETA(R.EQ) ! P_P+2 ! CONV.(RECS,$P,4) ! N_27 ! WRHD: TB_[BF_[IF TYPF=S.BL THEN @LSTBF,ELSE @BUF.]]+1 $BF_20040K !BLANK FIRST WD P_LIS1 FOR T_TB TO TB+N DO [$T_$P;P_P+1] !MOVE LINE IF LIS #3 THEN[$([P_TB+1]+1)_DST;\IF FAKE FILE REPLACE NAME $P_DST;$TB_DST]! WITH "******" WRIT ! WRITE THE HEAD ! IF TYPF=D.BL THEN GOTO EOF !DONE IF HEAD ONLY SPACE !SPACE A LINE IF FTYP=6 THEN FTYP,$(@I.BUF+2)_1 !FORCE TYPE 6 TO ONE RC_1 !DEFINE STARTING RECORD IF FR > 1 THEN [ \IF SKIP REQUESTED AND IF FTYP THEN [ \IF FILE IS TYPE 1 OR 2 IF FTYP < 3 THEN RC_FR]] !SET FIRST RECORD NEXT: P_BF !INITIALIZE BUFFER POINTER SETA(R.E) ! SET UP SETA(C.NO) ! REC# XXXXX SETA(20040K) P_P+2 CONV.(RC,$P,5)! SET NUMBER CALL READF(I.BUF,.E.R.,LBF,128,L,RC) ! READ RECORD IF .E.R.= -12 THEN [ \IF EOF IF RC>FR THEN GO TO EOF] !THEN EXIT JER. !CHECK FOR ERRORS IF L <0 THEN [ \SOFT EOF? IF RC>FR THEN GO TO EOF, \YES ELSE [ER_ -12;RETURN]] !NO, EOF BEFORE 1ST REQ. REC IFNOT WRAP THEN \IF LESS THAN 32768 [IF RC< FR THEN GO TO NEXTR] !SKIP TO FIRST REQUESTED REC. N_L+3 IF TYPF=S.BL THEN[CONV.(RC,LNNO,4);BLWD_20040K;\ L_0;GO TO WRTIT]!JUST LISTING - GO WRIT ! SPACE !SPACE A LINE N_5 !WRITE THE RECORD NUMBER WRIT ! SPACE !SPACE A LINE ! F_@LBF !SET BUFFER POINTER NEXTL:IFNOT L THEN [ \IF NO DATA GET NEXT NEXTR: IF RC=32767 THEN RC,WRAP_1, ELSE \RESET RECORD COUNT RC_RC+1; \STEP RECORD COUNT IF LR THEN[ \END OF REQUESTED DATA IF RC > LR THEN GO TO EOF]; \YES GO DO EOF GO TO NEXT] !ELSE DO NEXT RECORD P_[ST_[WP,T_TB]+27]+1 !INITIALIZE POINTERS REPEAT 36 TIMES DO[ $T_20040K; T_T+1] UP_ -1 !SET UPPER FLAG TRUE REPEAT 8 TIMES DO THRU PTSTP IF[T2_ [T_$F]AND 77400K]>57400K THEN GOTO BLANK IF T2>17777K THEN GOTO OKUP ! BLANK:T_ (T AND 177K)+20000K ! OKUP: IF [T2_($F AND 177K)]<140K THEN[IF T2> 37K THEN\ GO TO OKLOW] ! T_ (T AND 77400K) +40K ! OKLOW:DO[ $P_T AND 77577K;P_P+1] ! T2_ [T_$F-<1] AND 1 ! $WP_[IF UP THEN (T2-<8)+([T_T-<3] AND 7)+30060K,\ ELSE T2 + 20060K] ! REPEAT 2 TIMES DO[ \ $[WP_WP+1]_(([T_T-<3] AND 7)-<8)+\ ([T_T-<3] AND 7)+ 30060K] ! IF UP THEN GOTO PTSTP ! $[WP_WP+1]_(((T-<3) AND 7)-<8)+30040K ! PTSTP:DO[WP_WP+1;UP_NOT UP;F_F+1;IFNOT [L_L-1] THEN\ GO TO PREPR] ! ! PREPR:IF $[P_P-1]=20040K THEN GO TO PREPR !FIND LAST !NON BLANK N_ P-TB+1 !PRINT LENGTH ! $ST_ $ST +12K !SET THE STAR SEPERATOR ! WRTIT:WRIT !TRANSMIT THE LINE ! GOTO NEXTL !GO DO NEXT LINE ! EOF: WRITF(O.BUF,.E.R.,$BF,-1) !WRITE EOF JER. RETURN END ! ! SETA: SUBROUTINE(PRA)DIRECT !STEP P AND SET PRA IN P INDIRECT $[P_P+1]_PRA RETURN END ! ! WRIT: SUBROUTINE DIRECT!WRITE ON O.BUF BUFFER AT BF IF LP !OR TB IF NOT LP WITH LENGTH N+LP !IF TTY -LIMIT LENGTH TO 72. IF TTY THEN[IF N>36 THEN N_36] WRITF(O.BUF,.E.R.,$(TB-LP),N+LP) JER. RETURN END ! ! SPACE:SUBROUTINE DIRECT !SPACE THE LIST DEVICE N_1 !SET LENGTH TO ONE WORD DO[T_$TB;$TB_ 20040K]!SET BLANK IN BUFFER WRIT !WRITE BLANK LINE $TB_T !RESTORE OLD CONTENTS RETURN !RETURN END END END$