;********************************************************************** ; ; FINDNODES - BUILD AN ARRAY OF ALL NODES CURRENTLY REACHABLE ; ;********************************************************************** ; DCL COMMAND STRINGS TO CREATE AND READ THE NODE FILE OUTPUT_TO_FILE: .ASCID /ASSIGN NNN.TXT SYS$OUTPUT/ ; ASSIGN OUTPUT TO FILE SHOW_NET: .ASCID /SHOW NET/ ; SHOW NETWORK STOP: .ASCID /$STOP 'F$PROCESS()'/ DELETE: .ASCID &DELETE/NOCON NNN.TXT;*& ; DELETE FILE LOGNAME: .ASCID /SYS$INPUT/ EQUNAME: .ASCID /NNN.TXT;1/ LINEDESC: .WORD 80,0 .LONG LINEBUFFER LINEBUFFER: .BLKB 80 SAVE_LOG: .WORD 63,0 .LONG SAVE_BUFFER SAVE_BUFFER: .BLKB 63 WORKING: .ASCID /Working, please wait./ .ENTRY FINDNODES,^M PUSHAL WORKING CALLS #1,G^LIB$PUT_OUTPUT ; EXECUTE DCL COMMANDS TO ; 1. ASSIGN OUTPUT TO NNN.TXT ; 2. SHOW NETWORK PUSHAL STOP PUSHAL SHOW_NET PUSHAL OUTPUT_TO_FILE CALLS #3,G^LIB$EXECUTE_CLI ; SAVE CURRENT EQUIV STRING FOR SYS$INPUT $TRNLOG_S LOGNAM=LOGNAME,RSLBUF=SAVE_LOG BLBS R0,1$ RET ; ASSIGN INPUT TO NNN.TXT 1$: $CRELOG_S TBLFLG=#2,LOGNAM=LOGNAME,EQLNAM=EQUNAME BLBS R0,5$ RET ; READ THE FILE AND BUILD THE ARRAY OF NODE NAMES ; WITH THE NODE NUMBER AS THE INDEX INTO THE ARRAY 5$: PUSHAL LINEDESC ; SKIP PAST FIRST 1 LINES IN FILE CALLS #1,G^LIB$GET_INPUT BLBC R0,FINDRET LOOP:: ; LOOP TO GET EACH NODE AND NUMBER PUSHAL LINEDESC CALLS #1,G^LIB$GET_INPUT BLBC R0,FINDRET MOVB #^A/ /,LINEBUFFER ; OVERWRITE FIRST CHAR DBGLIN: PUSHAL LINEBUFFER CALLS #1,ASCINT ; RETURNS R0=NODENUMBER, R1=ADDR OF DBGCON: TSTL R0 ; NEXT NON-NUMERIC BEQL FINDRET DECL R0 MULL2 #MAXCHARS,R0 ; INDEX = (NODENUM - 1) * CHARS/NODE MOVL R0,R3 ; SAVE PLACE FOR BYTE COUNT OF STRING INCL R0 CLRL R2 ; R2 = BYTE COUNT OF STRING 20$: MOVB (R1)[R2],NODENAMES[R0] ; LOOP TO MOVE ALL CHARS INTO TABLE INCL R0 INCL R2 CMPB #^A/ /,(R1)[R2] BNEQ 20$ MOVB R2,NODENAMES[R3] BRB LOOP ; CHANGE BACK TO ORIGINAL EQUIV NAME FOR SYS$INPUT FINDRET: PUSHAL STOP PUSHAL DELETE CALLS #2,G^LIB$EXECUTE_CLI $CRELOG_S TBLFLG=#2,LOGNAM=LOGNAME,EQLNAM=SAVE_LOG RET .END