ASMB,L,R,C NAM NDTDU,19,89 DUMP NDT FILE 771104 24999-16213 REV 1902 SPC 1 * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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. * * **************************************************************** SPC 1 ******************************* * * * NAME: NDTDU * * * * SOURCE: 24999-18213 * * * * RELOCATABLE:24999-16213 * * * * PROGRAMMER: DT * * * * DATE: OCTOBER 1977 * * * ******************************* SPC 3 * THIS PROGRAM FORMATS AND PRINTS THE INFORMATION STORED IN A DS/1000 * NDT (NETWORK DESCRIPTION TABLE) FILE CREATED BY NDTGN. SCHEDULE FROM * RTE WITH: * *RU,NDTDU,,, * * THE SCHEDULING PARAMETERS HAVE THE FOLLOWING MEANINGS: * * * THE FIRST PARAMETER IS EITHER THE NAMR FOR THE NDT FILE (IN THE * FORMAT NAME:SECURITY:CARTRIDGE) OR THE LU OF AN INTERACTIVE DEVICE * WHERE THE NAMR CAN BE READ. DEFAULT IS 1 OR THE MTM LU NUMBER. * * * THE LU OF AN OUTPUT DEVICE WHERE INFORMATION CAN BE PRINTED. DEFAULT * IS SAME AS . * * * THE NUMBER OF COLUMNS ON THE PRINT PAGE. DEFAULT IS 80. MINIMUM IS * 50. MAXIMUM IS 128. * * IF THE COMMAND *BR,NDTDU IS ENTERED, NDTDU STOPS PRINTING, CLOSES * THE NDT FILE, AND TERMINATES. SPC 3 EXT RMPAR,GETST,OPEN,CLOSE,READF,POSNT,EXEC EXT CNUMD,IFBRK,IFTTY,$CVT1,$PARS,$LIBR,$LIBX EXT #FWAM,#NODE SPC 1 A EQU 0 B EQU 1 SKP *** START OF PROGRAM *** SPC 1 NDTDU JSB RMPAR GET SCHEDULING PARAMETERS. DEF *+2 DEF INLU SPC 1 ** PROCESS FIRST PARAMETER: NAMR OR INPUT LU LDA INLU SSA JMP TRMN8 INPUT LU IS NEGATIVE--TERMINATE. SZA JMP LU? LDB B401 INPUT LU NOT SPECIFIED--USE 1. JMP STIN LU? AND B777C SAVE BITS 15-6. SZA,RSS IF 1ST PARAM ISN'T LU, JMP TTY? LDA B401 SET INPUT LU STA INLU TO SYS CONSOLE. JSB GETST GET NAMR DEF *+4 FROM @STRG DEF STRNG COMMAND DEF D12 STRING. DEF LOG JMP FILE GO PARSE NAMR. TTY? JSB IFTTY CHECK FOR DEF *+2 INTERACTIVE DEF INLU INPUT LU. SSA,RSS JMP TRMN8 NON-INTERACTIVE--TERMINATE. LDA INLU SET INTERACTIVE IOR B400 BIT IN STIN STA INLU INPUT LU. JSB EXEC PRINT DEF *+5 "WHAT IS NDT FILE NAMR?" DEF D2 DEF INLU DEF NAMR? DEF D12 JSB EXEC READ REPLY. DEF *+5 DEF D1 DEF INLU DEF STRNG DEF D12 STB LOG * NOW READY TO PARSE FILE NAMR. FILE LDA @STRG MOVE STRING SO LDB @STG2 IT CAN BE MODIFIED MVW D12 BEFORE PARSE. LDB COMMA INSURE LDA @STG2 COMMA AT ADA LOG END OF STB A,I NAMR. * SET COLONS TO COMMAS FOR PARSE. LDA SWRD A := ",:". LDB SBYTA B := BYTE ADDRESS OF STRING. LOOP1 SFB SCAN FOR COLON. JMP *+2 COLON FOUND. JMP DONE COMMA FOUND (MUST BE END). ALF,ALF REPLACE SBT COLON WITH ALF,ALF COMMA. JMP LOOP1 SCAN AGAIN. DONE CMB,INB STOP SCANNING AT COMMA. ADB SBYTA CMB,INB B := NO. OF CHARACTERS. STB LOG * CALL THE RTE PARSER. LDA @STG2 A := WORD ADDRESS OF STRING. JSB $LIBR NOP JSB $PARS DEF PBUF JSB $LIBX DEF *+1 DEF *+1 SPC 1 ** PROCESS SECOND PARAMETER: OUTPUT LU LDA OUTLU SZA,RSS LDA INLU ZERO--USE DEFAULT. IOR B200 SET BIT TO PRINT COL 1. STA OUTLU STORE OUTPUT LU. AND B77 SET UP IOR B1100 CONTROL WORD STA CONWD FOR PAGE EJECT. SPC 1 ** OPEN THE FILE JSB OPEN DEF *+7 DEF DCB DEF ERROR DEF NAME DEF D0 DEF SECU DEF ICR JSB ERCHK CHECK FOR FMP ERROR. CPA D9 TYPE = 9? JMP *+2 JMP BADRC NO--SOMETHING'S WRONG! SPC 1 ** PROCESS THIRD PARAMETER: WIDTH. LDA WIDTH IF WIDTH SZA IS NOT JMP NOT0 PROVIDED, LDA D12 NDFIT := 12 JMP STFIT NOT0 ADA N50 IF WIDTH SSA,RSS IS < 50, JMP NOTSM LDA D7 NDFIT := 7 JMP STFIT NOTSM LDA WIDTH IF WIDTH ADA N129 IS > 129, SSA JMP NOTBG LDA D20 NDFIT := 20 JMP STFIT * CALCULATE NUMBER OF NODES THAT WILL FIT IN THE GIVEN WIDTH NOTBG CLB LDA WIDTH NDFIT := ARS WIDTH/2 ADA N4 -4 DIV D3 /3. STFIT CMA,INA (NEGATE NDFIT FOR STA NDFIT USE AS COUNTER.) SPC 1 ** GRAB END OF PARTITION FOR BUFFER AREA. 1/3 GOES FOR FIRST RECORD, * 2/3 GOES FOR REST OF RECORDS. LDA XEQT LOOK IN ID ADA D23 SEGMENT FOR LDA A,I HI MAIN ADDRESS + 1. STA @RCR1 STORE AS FIRST RECORD ADDR. INA STA @NODE 2ND WORD IS ADDRESS OF NODES. CMA,INA SUBTRACT FROM ADA BGLWA LAST WORD AVAILABLE FOR CLB TOTAL SIZE OF BLOCK. DIV D3 STA MAXND SAVE MAX # OF NODES. SZA,RSS IF ZERO, JMP TOMNY NO ROOM IN PARTITION. INA STA LNRC1 MAX SIZE FOR RECORD 1. ADA MAXND ADA MAXND STA MAXRC MAX SIZE FOR REST OF RECORDS. LDA @RCR1 CALCULATE ADDRESS ADA LNRC1 OF READ BUFFER AS STA @RCRD 1ST ADDR PLUS 1ST LENGTH. SPC 1 ** PRINT HEADING INFORMATION LDA LOG A := ARS NO. OF WORDS IN NAMR. ADA D18 ADD SIZE OF HEADER. STA LOG JSB PRINT PRINT DEF HED1 FIRST DEF LOG HEADING. LDA #FWAM IF NODE SZA,RSS IS INITIALIZED, JMP NOTIN JSB CNUMD CONVERT LOCAL DEF *+3 NODE NUMBER DEF #NODE TO ASCII DEF ATNOD+4 (DECIMAL) JSB PRINT AND DEF ATNOD PRINT DEF D7 IT. JMP READ1 ELSE NOTIN JSB BLINE PRINT BLANK LINE. READ1 JSB READF READ NUMBER DEF *+5 OF NODES AND DEF DCB FILL NODE ARRAY DEF ERROR FROM FIRST RECORD. @RCR1 BSS 1 DEF LNRC1 JSB ERCHK CHECK FOR FMP ERROR. LDA @RCR1,I STA NNODE SAVE NUMBER OF NODES. STA NDLFT NDLFT := NNODE. CMA,INA STA COUNT JSB CNUMD CONVERT DEF *+3 NUMBER OF DEF COUNT NODES TO DEF HED2 ASCII (DECIMAL). JSB PRINT PRINT DEF HED2 SECOND DEF D13 HEADING. JSB BLINE PRINT BLANK LINE. SPC 1 * CHECK FOR TOO MANY NODES LDA NNODE IF NUMBER OF NODES SSA,RSS ISN'T NEGATIVE OR IS JMP TOMNY GREATER THAN THE ADA MAXND MAXIMUM NUMBER OF CMA,SSA,RSS NODES THAT WILL FIT, JMP TOMNY GO PRINT ERROR MESSAGE. SPC 1 ** INITIALIZE NO. OF NODES TO SKIP := 0 FOR FIRST TIME. CLA SKNOD := 0. STA SKNOD SKP *** BEGINNING OF BIG LOOP *** SPC 1 ** HOW MANY NODES DO WE PRINT PER LINE? BLOOP LDA NDFIT NDFIT := LDB NDFIT WHICHEVER IS CMB,INB LESS IN ADB NDLFT MAGNITUDE OF SSB,RSS NDFIT AND LDA NDLFT NDLFT. STA NDFIT SPC 1 ** FIND # OF WORDS FOR OUTPUT CMA,INA CALCULATE INA 3 WORDS PER MPY D3 NODE PLUS INA FRONT OF STA OUTLN LINE. SPC 1 ** CONVERT "TO" NODE NUMBERS INTO LINE JSB CLEAR CLEAR OUTPUT BUFFER. LDA @NODE SET "TO" NODE POINTER ADA SKNOD TO FIRST NODE. STA TNODE (SKIP OVER ALREADY PRINTED NODES.) LDA NDFIT COUNT := -(NUMBER OF NODES TO PRINT). STA COUNT LDA @LIN4 INITIALIZE STA PNTR2 COLUMN POINTER. CNVRT JSB CNUMD CONVERT NODE DEF *+3 NUMBER INTO TNODE BSS 1 PROPER LINE PNTR2 BSS 1 COLUMNS. ISZ TNODE BUMP LDA PNTR2 THE ADA D3 TWO STA PNTR2 POINTERS. * ISZ COUNT BUMP NODE COUNT. JMP CNVRT NOT DONE--CONVERT NEXT NO. * JSB PRINT PRINT DEF LINE LINE. DEF OUTLN SKP ** PRINT NRV FOR EACH NODE LDA NNODE CONT2:=-(NUMBER OF NODES) STA CONT2 [USED FOR "FROM" NODE]. LDA @NODE STA FNODE JSB PRINT PRINT DEF RULE HORIZONTAL DEF OUTLN LINE. INIT1 JSB CLEAR CLEAR LINES. JSB READF READ DEF *+5 NDT DEF DCB RECORD. DEF ERROR @RCRD BSS 1 DEF MAXRC JSB ERCHK CHECK FOR RFA ERROR. LDA @RCRD,I IF FIRST SSA,RSS WORD >= 0, JMP BADRC SOMETHING'S WRONG. JSB CNUMD CONVERT DEF *+3 "FROM" FNODE NOP NODE DEF LINE+1 NUMBER. LDA @RCRD INITIALIZE INA RECORD POINTER TO STA RCDPT FIRST NODE INFORMATION. LDA NDFIT COUNT:=-(NUMBER OF NODES TO PRINT) STA COUNT [USED FOR "TO" NODE]. LDA @NODE INITIALIZE ADDRESS STA TNODE OF "TO" NODE. LDA @LIN4 INITIALIZE ADA D2 LINE STA PNTR2 POINTERS. ADA D62 STA L1PNT * * SKIP OVER PREVIOUSLY-PRINTED NODES IN THE RECORD. LDB SKNOD B := CMB -(NO. OF NODES TO SKIP) - 1 CHECK INB,SZB,RSS IF DONE, JMP CNVTO GO START CONVERTING. LDA RCDPT,I CPA TNODE,I IF RECORD NODE = "TO" NODE, JMP *+2 JMP *+3 ISZ RCDPT POINT TO ISZ RCDPT NEXT NODE NUMBER. ISZ TNODE BUMP TNODE ADDRESS. JMP CHECK CHECK FOR END. * * CONVERT "TO" NODE NUMBERS. CNVTO LDA RCDPT,I GET NEXT NODE'S NUMBER. CPA TNODE,I IF <> "TO" NODE, JMP *+2 JMP BUMP1 JUST BUMP OUTPUT POINTERS. JSB IFBRK IF BREAK FLAG IS SET, DEF *+1 SSA JMP FINIS TERMINATE. * INSERT LU INTO LINE ISZ RCDPT GET NODE'S LDA RCDPT,I TIMEOUT/LU INFO. SSA IF NEGATIVE, JMP BADRC SOMETHING'S WRONG. AND B77 ISOLATE LU. JSB $LIBR NOP CCE JSB $CVT1 CONVERT. JSB $LIBX DEF *+1 DEF *+1 STA PNTR2,I STORE IN LINE. * INSERT TIMEOUT IN LINE 1 LDA RCDPT,I AND B377C ISOLATE BITS 13-7. ALF,ALF POSITION TIMEOUT RAL,RAL TO LOWER BYTE. SZA IF NOT ZERO, IOR N256 FILL IN UPPER BYTE. CMA,INA MAKE POSITIVE. MPY D5 MULTIPLY BY 5. STA TEMP1 JSB CNUMD CONVERT DEF *+3 TO ASCII DEF TEMP1 (DECIMAL). DEF L1PNT,I ISZ RCDPT POINT TO NEXT NODE IN RECORD. * INCREMENT OUTPUT POINTERS BUMP1 LDA PNTR2 PNTR2 := ADA D3 PNTR2 + 3. STA PNTR2 ADA D62 L1PNT := STA L1PNT PNTR2 + 62. * ISZ TNODE BUMP "TO" NODE ADDRESS. ISZ COUNT IF NOT LAST "TO" NODE, JMP CNVTO CONVERT NEXT ONE. LDA VLINE+4 PUT "!" STA LINE+4 IN LINE STA LINE1+4 AND LINE1. JSB PRINT PRINT DEF LINE LINE. DEF OUTLN JSB PRINT PRINT DEF LINE1 LINE1. DEF OUTLN JSB PRINT PRINT DEF VLINE VERTICAL DEF D5 LINE. ISZ FNODE BUMP "FROM" NODE POINTER ISZ CONT2 AND COUNT. JMP INIT1 IF NOT DONE, DO NEXT "FROM" NODE. SPC 1 * DONE WITH THIS PAGE JSB EXEC SKIP DEF *+4 TO DEF D3 NEXT DEF CONWD PAGE. DEF N4 LDA NDFIT FOR NEXT PASS, THE CMA,INA NUMBER OF NODES TO ADA SKNOD SKIP IS THE PREVIOUS STA SKNOD NUMBER PLUS THE ADA NNODE NUMBER JUST PRINTED. SZA,RSS PRINTED THEM ALL? JMP FINIS YES! ALL DONE. * NEED TO PASS THROUGH FILE AGAIN. STA NDLFT SAVE NUMBER OF NODES LEFT. JSB POSNT SPACE DEF *+5 THE DEF DCB NDT DEF ERROR FILE DEF D2 TO DEF D1 REC # 2. JSB ERCHK CHECK FOR FILE ERROR. JSB EXEC SKIP DEF *+4 FOUR DEF D3 LINES. DEF CONWD DEF D4 JMP BLOOP GO BACK IN THE BIG LOOP SPC 2 ** DONE ** FINIS JSB CLOSE CLOSE DEF *+2 THE DEF DCB NDT FILE. TRMN8 JSB EXEC TERMINATE. DEF *+2 DEF D6 SKP *** SUBROUTINE TO PRINT A MESSAGE ON OUTLU *** * CALLING SEQUENCE: JSB PRINT * DEF * DEF * PRINT NOP LDA PRINT,I PICK STA MSG UP ISZ PRINT PARAMETERS. LDA PRINT,I STA LEN ISZ PRINT SET RETURN ADDRESS. JSB EXEC CALL DEF *+5 EXEC DEF D2 FOR DEF OUTLU WRITE. DEF MSG,I DEF LEN,I JMP PRINT,I RETURN. MSG BSS 1 LEN BSS 1 SPC 3 *** SUBROUTINE TO PRINT A BLANK LINE *** * CALLING SEQUENCE: JSB BLINE * BLINE NOP JSB PRINT DEF BLANK DEF D1 JMP BLINE,I SPC 3 *** SUBROUTINE TO SET LINE & LINE1 TO BLANKS *** * CALLING SEQUENCE: JSB CLEAR * CLEAR NOP LDA @BLNK SOURCE := BLANK. LDB @LINE DESTINATION := LINE. MVW D129 MOVE BLANK THROUGH 128 WORDS. JMP CLEAR,I RETURN SPC 3 *** SUBROUTINE TO CHECK FOR FMP ERROR *** * CALLING SEQUENCE: JSB ERCHK ERCHK NOP LDA ERROR IF NO SSA,RSS ERROR, JMP ERCHK,I RETURN. CMA,INA MAKE ERROR STA ERROR POSITIVE. JSB CNUMD CONVERT DEF *+3 ERROR DEF ERROR TO ASCII DEF ERMSG+8 (DECIMAL). JSB PRINT PRINT DEF ERMSG ERROR DEF D13 MESSAGE. JMP FINIS DONE. SUP ERMSG ASC 13, *** FMP ERROR -NNNNNN *** SPC 3 *** ROUTINE CALLED WHEN TOO MANY NODES ARE IN FILE *** * CALLING SEQUENCE: JMP TOMNY * TOMNY JSB CNUMD CONVERT NUMBER DEF *+3 OF NODES ALLOWED DEF MAXND TO ASCII (DECIMAL). DEF ASCMX JSB PRINT PRINT DEF EMSG1 ERROR DEF D18 MESSAGE. JMP FINIS TERMINATE. * EMSG1 ASC 13, *** TOO MANY NODES. MAX = ASCMX ASC 5,NNNNNN *** SPC 3 *** ROUTINE CALLED WHEN BAD DATA IS READ * CALLING SEQUENCE: JMP BADRC * BADRC JSB PRINT PRINT DEF EMSG2 ERROR DEF D13 MESSAGE. JMP FINIS TERMINATE. * EMSG2 ASC 13, *** BAD DATA IN FILE *** SKP *** BASE PAGE VALUES *** XEQT EQU 1717B ID SEG ADDR BGLWA EQU 1777B LAST WORD IN PARTITION SPC 1 *** DATA STORAGE AREA *** SPC 1 * RUN-TIME PARAMETERS INLU BSS 1 INPUT LU OUTLU BSS 1 OUTPUT LU WIDTH BSS 1 LINE WIDTH BSS 2 LAST 2 NOT USED SPC 1 COMMA ASC 1,,, SWRD ASC 1,,: SCAN WORD SBYTA DBL STRG2 FIRST BYTE OF COMMAND STRING @STG2 DEF STRG2 FIRST WORD OF COMMAND STRING SPC 1 * PARSE BUFFER FOR FILE NAMR PBUF BSS 1 NAME BSS 3 BSS 1 SECU BSS 3 BSS 1 ICR BSS 3 BSS 21 SPC 1 * NDT FILE'S DATA CONTROL BLOCK DCB BSS 144 SPC 1 * NUMERIC CONSTANTS: B777C OCT 77700 B377C OCT 37700 B1100 OCT 1100 B401 OCT 401 B400 OCT 400 B200 OCT 200 B77 OCT 77 D129 DEC 129 D62 DEC 62 D23 DEC 23 D20 DEC 20 D18 DEC 18 D13 DEC 13 D12 DEC 12 D9 DEC 9 D7 DEC 7 D6 DEC 6 D5 DEC 5 D4 DEC 4 D3 DEC 3 D2 DEC 2 D1 DEC 1 D0 DEC 0 N4 DEC -4 N50 DEC -50 N256 DEC -256 N129 DEC -129 SPC 1 * ALPHABETIC STRINGS FOR I/O NAMR? ASC 13,/NDTDU: NDT FILE NAMR? _ HED1 ASC 18, NETWORK DESCRIPTION TABLE IN FILE STRNG BSS 12 [COMMAND STRING] STRG2 BSS 12 ATNOD ASC 7, AT NODE NNNNN HED2 ASC 12,NNNNNN NODES IN NETWORK BLANK ASC 1, LINE BSS 64 LINE1 BSS 64 SPC 1 LNRC1 BSS 1 MAX LENGTH FOR RECORD 1. MAXRC BSS 1 MAX LENGTH FOR OTHER RECORDS. MAXND BSS 1 MAX NO OF NODES. NNODE BSS 1 NUMBER OF NODES IN NDT. @NODE BSS 1 @LIN4 DEF LINE+4 @LINE DEF LINE @BLNK DEF BLANK RCDPT BSS 1 ADDRESS IN RECORD. ERROR BSS 1 FMP ERROR CONWD BSS 1 I/O CONTROL WORD FOR PAGE EJECT. COUNT BSS 1 COUNTERS CONT2 BSS 1 TEMP1 BSS 1 L1PNT BSS 1 POINTER INTO LINE1. LOG BSS 1 VLINE ASC 5, ! OUTLN BSS 1 OUTPUT LENGTH. NDFIT BSS 1 NUMBER OF NODES WHICH WILL FIT ON LINE. SKNOD BSS 1 NUMBER OF NODES TO SKIP. NDLFT BSS 1 NUMBER OF NODES LEFT TO PROCESS. RULE ASC 4, ----- REP 20 ASC 3,+----- BSS 0 SIZE OF NDTDU END NDTDU