C** XREF2 ** SUBROUTINE TO SORT AND PRINT XREF LISTING ***** C ***DPS 20NOV79 C C SUBROUTINE XREF2 C DIMENSION IRB(140),ILB(140),IORD(140) LOGICAL*1 COUNT(140),HEADER(106),NAME(6,140),DEBUG,IPRINT LOGICAL*1 JPRINT,LOST COMMON LINEN,MAXLIN,IPAGE,INC,IERROR,IBEGIN,ICOUNT,DEBUG,LOST, 1 NUMBER(140,30),NAME,HEADER,COUNT,IPRINT,JPRINT C C NOTE: ADJUST SIZE OF IRB,ILB,IORD,NAME,COUNT AND NUMBER TO C CHANGE VARIABLE CAPACITY (NOW 140 NAMES). C LUNOUT=3 LINEN=4 WRITE (LUNOUT,2) HEADER,IPAGE 2 FORMAT (/106A1,I4,' **'/) IPAGE=IPAGE+1 4 IF (LOST) WRITE (LUNOUT,8) C C--SORT THE ARRAY C CALL SORTB (NAME,6,ICOUNT,IORD,ILB,IRB) C C--PRINT THE NAMES AND NUMBERS IN IORD ORDER C DO 14 I=1,ICOUNT II=IORD(I) IF (LINEN .LT. MAXLIN) GO TO 10 IF (I .EQ. ICOUNT)GO TO 10 !DON'T PAGE FOR 1 LINE LINEN=4 WRITE (LUNOUT,6) HEADER,IPAGE 6 FORMAT (1H1//106A1,I4/) IPAGE=IPAGE+1 IF (LOST) WRITE (LUNOUT,8) 8 FORMAT (20X,'***TOO MANY VARIABLES, SOME NOT XREFED***') IF (LOST) LINEN=LINEN+1 C 10 J=COUNT(II) WRITE (LUNOUT,12) (NAME(N,II),N=1,6),(NUMBER(II,N), 1N=1,J) 12 FORMAT (/2X,6A1,' --',15I4/11X,15I4) !FITS 72 COL IF (COUNT(II) .GT. 15) LINEN=LINEN+1 LINEN=LINEN+2 14 CONTINUE C RETURN END C** SORTB ** SUBROUTINE TO SORT CHARACTER ARRAYS INTO ALPHABETIC ORDER C ***DPS 20 NOV 79 CLEAN UP C C C--SORTS A1 CHAR ARRAYS INTO ALPHABETICAL ORDER. IT IS JUST LIKE C-----'SORTW' EXCEPT THAT THE ARRAY OF CHAR MUST BE LOGICAL*1 C--ARRAY 'IN' CONTAINS THE CHARACTERS TO BE SORTED. 'IORD' IS RETURNED W C---THE SUBSCRIPS OF 'IN' SORTED INTO ALPHABAETICAL ORDER. A TO Z TO C----0 TO 9. ARRAYS 'ILB' AND 'IRB' ARE WORKING ARRAYS. ARRAY 'IN' C-----CONTAINS 'M' RECORDS AND 'N' CHARACTERS EACH. C---THE CONTENTS OF 'IN' ARE NOT CHANGED BY THIS SORT. C---UPON COMPLETION, SEQUENTIAL ELEMENTS OF 'IORD' CONTAIN C-----THE (SECOND) SUBSCRIPT OF 'IN' IN ALPABETICLY INCREASING C-----ORDER. C---THIS IS A "MONKEY PUZZLE TREE" SORT AND IS VERY FAST. C SUBROUTINE SORTB (IN, N, M, IORD, IRB, ILB) C DIMENSION ILB(M), IRB(M), IORD(M) LOGICAL*1 IN(N,M) C IF (M .NE. 1) GO TO 16 IORD(1)=1 RETURN 16 ILB(1)=0 IRB(1)=0 DO 34 I=2,M ILB(I)=0 IRB(I)=0 18 J=1 20 DO 22 L=1,N IF (IN(L,I) .NE. IN(L,J)) GO TO 24 22 CONTINUE L=N GO TO 30 24 CONTINUE IF (IN(L,I) .GT. IN(L,J)) GO TO 30 26 IF (ILB(J) .EQ. 0) GO TO 28 J=ILB(J) GO TO 20 28 IRB(I)=-J ILB(J)=I GO TO 34 30 IF (IRB(J) .LE. 0) GO TO 32 J=IRB(J) GO TO 20 32 IRB(I)=IRB(J) IRB(J)=I 34 CONTINUE C--NOW STRIP THE MONKY PUZZLE TREE L=1 36 J=1 GO TO 40 38 J=ILB(J) 40 IF (ILB(J) .GT. 0) GO TO 38 42 IORD(L)=J L=L+1 44 IF (IRB(J)) 48, 50, 46 46 J=IRB(J) GO TO 40 48 J=-IRB(J) GO TO 42 50 RETURN END