summaryrefslogtreecommitdiff
path: root/tests/lexers/fortranfixed
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2021-01-18 21:24:00 +0100
committerGeorg Brandl <georg@python.org>2021-01-18 22:08:36 +0100
commit2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch)
tree809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/fortranfixed
parentf0445be718da83541ea3401aad882f3937147263 (diff)
downloadpygments-git-examplefiles.tar.gz
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/fortranfixed')
-rw-r--r--tests/lexers/fortranfixed/example.txt2393
1 files changed, 2393 insertions, 0 deletions
diff --git a/tests/lexers/fortranfixed/example.txt b/tests/lexers/fortranfixed/example.txt
new file mode 100644
index 00000000..5897c1cc
--- /dev/null
+++ b/tests/lexers/fortranfixed/example.txt
@@ -0,0 +1,2393 @@
+---input---
+ SUBROUTINE AHCON (SIZE,N,M,A,B,OLEVR,OLEVI,CLEVR,CLEVI, TRUNCATED
+ & SCR1,SCR2,IPVT,JPVT,CON,WORK,ISEED,IERR) !Test inline comment
+C
+C FUNCTION:
+CF
+CF Determines whether the pair (A,B) is controllable and flags
+CF the eigenvalues corresponding to uncontrollable modes.
+CF this ad-hoc controllability calculation uses a random matrix F
+CF and computes whether eigenvalues move from A to the controlled
+CF system A+B*F.
+CF
+C USAGE:
+CU
+CU CALL AHCON (SIZE,N,M,A,B,OLEVR,OLEVI,CLEVR,CLEVI,SCR1,SCR2,IPVT,
+CU JPVT,CON,WORK,ISEED,IERR)
+CU
+CU since AHCON generates different random F matrices for each
+CU call, as long as iseed is not re-initialized by the main
+CU program, and since this code has the potential to be fooled
+CU by extremely ill-conditioned problems, the cautious user
+CU may wish to call it multiple times and rely, perhaps, on
+CU a 2-of-3 vote. We believe, but have not proved, that any
+CU errors this routine may produce are conservative--i.e., that
+CU it may flag a controllable mode as uncontrollable, but
+CU not vice-versa.
+CU
+C INPUTS:
+CI
+CI SIZE integer - first dimension of all 2-d arrays.
+CI
+CI N integer - number of states.
+CI
+CI M integer - number of inputs.
+CI
+CI A double precision - SIZE by N array containing the
+CI N by N system dynamics matrix A.
+CI
+CI B double precision - SIZE by M array containing the
+CI N by M system input matrix B.
+CI
+CI ISEED initial seed for random number generator; if ISEED=0,
+CI then AHCON will set ISEED to a legal value.
+CI
+C OUTPUTS:
+CO
+CO OLEVR double precision - N dimensional vector containing the
+CO real parts of the eigenvalues of A.
+CO
+CO OLEVI double precision - N dimensional vector containing the
+CO imaginary parts of the eigenvalues of A.
+CO
+CO CLEVR double precision - N dimensional vector work space
+CO containing the real parts of the eigenvalues of A+B*F,
+CO where F is the random matrix.
+CO
+CO CLEVI double precision - N dimensional vector work space
+CO containing the imaginary parts of the eigenvalues of
+CO A+B*F, where F is the random matrix.
+CO
+CO SCR1 double precision - N dimensional vector containing the
+CO magnitudes of the corresponding eigenvalues of A.
+CO
+CO SCR2 double precision - N dimensional vector containing the
+CO damping factors of the corresponding eigenvalues of A.
+CO
+CO IPVT integer - N dimensional vector; contains the row pivots
+CO used in finding the nearest neighbor eigenvalues between
+CO those of A and of A+B*F. The IPVT(1)th eigenvalue of
+CO A and the JPVT(1)th eigenvalue of A+B*F are the closest
+CO pair.
+CO
+CO JPVT integer - N dimensional vector; contains the column
+CO pivots used in finding the nearest neighbor eigenvalues;
+CO see IPVT.
+CO
+CO CON logical - N dimensional vector; flagging the uncontrollable
+CO modes of the system. CON(I)=.TRUE. implies the
+CO eigenvalue of A given by DCMPLX(OLEVR(IPVT(I)),OLEVI(IPVT(i)))
+CO corresponds to a controllable mode; CON(I)=.FALSE.
+CO implies an uncontrollable mode for that eigenvalue.
+CO
+CO WORK double precision - SIZE by N dimensional array containing
+CO an N by N matrix. WORK(I,J) is the distance between
+CO the open loop eigenvalue given by DCMPLX(OLEVR(I),OLEVI(I))
+CO and the closed loop eigenvalue of A+B*F given by
+CO DCMPLX(CLEVR(J),CLEVI(J)).
+CO
+CO IERR integer - IERR=0 indicates normal return; a non-zero
+CO value indicates trouble in the eigenvalue calculation.
+CO see the EISPACK and EIGEN documentation for details.
+CO
+C ALGORITHM:
+CA
+CA Calculate eigenvalues of A and of A+B*F for a randomly
+CA generated F, and see which ones change. Use a full pivot
+CA search through a matrix of euclidean distance measures
+CA between each pair of eigenvalues from (A,A+BF) to
+CA determine the closest pairs.
+CA
+C MACHINE DEPENDENCIES:
+CM
+CM NONE
+CM
+C HISTORY:
+CH
+CH written by: Birdwell & Laub
+CH date: May 18, 1985
+CH current version: 1.0
+CH modifications: made machine independent and modified for
+CH f77:bb:8-86.
+CH changed cmplx -> dcmplx: 7/27/88 jdb
+CH
+C ROUTINES CALLED:
+CC
+CC EIGEN,RAND
+CC
+C COMMON MEMORY USED:
+CM
+CM none
+CM
+C----------------------------------------------------------------------
+C written for: The CASCADE Project
+C Oak Ridge National Laboratory
+C U.S. Department of Energy
+C contract number DE-AC05-840R21400
+C subcontract number 37B-7685 S13
+C organization: The University of Tennessee
+C----------------------------------------------------------------------
+C THIS SOFTWARE IS IN THE PUBLIC DOMAIN
+C NO RESTRICTIONS ON ITS USE ARE IMPLIED
+C----------------------------------------------------------------------
+C
+C--global variables:
+C
+ INTEGER SIZE
+ INTEGER N
+ INTEGER M
+ INTEGER IPVT(1)
+ INTEGER JPVT(1)
+ INTEGER IERR
+C
+ DOUBLE PRECISION A(SIZE,N)
+ DOUBLE PRECISION B(SIZE,M)
+ DOUBLE PRECISION WORK(SIZE,N)
+ DOUBLE PRECISION CLEVR(N)
+ DOUBLE PRECISION CLEVI(N)
+ DOUBLE PRECISION OLEVR(N)
+ DOUBLE PRECISION OLEVI(N)
+ DOUBLE PRECISION SCR1(N)
+ DOUBLE PRECISION SCR2(N)
+C
+ LOGICAL CON(N)
+C
+C--local variables:
+C
+ INTEGER ISEED
+ INTEGER ITEMP
+ INTEGER K1
+ INTEGER K2
+ INTEGER I
+ INTEGER J
+ INTEGER K
+ INTEGER IMAX
+ INTEGER JMAX
+C
+ DOUBLE PRECISION VALUE
+ DOUBLE PRECISION EPS
+ DOUBLE PRECISION EPS1
+ DOUBLE PRECISION TEMP
+ DOUBLE PRECISION CURR
+ DOUBLE PRECISION ANORM
+ DOUBLE PRECISION BNORM
+ DOUBLE PRECISION COLNRM
+ DOUBLE PRECISION RNDMNO
+C
+ DOUBLE COMPLEX DCMPLX
+C
+C--compute machine epsilon
+C
+ EPS = 1.D0
+100 CONTINUE
+ EPS = EPS / 2.D0
+ EPS1 = 1.D0 + EPS
+ IF (EPS1 .NE. 1.D0) GO TO 100
+ EPS = EPS * 2.D0
+C
+C--compute the l-1 norm of a
+C
+ ANORM = 0.0D0
+ DO 120 J = 1, N
+ COLNRM = 0.D0
+ DO 110 I = 1, N
+ COLNRM = COLNRM + ABS(A(I,J))
+110 CONTINUE
+ IF (COLNRM .GT. ANORM) ANORM = COLNRM
+120 CONTINUE
+C
+C--compute the l-1 norm of b
+C
+ BNORM = 0.0D0
+ DO 140 J = 1, M
+ COLNRM = 0.D0
+ DO 130 I = 1, N
+ COLNRM = COLNRM + ABS(B(I,J))
+130 CONTINUE
+ IF (COLNRM .GT. BNORM) BNORM = COLNRM
+140 CONTINUE
+C
+C--compute a + b * f
+C
+ DO 160 J = 1, N
+ DO 150 I = 1, N
+ WORK(I,J) = A(I,J)
+150 CONTINUE
+160 CONTINUE
+C
+C--the elements of f are random with uniform distribution
+C--from -anorm/bnorm to +anorm/bnorm
+C--note that f is not explicitly stored as a matrix
+C--pathalogical floating point notes: the if (bnorm .gt. 0.d0)
+C--test should actually be if (bnorm .gt. dsmall), where dsmall
+C--is the smallest representable number whose reciprocal does
+C--not generate an overflow or loss of precision.
+C
+ IF (ISEED .EQ. 0) ISEED = 86345823
+ IF (ANORM .EQ. 0.D0) ANORM = 1.D0
+ IF (BNORM .GT. 0.D0) THEN
+ TEMP = 2.D0 * ANORM / BNORM
+ ELSE
+ TEMP = 2.D0
+ END IF
+ DO 190 K = 1, M
+ DO 180 J = 1, N
+ CALL RAND(ISEED,ISEED,RNDMNO)
+ VALUE = (RNDMNO - 0.5D0) * TEMP
+ DO 170 I = 1, N
+ WORK(I,J) = WORK(I,J) + B(I,K)*VALUE
+170 CONTINUE
+180 CONTINUE
+190 CONTINUE
+C
+C--compute the eigenvalues of a + b*f, and several other things
+C
+ CALL EIGEN (0,SIZE,N,WORK,CLEVR,CLEVI,WORK,SCR1,SCR2,IERR)
+ IF (IERR .NE. 0) RETURN
+C
+C--copy a so it is not destroyed
+C
+ DO 210 J = 1, N
+ DO 200 I = 1, N
+ WORK(I,J) = A(I,J)
+200 CONTINUE
+210 CONTINUE
+C
+C--compute the eigenvalues of a, and several other things
+C
+ CALL EIGEN (0,SIZE,N,WORK,OLEVR,OLEVI,WORK,SCR1,SCR2,IERR)
+ IF (IERR .NE. 0) RETURN
+C
+C--form the matrix of distances between eigenvalues of a and
+C--EIGENVALUES OF A+B*F
+C
+ DO 230 J = 1, N
+ DO 220 I = 1, N
+ WORK(I,J) =
+ & ABS(DCMPLX(OLEVR(I),OLEVI(I))-DCMPLX(CLEVR(J),CLEVI(J)))
+220 CONTINUE
+230 CONTINUE
+C
+C--initialize row and column pivots
+C
+ DO 240 I = 1, N
+ IPVT(I) = I
+ JPVT(I) = I
+240 CONTINUE
+C
+C--a little bit messy to avoid swapping columns and
+C--rows of work
+C
+ DO 270 I = 1, N-1
+C
+C--find the minimum element of each lower right square
+C--submatrix of work, for submatrices of size n x n
+C--through 2 x 2
+C
+ CURR = WORK(IPVT(I),JPVT(I))
+ IMAX = I
+ JMAX = I
+ TEMP = CURR
+C
+C--find the minimum element
+C
+ DO 260 K1 = I, N
+ DO 250 K2 = I, N
+ IF (WORK(IPVT(K1),JPVT(K2)) .LT. TEMP) THEN
+ TEMP = WORK(IPVT(K1),JPVT(K2))
+ IMAX = K1
+ JMAX = K2
+ END IF
+250 CONTINUE
+260 CONTINUE
+C
+C--update row and column pivots for indirect addressing of work
+C
+ ITEMP = IPVT(I)
+ IPVT(I) = IPVT(IMAX)
+ IPVT(IMAX) = ITEMP
+C
+ ITEMP = JPVT(I)
+ JPVT(I) = JPVT(JMAX)
+ JPVT(JMAX) = ITEMP
+C
+C--do next submatrix
+C
+270 CONTINUE
+C
+C--this threshold for determining when an eigenvalue has
+C--not moved, and is therefore uncontrollable, is critical,
+C--and may require future changes with more experience.
+C
+ EPS1 = SQRT(EPS)
+C
+C--for each eigenvalue pair, decide if it is controllable
+C
+ DO 280 I = 1, N
+C
+C--note that we are working with the "pivoted" work matrix
+C--and are looking at its diagonal elements
+C
+ IF (WORK(IPVT(I),JPVT(I))/ANORM .LE. EPS1) THEN
+ CON(I) = .FALSE.
+ ELSE
+ CON(I) = .TRUE.
+ END IF
+280 CONTINUE
+C
+C--finally!
+C
+ RETURN
+ END
+
+---tokens---
+' ' Name.Label
+' ' Text
+' ' Text
+'SUBROUTINE ' Keyword
+'AHCON' Name
+' ' Text
+'(' Punctuation
+'SIZE' Name
+',' Punctuation
+'N' Name
+',' Punctuation
+'M' Name
+',' Punctuation
+'A' Name
+',' Punctuation
+'B' Name
+',' Punctuation
+'OLEVR' Name
+',' Punctuation
+'OLEVI' Name
+',' Punctuation
+'CLEVR' Name
+',' Punctuation
+'CLEVI' Name
+',' Punctuation
+' ' Text
+'TRUNCATED' Comment
+'\n' Text
+
+' ' Name.Label
+'&' Generic.Strong
+' ' Text
+'SCR1' Name
+',' Punctuation
+'SCR2' Name
+',' Punctuation
+'IPVT' Name
+',' Punctuation
+'JPVT' Name
+',' Punctuation
+'CON' Name
+',' Punctuation
+'WORK' Name
+',' Punctuation
+'ISEED' Name
+',' Punctuation
+'IERR' Name
+')' Punctuation
+' ' Text
+'!Test' Comment
+' inline comment' Comment
+'\n' Text
+
+'C\n' Comment
+
+'C FUNCTION:\n' Comment
+
+'CF\n' Comment
+
+'CF Determines whether the pair (A,B) is controllable and flags\n' Comment
+
+'CF the eigenvalues corresponding to uncontrollable modes.\n' Comment
+
+'CF this ad-hoc controllability calculation uses a random matrix F\n' Comment
+
+'CF and computes whether eigenvalues move from A to the controlled\n' Comment
+
+'CF system A+B*F.\n' Comment
+
+'CF\n' Comment
+
+'C USAGE:\n' Comment
+
+'CU\n' Comment
+
+'CU CALL AHCON (SIZE,N,M,A,B,OLEVR,OLEVI,CLEVR,CLEVI,SCR1,SCR2,IPVT,\n' Comment
+
+'CU JPVT,CON,WORK,ISEED,IERR)\n' Comment
+
+'CU\n' Comment
+
+'CU since AHCON generates different random F matrices for each\n' Comment
+
+'CU call, as long as iseed is not re-initialized by the main\n' Comment
+
+'CU program, and since this code has the potential to be fooled\n' Comment
+
+'CU by extremely ill-conditioned problems, the cautious user\n' Comment
+
+'CU may wish to call it multiple times and rely, perhaps, on\n' Comment
+
+'CU a 2-of-3 vote. We believe, but have not proved, that any\n' Comment
+
+'CU errors this routine may produce are conservative--i.e., that\n' Comment
+
+'CU it may flag a controllable mode as uncontrollable, but\n' Comment
+
+'CU not vice-versa.\n' Comment
+
+'CU\n' Comment
+
+'C INPUTS:\n' Comment
+
+'CI\n' Comment
+
+'CI SIZE integer - first dimension of all 2-d arrays.\n' Comment
+
+'CI\n' Comment
+
+'CI N integer - number of states.\n' Comment
+
+'CI\n' Comment
+
+'CI M integer - number of inputs.\n' Comment
+
+'CI\n' Comment
+
+'CI A double precision - SIZE by N array containing the\n' Comment
+
+'CI N by N system dynamics matrix A.\n' Comment
+
+'CI\n' Comment
+
+'CI B double precision - SIZE by M array containing the\n' Comment
+
+'CI N by M system input matrix B.\n' Comment
+
+'CI\n' Comment
+
+'CI ISEED initial seed for random number generator; if ISEED=0,\n' Comment
+
+'CI then AHCON will set ISEED to a legal value.\n' Comment
+
+'CI\n' Comment
+
+'C OUTPUTS:\n' Comment
+
+'CO\n' Comment
+
+'CO OLEVR double precision - N dimensional vector containing the\n' Comment
+
+'CO real parts of the eigenvalues of A.\n' Comment
+
+'CO\n' Comment
+
+'CO OLEVI double precision - N dimensional vector containing the\n' Comment
+
+'CO imaginary parts of the eigenvalues of A.\n' Comment
+
+'CO\n' Comment
+
+'CO CLEVR double precision - N dimensional vector work space\n' Comment
+
+'CO containing the real parts of the eigenvalues of A+B*F,\n' Comment
+
+'CO where F is the random matrix.\n' Comment
+
+'CO\n' Comment
+
+'CO CLEVI double precision - N dimensional vector work space\n' Comment
+
+'CO containing the imaginary parts of the eigenvalues of\n' Comment
+
+'CO A+B*F, where F is the random matrix.\n' Comment
+
+'CO\n' Comment
+
+'CO SCR1 double precision - N dimensional vector containing the\n' Comment
+
+'CO magnitudes of the corresponding eigenvalues of A.\n' Comment
+
+'CO\n' Comment
+
+'CO SCR2 double precision - N dimensional vector containing the\n' Comment
+
+'CO damping factors of the corresponding eigenvalues of A.\n' Comment
+
+'CO\n' Comment
+
+'CO IPVT integer - N dimensional vector; contains the row pivots\n' Comment
+
+'CO used in finding the nearest neighbor eigenvalues between\n' Comment
+
+'CO those of A and of A+B*F. The IPVT(1)th eigenvalue of\n' Comment
+
+'CO A and the JPVT(1)th eigenvalue of A+B*F are the closest\n' Comment
+
+'CO pair.\n' Comment
+
+'CO\n' Comment
+
+'CO JPVT integer - N dimensional vector; contains the column\n' Comment
+
+'CO pivots used in finding the nearest neighbor eigenvalues;\n' Comment
+
+'CO see IPVT.\n' Comment
+
+'CO\n' Comment
+
+'CO CON logical - N dimensional vector; flagging the uncontrollable\n' Comment
+
+'CO modes of the system. CON(I)=.TRUE. implies the\n' Comment
+
+'CO eigenvalue of A given by DCMPLX(OLEVR(IPVT(I)),OLEVI(IPVT(i)))\n' Comment
+
+'CO corresponds to a controllable mode; CON(I)=.FALSE.\n' Comment
+
+'CO implies an uncontrollable mode for that eigenvalue.\n' Comment
+
+'CO\n' Comment
+
+'CO WORK double precision - SIZE by N dimensional array containing\n' Comment
+
+'CO an N by N matrix. WORK(I,J) is the distance between\n' Comment
+
+'CO the open loop eigenvalue given by DCMPLX(OLEVR(I),OLEVI(I))\n' Comment
+
+'CO and the closed loop eigenvalue of A+B*F given by\n' Comment
+
+'CO DCMPLX(CLEVR(J),CLEVI(J)).\n' Comment
+
+'CO\n' Comment
+
+'CO IERR integer - IERR=0 indicates normal return; a non-zero\n' Comment
+
+'CO value indicates trouble in the eigenvalue calculation.\n' Comment
+
+'CO see the EISPACK and EIGEN documentation for details.\n' Comment
+
+'CO\n' Comment
+
+'C ALGORITHM:\n' Comment
+
+'CA\n' Comment
+
+'CA Calculate eigenvalues of A and of A+B*F for a randomly\n' Comment
+
+'CA generated F, and see which ones change. Use a full pivot\n' Comment
+
+'CA search through a matrix of euclidean distance measures\n' Comment
+
+'CA between each pair of eigenvalues from (A,A+BF) to\n' Comment
+
+'CA determine the closest pairs.\n' Comment
+
+'CA\n' Comment
+
+'C MACHINE DEPENDENCIES:\n' Comment
+
+'CM\n' Comment
+
+'CM NONE\n' Comment
+
+'CM\n' Comment
+
+'C HISTORY:\n' Comment
+
+'CH\n' Comment
+
+'CH written by: Birdwell & Laub\n' Comment
+
+'CH date: May 18, 1985\n' Comment
+
+'CH current version: 1.0\n' Comment
+
+'CH modifications: made machine independent and modified for\n' Comment
+
+'CH f77:bb:8-86.\n' Comment
+
+'CH changed cmplx -> dcmplx: 7/27/88 jdb\n' Comment
+
+'CH\n' Comment
+
+'C ROUTINES CALLED:\n' Comment
+
+'CC\n' Comment
+
+'CC EIGEN,RAND\n' Comment
+
+'CC\n' Comment
+
+'C COMMON MEMORY USED:\n' Comment
+
+'CM\n' Comment
+
+'CM none\n' Comment
+
+'CM\n' Comment
+
+'C----------------------------------------------------------------------\n' Comment
+
+'C written for: The CASCADE Project\n' Comment
+
+'C Oak Ridge National Laboratory\n' Comment
+
+'C U.S. Department of Energy\n' Comment
+
+'C contract number DE-AC05-840R21400\n' Comment
+
+'C subcontract number 37B-7685 S13\n' Comment
+
+'C organization: The University of Tennessee\n' Comment
+
+'C----------------------------------------------------------------------\n' Comment
+
+'C THIS SOFTWARE IS IN THE PUBLIC DOMAIN\n' Comment
+
+'C NO RESTRICTIONS ON ITS USE ARE IMPLIED\n' Comment
+
+'C----------------------------------------------------------------------\n' Comment
+
+'C\n' Comment
+
+'C--global variables:\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'SIZE' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'M' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'IPVT' Name
+'(' Punctuation
+'1' Literal.Number.Integer
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'JPVT' Name
+'(' Punctuation
+'1' Literal.Number.Integer
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'IERR' Name
+'\n' Text
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'A' Name
+'(' Punctuation
+'SIZE' Name
+',' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'B' Name
+'(' Punctuation
+'SIZE' Name
+',' Punctuation
+'M' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'WORK' Name
+'(' Punctuation
+'SIZE' Name
+',' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'CLEVR' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'CLEVI' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'OLEVR' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'OLEVI' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'SCR1' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'SCR2' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'LOGICAL ' Keyword.Type
+'CON' Name
+'(' Punctuation
+'N' Name
+')' Punctuation
+'\n' Text
+
+'C\n' Comment
+
+'C--local variables:\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'ISEED' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'ITEMP' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'K1' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'K2' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'I' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'J' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'K' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'IMAX' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'INTEGER ' Keyword.Type
+'JMAX' Name
+'\n' Text
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'VALUE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'EPS' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'EPS1' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'TEMP' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'CURR' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'ANORM' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'BNORM' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'COLNRM' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE PRECISION ' Keyword.Type
+'RNDMNO' Name
+'\n' Text
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DOUBLE COMPLEX\t\t' Keyword.Type
+'DCMPLX' Name
+'\n' Text
+
+'C\n' Comment
+
+'C--compute machine epsilon\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'EPS' Name
+' ' Text
+'=' Operator
+' ' Text
+'1.D0' Literal.Number.Float
+'\n' Text
+
+'100 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'EPS' Name
+' ' Text
+'=' Operator
+' ' Text
+'EPS' Name
+' ' Text
+'/' Operator
+' ' Text
+'2.D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'EPS1' Name
+' ' Text
+'=' Operator
+' ' Text
+'1.D0' Literal.Number.Float
+' ' Text
+'+' Operator
+' ' Text
+'EPS' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'EPS1' Name
+' ' Text
+'.' Punctuation
+'NE' Name
+'.' Punctuation
+' ' Text
+'1.D0' Literal.Number.Float
+')' Punctuation
+' ' Text
+'GO' Name
+' ' Text
+'TO' Name
+' ' Text
+'100' Literal.Number.Integer
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'EPS' Name
+' ' Text
+'=' Operator
+' ' Text
+'EPS' Name
+' ' Text
+'*' Operator
+' ' Text
+'2.D0' Literal.Number.Float
+'\n' Text
+
+'C\n' Comment
+
+'C--compute the l-1 norm of a\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'ANORM' Name
+' ' Text
+'=' Operator
+' ' Text
+'0.0D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'120' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'COLNRM' Name
+' ' Text
+'=' Operator
+' ' Text
+'0.D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'110' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'COLNRM' Name
+' ' Text
+'=' Operator
+' ' Text
+'COLNRM' Name
+' ' Text
+'+' Operator
+' ' Text
+'ABS' Name.Builtin
+'(' Punctuation
+'A' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'110 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'COLNRM' Name
+' ' Text
+'.' Punctuation
+'GT' Name
+'.' Punctuation
+' ' Text
+'ANORM' Name
+')' Punctuation
+' ' Text
+'ANORM' Name
+' ' Text
+'=' Operator
+' ' Text
+'COLNRM' Name
+'\n' Text
+
+'120 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--compute the l-1 norm of b\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'BNORM' Name
+' ' Text
+'=' Operator
+' ' Text
+'0.0D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'140' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'M' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'COLNRM' Name
+' ' Text
+'=' Operator
+' ' Text
+'0.D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'130' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'COLNRM' Name
+' ' Text
+'=' Operator
+' ' Text
+'COLNRM' Name
+' ' Text
+'+' Operator
+' ' Text
+'ABS' Name.Builtin
+'(' Punctuation
+'B' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'130 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'COLNRM' Name
+' ' Text
+'.' Punctuation
+'GT' Name
+'.' Punctuation
+' ' Text
+'BNORM' Name
+')' Punctuation
+' ' Text
+'BNORM' Name
+' ' Text
+'=' Operator
+' ' Text
+'COLNRM' Name
+'\n' Text
+
+'140 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--compute a + b * f\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'160' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'150' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'WORK' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'A' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+'\n' Text
+
+'150 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'160 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--the elements of f are random with uniform distribution\n' Comment
+
+'C--from -anorm/bnorm to +anorm/bnorm\n' Comment
+
+'C--note that f is not explicitly stored as a matrix\n' Comment
+
+'C--pathalogical floating point notes: the if (bnorm .gt. 0.d0)\n' Comment
+
+'C--test should actually be if (bnorm .gt. dsmall), where dsmall\n' Comment
+
+'C--is the smallest representable number whose reciprocal does\n' Comment
+
+'C--not generate an overflow or loss of precision.\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'ISEED' Name
+' ' Text
+'.' Punctuation
+'EQ' Name
+'.' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'ISEED' Name
+' ' Text
+'=' Operator
+' ' Text
+'86345823' Literal.Number.Integer
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'ANORM' Name
+' ' Text
+'.' Punctuation
+'EQ' Name
+'.' Punctuation
+' ' Text
+'0.D0' Literal.Number.Float
+')' Punctuation
+' ' Text
+'ANORM' Name
+' ' Text
+'=' Operator
+' ' Text
+'1.D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'BNORM' Name
+' ' Text
+'.' Punctuation
+'GT' Name
+'.' Punctuation
+' ' Text
+'0.D0' Literal.Number.Float
+')' Punctuation
+' ' Text
+'THEN' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'TEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'2.D0' Literal.Number.Float
+' ' Text
+'*' Operator
+' ' Text
+'ANORM' Name
+' ' Text
+'/' Operator
+' ' Text
+'BNORM' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'ELSE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'TEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'2.D0' Literal.Number.Float
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'END ' Keyword
+'IF' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'190' Literal.Number.Integer
+' ' Text
+'K' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'M' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'180' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CALL ' Keyword
+'RAND' Name.Builtin
+'(' Punctuation
+'ISEED' Name
+',' Punctuation
+'ISEED' Name
+',' Punctuation
+'RNDMNO' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'VALUE' Keyword
+' ' Text
+'=' Operator
+' ' Text
+'(' Punctuation
+'RNDMNO' Name
+' ' Text
+'-' Operator
+' ' Text
+'0.5D0' Literal.Number.Float
+')' Punctuation
+' ' Text
+'*' Operator
+' ' Text
+'TEMP' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'170' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'WORK' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'WORK' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+' ' Text
+'+' Operator
+' ' Text
+'B' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'K' Name
+')' Punctuation
+'*' Operator
+'VALUE' Keyword
+'\n' Text
+
+'170 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'180 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'190 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--compute the eigenvalues of a + b*f, and several other things\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CALL ' Keyword
+'EIGEN' Name
+' ' Text
+'(' Punctuation
+'0' Literal.Number.Integer
+',' Punctuation
+'SIZE' Name
+',' Punctuation
+'N' Name
+',' Punctuation
+'WORK' Name
+',' Punctuation
+'CLEVR' Name
+',' Punctuation
+'CLEVI' Name
+',' Punctuation
+'WORK' Name
+',' Punctuation
+'SCR1' Name
+',' Punctuation
+'SCR2' Name
+',' Punctuation
+'IERR' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'IERR' Name
+' ' Text
+'.' Punctuation
+'NE' Name
+'.' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'RETURN' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--copy a so it is not destroyed\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'210' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'200' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'WORK' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'A' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+'\n' Text
+
+'200 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'210 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--compute the eigenvalues of a, and several other things\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CALL ' Keyword
+'EIGEN' Name
+' ' Text
+'(' Punctuation
+'0' Literal.Number.Integer
+',' Punctuation
+'SIZE' Name
+',' Punctuation
+'N' Name
+',' Punctuation
+'WORK' Name
+',' Punctuation
+'OLEVR' Name
+',' Punctuation
+'OLEVI' Name
+',' Punctuation
+'WORK' Name
+',' Punctuation
+'SCR1' Name
+',' Punctuation
+'SCR2' Name
+',' Punctuation
+'IERR' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'IERR' Name
+' ' Text
+'.' Punctuation
+'NE' Name
+'.' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'RETURN' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--form the matrix of distances between eigenvalues of a and\n' Comment
+
+'C--EIGENVALUES OF A+B*F\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'230' Literal.Number.Integer
+' ' Text
+'J' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'220' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'WORK' Name
+'(' Punctuation
+'I' Name
+',' Punctuation
+'J' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'\n' Text
+
+' ' Name.Label
+'&' Generic.Strong
+' ' Text
+'ABS' Name.Builtin
+'(' Punctuation
+'DCMPLX' Name
+'(' Punctuation
+'OLEVR' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+',' Punctuation
+'OLEVI' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+')' Punctuation
+'-' Operator
+'DCMPLX' Name
+'(' Punctuation
+'CLEVR' Name
+'(' Punctuation
+'J' Name
+')' Punctuation
+',' Punctuation
+'CLEVI' Name
+'(' Punctuation
+'J' Name
+')' Punctuation
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'220 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'230 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--initialize row and column pivots\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'240' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'JPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+'\n' Text
+
+'240 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--a little bit messy to avoid swapping columns and\n' Comment
+
+'C--rows of work\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'270' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'-' Operator
+'1' Literal.Number.Integer
+'\n' Text
+
+'C\n' Comment
+
+'C--find the minimum element of each lower right square\n' Comment
+
+'C--submatrix of work, for submatrices of size n x n\n' Comment
+
+'C--through 2 x 2\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CURR' Name
+' ' Text
+'=' Operator
+' ' Text
+'WORK' Name
+'(' Punctuation
+'IPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+',' Punctuation
+'JPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IMAX' Name
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'JMAX' Name
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'TEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'CURR' Name
+'\n' Text
+
+'C\n' Comment
+
+'C--find the minimum element\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'260' Literal.Number.Integer
+' ' Text
+'K1' Name
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'250' Literal.Number.Integer
+' ' Text
+'K2' Name
+' ' Text
+'=' Operator
+' ' Text
+'I' Name
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'WORK' Name
+'(' Punctuation
+'IPVT' Name
+'(' Punctuation
+'K1' Name
+')' Punctuation
+',' Punctuation
+'JPVT' Name
+'(' Punctuation
+'K2' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'.' Punctuation
+'LT' Name
+'.' Punctuation
+' ' Text
+'TEMP' Name
+')' Punctuation
+' ' Text
+'THEN' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'TEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'WORK' Name
+'(' Punctuation
+'IPVT' Name
+'(' Punctuation
+'K1' Name
+')' Punctuation
+',' Punctuation
+'JPVT' Name
+'(' Punctuation
+'K2' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IMAX' Name
+' ' Text
+'=' Operator
+' ' Text
+'K1' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'JMAX' Name
+' ' Text
+'=' Operator
+' ' Text
+'K2' Name
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'END ' Keyword
+'IF' Keyword
+'\n' Text
+
+'250 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'260 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--update row and column pivots for indirect addressing of work\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'ITEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'IPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'IPVT' Name
+'(' Punctuation
+'IMAX' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IPVT' Name
+'(' Punctuation
+'IMAX' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'ITEMP' Name
+'\n' Text
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'ITEMP' Name
+' ' Text
+'=' Operator
+' ' Text
+'JPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'JPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'JPVT' Name
+'(' Punctuation
+'JMAX' Name
+')' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'JPVT' Name
+'(' Punctuation
+'JMAX' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'ITEMP' Name
+'\n' Text
+
+'C\n' Comment
+
+'C--do next submatrix\n' Comment
+
+'C\n' Comment
+
+'270 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--this threshold for determining when an eigenvalue has\n' Comment
+
+'C--not moved, and is therefore uncontrollable, is critical,\n' Comment
+
+'C--and may require future changes with more experience.\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'EPS1' Name
+' ' Text
+'=' Operator
+' ' Text
+'SQRT' Name.Builtin
+'(' Punctuation
+'EPS' Name
+')' Punctuation
+'\n' Text
+
+'C\n' Comment
+
+'C--for each eigenvalue pair, decide if it is controllable\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'DO ' Keyword
+'280' Literal.Number.Integer
+' ' Text
+'I' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'N' Name
+'\n' Text
+
+'C\n' Comment
+
+'C--note that we are working with the "pivoted" work matrix\n' Comment
+
+'C--and are looking at its diagonal elements\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'IF' Keyword
+' ' Text
+'(' Punctuation
+'WORK' Name
+'(' Punctuation
+'IPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+',' Punctuation
+'JPVT' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+')' Punctuation
+'/' Operator
+'ANORM' Name
+' ' Text
+'.' Punctuation
+'LE' Name
+'.' Punctuation
+' ' Text
+'EPS1' Name
+')' Punctuation
+' ' Text
+'THEN' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CON' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'.' Punctuation
+'FALSE' Name
+'.' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'ELSE' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'CON' Name
+'(' Punctuation
+'I' Name
+')' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'.' Punctuation
+'TRUE' Name
+'.' Punctuation
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'END ' Keyword
+'IF' Keyword
+'\n' Text
+
+'280 ' Name.Label
+' ' Text
+' ' Text
+'CONTINUE' Keyword
+'\n' Text
+
+'C\n' Comment
+
+'C--finally!\n' Comment
+
+'C\n' Comment
+
+' ' Name.Label
+' ' Text
+' ' Text
+'RETURN' Keyword
+'\n' Text
+
+' ' Name.Label
+' ' Text
+' ' Text
+'END' Keyword
+'\n' Text