*COMMENT
 
      THIS IS A TEST FILE FOR THE TEMPLATE PROCESSOR.  IT TESTS
      NEARLY ALL THE DIRECTIVE AND MACRO PROCESSING FACILITIES
      OF THE TEMPLATE PROCESSOR.  THE SIMPLER FEATURES OF THE
      PROCESSOR ARE WORKING IF THE OUTPUT APPEARS AS BELOW.  ERROR
      MESSAGES WILL BE PRINTED IF ANY OF THE MORE COMPLEX
      FEATURES FAIL TO WORK.
 
      CORRECT OUTPUT FROM TEST FILE:
 
      I11     =  11
      I21     =  21
      I2      =  2
      TRUE    =  .TRUE.
      FALSE   =  .FALSE.
      AB      =  AB
      ITEMP   =  11
      LINE 1
      LINE 2
 
     A  =  B
     A  =  C
 
          X(1)      =  Y(1)
          LABEL(1)  =  10001
          X(2)      =  Y(2)
          LABEL(2)  =  10002
          X(3)      =  Y(3)
          LABEL(3)  =  10003
 
          X(7)  =  Y(7)
 
              LINE(1,11)  =  '**AB**'
              LINE(1,13)  =  '**CD**'
              LINE(2,11)  =  '**AB**'
              LINE(2,13)  =  '**CD**'
 
              X(1,5)  =  0.15
              X(1,10)  =  0.110
              X(2,5)  =  0.25
              X(2,10)  =  0.210
 
          X(1)      =  Y(1)
          LABEL(1)  =  10001
          X(2)      =  Y(2)
          LABEL(2)  =  10002
          X(3)      =  Y(3)
          LABEL(3)  =  10003
  THESE ARE THE LAST TWO
      LINES OF THIS INCLUDED TEXT.
 
      IJUMPI  =  IJUMP(I)
      GO  TO  (10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008,
     Z    10009, 10010, 10011, 10012, 10013, 10014, 10015, 10016, 10017)
     Z    ,  IJUMPI
 
*ENDCOM
*OPTION ( LFORT   =  .TRUE. )
*OPTION ( LBREAK  =  .TRUE. )
*COMMENT
 
      TEST VARIOUS FORMS OF THE SET STATEMENT
 
*ENDCOM
*SET ( I11    =  11 )
*SET ( I21    =  21 )
*SET ( I2     =  2  )
*SET ( TRUE   =  .TRUE. )
*SET ( FALSE  =  .FALSE. )
*SET ( AB     =  'AB' )
*SET ( CD     =  'CD' )
*SET
       WX     =  'WX'
       YZ     =  'YZ'
       ITEMP  =  I11
       LINES  =
      LINE 1
      LINE 2
*
*ENDSET
 
      I11     =  $I11
*OPTION ( CDIR = '+' )
+OPTION ( CSUB = '&' )
      I21     =  &(I21)
      I2      =  &I2
      TRUE    =  &(TRUE)
+OPTION ( CSUB = '$' )
+OPTION ( CDIR = '*' )
      FALSE   =  $FALSE
      AB      =  $(AB)
      ITEMP   =  $ITEMP
*INCLUDE ( LINES )
 
*COMMENT
 
      TEST ONE-LINE IF STATEMENTS
 
*ENDCOM
*SET ( L1  =  .TRUE. )
*SET ( L2  =  .FALSE. )
*SET ( A   =  'B' )
     A  =  $A
*IF ( L1 ) *SET ( A  =  'C' )
     A  =  $A
 
*COMMENT
 
      TEST NESTED IF STATEMENTS
 
*ENDCOM
*IF ( L2 )
    *IF ( L1 ) *SET ( X  =  'Y' )
*ELSE
    *IF ( L1 ) *SET ( X  =  'Z' )
*ENDIF
*SET
 TEST =    'X  =  $X'
 ANS  =    'X  =  Z'
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN NESTED IF TEST
*ENDIF
*COMMENT
 
      TEST MORE COMPLEX NESTING
 
*ENDCOM
*IF ( L1 )
    *IF ( L2 ) *SET ( P  =  'Q' )
    *IF ( L1 )
        *IF ( L2 ) *SET ( P  =  'Q' )
    *ELSE
        *IF ( L2 ) *SET ( P  =  'Q' )
    *ENDIF
    *IF ( L1 ) *SET ( P  =  'R' )
*ELSE
    *IF ( L2 ) *SET ( P  =  'S' )
    *IF ( L1 )
        *IF ( L2 ) *SET ( P  =  'S' )
    *ELSE
        *IF ( L2 ) *SET ( P  =  'S' )
    *ENDIF
    *IF ( L1 ) *SET ( P  =  'T' )
*ENDIF
*SET
 TEST =    'P  =  $P'
 ANS  =    'P  =  R'
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN COMPLEX IF TEST
*ENDIF
*COMMENT
 
      TEST EXPRESSION IN IF STATEMENT
 
*ENDCOM
*SET ( E = 10 )
*SET ( F = 20 )
*IF ( E = F )
    *SET ( U = 'V' )
*ELSE
    *SET ( U = 'W' )
*ENDIF
*SET
 TEST1=    'U  =  $U'
 ANS1 =    'U  =  W'
*ENDSET
*IF ( F = 20 )  *SET ( U = 'V' )
*SET
 TEST2=    'U  =  $U'
 ANS2 =    'U  =  V'
*ENDSET
*IF (ANS1 = TEST1)
*ELSE
++++++++ERROR IN EXPRESSION-IN-IF TEST
*ENDIF
*IF (ANS2 = TEST2)
*ELSE
++++++++ERROR IN EXPRESSION-IN-IF TEST
*ENDIF
*COMMENT
 
      TEST THE CONTINUATION CHARACTER
 
*ENDCOM
*SET ( LONG   $+
      = 'STRING 1' )
*SET ( TEST1 )
      LONG    =  $LONG
*ENDSET
*SET ( LONG   =  $+
      'STRING 2' )
*SET ( TEST2 )
      LONG    =  $LONG
*ENDSET
*SET ( LONG   =  'STRING$+
 3' )
*SET ( TEST3 )
      LONG    =  $LONG
*ENDSET
*SET ( LONG   =  'STRING 4'$+
      )
*SET ( TEST4 )
      LONG    =  $LONG
*ENDSET
*SET
      ANS1 =
      LONG    =  STRING 1
*
      ANS2 =
      LONG    =  STRING 2
*
      ANS3 =
      LONG    =  STRING 3
*
      ANS4 =
      LONG    =  STRING 4
*
*ENDSET
*IF(ANS1 = TEST1)
*ELSE
++++++++ERROR IN CONTINUATION CHARACTER TEST
*ENDIF
*IF(ANS2 = TEST2)
*ELSE
++++++++ERROR IN CONTINUATION CHARACTER TEST
*ENDIF
*IF(ANS3 = TEST3)
*ELSE
++++++++ERROR IN CONTINUATION CHARACTER TEST
*ENDIF
*IF(ANS4 = TEST4)
*ELSE
++++++++ERROR IN CONTINUATION CHARACTER TEST
*ENDIF
*COMMENT
 
      TEST NESTED SUBSTITUTIONS
 
*ENDCOM
*SET ( ABCD   =  '$$AB$$CD' )
*SET ( WXYZ   =  '$$WX$$YZ' )
*SET ( ABCDWXYZ )
       ABCD   =  $$ABCD
       WXYZ   =  $$WXYZ
*ENDSET
*SET (TEST1)
       ABCD   =  $ABCD
       WXYZ   =  $WXYZ
*ENDSET
*SET (TEST2)
$ABCDWXYZ$+
*ENDSET
*SET ( ABCD   =  '$$WX$$YZ' )
*SET ( WXYZ   =  '$$AB$$CD' )
*SET (TEST3)
$ABCDWXYZ$+
*ENDSET
*SET
      ANS1  =
       ABCD   =  ABCD
       WXYZ   =  WXYZ
*
      ANS2  =
       ABCD   =  ABCD
       WXYZ   =  WXYZ
*
      ANS3  =
       ABCD   =  WXYZ
       WXYZ   =  ABCD
*
*ENDSET
*IF (ANS1 = TEST1)
*ELSE
++++++++ERROR IN NESTED SUBSTITUTION TEST
*ENDIF
*IF (ANS2 = TEST2)
*ELSE
++++++++ERROR IN NESTED SUBSTITUTION TEST
*ENDIF
*IF (ANS3 = TEST3)
*ELSE
++++++++ERROR IN NESTED SUBSTITUTION TEST
*ENDIF
*COMMENT
 
      TEST THE APPEND STATEMENT
 
*ENDCOM
*APPEND ( TEMP1, 11 )
*APPEND ( TEMP2, .TRUE. )
*APPEND ( TEMP1, 'AB' )
*APPEND ( TEMP2, ITEMP )
*APPEND ( LINES )
      LINE 3
      LINE 4
*ENDAPP
*SET
     TEST1  =
      TEMP1   =  $TEMP1
*
     TEST2  =
      TEMP2   =  $TEMP2
*
     TEST3  =
$LINES$+
*
*ENDSET
*SET
     ANS1   =
      TEMP1   =  11AB
*
     ANS2   =
      TEMP2   =  .TRUE.11
*
     ANS3   =
      LINE 1
      LINE 2
      LINE 3
      LINE 4
*
*ENDSET
*IF (ANS1 = TEST1)
*ELSE
++++++++ERROR IN APPEND TEST
*ENDIF
*IF (ANS2 = TEST2)
*ELSE
++++++++ERROR IN APPEND TEST
*ENDIF
*IF (ANS3 = TEST3)
*ELSE
++++++++ERROR IN APPEND TEST
*ENDIF
*COMMENT
 
      TEST THE DEF SUBSTITUTION AND THE DELETE STATEMENT
 
*ENDCOM
*SET (TEST)
      DEF(ABCD)   =  $DEF(ABCD)
      DEF(ITEMP)  =  $DEF(ITEMP)
      DEF(LONG)   =  $DEF(LONG)
      DEF(TEMP1)  =  $DEF(TEMP1)
      DEF(TEMP2)  =  $DEF(TEMP2)
      DEF(WXYZ)   =  $DEF(WXYZ)
*ENDSET
*SET (ANS)
      DEF(ABCD)   =  .TRUE.
      DEF(ITEMP)  =  .TRUE.
      DEF(LONG)   =  .TRUE.
      DEF(TEMP1)  =  .TRUE.
      DEF(TEMP2)  =  .TRUE.
      DEF(WXYZ)   =  .TRUE.
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN DEF SUBSTITUTION TEST
*ENDIF
*DELETE ( ABCD )
*DELETE ( ITEMP )
*DELETE ( LONG )
*DELETE ( TEMP1 )
*DELETE ( TEMP2 )
*DELETE ( WXYZ )
*SET (TEST)
      DEF(ABCD)   =  $DEF(ABCD)
      DEF(ITEMP)  =  $DEF(ITEMP)
      DEF(LONG)   =  $DEF(LONG)
      DEF(TEMP1)  =  $DEF(TEMP1)
      DEF(TEMP2)  =  $DEF(TEMP2)
      DEF(WXYZ)   =  $DEF(WXYZ)
*ENDSET
*SET (ANS)
      DEF(ABCD)   =  .FALSE.
      DEF(ITEMP)  =  .FALSE.
      DEF(LONG)   =  .FALSE.
      DEF(TEMP1)  =  .FALSE.
      DEF(TEMP2)  =  .FALSE.
      DEF(WXYZ)   =  .FALSE.
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN DELETE TEST
*ENDIF
*COMMENT
 
      TEST THE LIST SUBSTITUTION AND THE RESET STATEMENT
 
*ENDCOM
*SET ( ITEM   =  '$AB$$/$CD$$/' )
*SET (TEST)
      ITEM 1  =  **$LIST(ITEM)**
      ITEM 2  =  **$LIST(ITEM)**
      ITEM 3  =  **$LIST(ITEM)**
      ITEM 4  =  **$LIST(ITEM)**
*ENDSET
*SET (ANS)
      ITEM 1  =  **AB**
      ITEM 2  =  **CD**
      ITEM 3  =  ****
      ITEM 4  =  ****
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN LIST SUBSTITUTION TEST
*ENDIF
*APPEND ( ITEM, '$WX$$/$YZ$$/' )
*SET (TEST)
      ITEM 3  =  **$LIST(ITEM)**
      ITEM 4  =  **$LIST(ITEM)**
      ITEM 5  =  **$LIST(ITEM)**
      ITEM 6  =  **$LIST(ITEM)**
*ENDSET
*SET (ANS)
      ITEM 3  =  **WX**
      ITEM 4  =  **YZ**
      ITEM 5  =  ****
      ITEM 6  =  ****
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN LIST SUBSTITUTION TEST
*ENDIF
*RESET ( ITEM )
*SET (TEST)
      ITEM 1  =  **$LIST(ITEM)**
      ITEM 2  =  **$LIST(ITEM)**
      ITEM 3  =  **$LIST(ITEM)**
      ITEM 4  =  **$LIST(ITEM)**
      ITEM 5  =  **$LIST(ITEM)**
      ITEM 6  =  **$LIST(ITEM)**
*ENDSET
*SET (ANS)
      ITEM 1  =  **AB**
      ITEM 2  =  **CD**
      ITEM 3  =  **WX**
      ITEM 4  =  **YZ**
      ITEM 5  =  ****
      ITEM 6  =  ****
*ENDSET
*IF (ANS = TEST)
*ELSE
++++++++ERROR IN RESET TEST
*ENDIF
*COMMENT
 
      TEST THE DO STATEMENT AND LABEL AND LIST SUBSTITUTIONS
 
*ENDCOM
      *SET ( LABEL  =  10000 )
      *DO ( I  =  1, 3 )
          X($I)      =  Y($I)
          LABEL($I)  =  $LABEL
      *ENDDO
 
      *DO ( I  =  7, 1 )
          X($I)  =  Y($I)
      *ENDDO
 
      *SET ( I13    =  13 )
      *DO ( I  =  1, 2 )
          *RESET ( ITEM )
          *DO ( J  =  I11, I13, I2 )
              LINE($I,$J)  =  '**$LIST(ITEM)**'
          *ENDDO
      *ENDDO
 
      *DO ( I  =  1, 2 )
          *DO ( J  =  5, 10, 5 )
              X($I,$J)  =  0.$I$J
          *ENDDO
      *ENDDO
 
*COMMENT
 
      TEST MACROS CONTAINING DIRECTIVES
 
*ENDCOM
*SET ( LINES )
      *SET ( LABEL  =  10000 )
      *DO ( I  =  1, 3 )
          X($$I)      =  Y($$I)
          LABEL($$I)  =  $$LABEL
      *ENDDO
  THESE ARE THE LAST TWO
      LINES OF THIS INCLUDED TEXT.
*ENDSET
*INCLUDE ( LINES )
 
*COMMENT
 
      TEST THE FORTRAN LINE WRITER AND THE INCLUDE DIRECTIVE
 
*ENDCOM
*SET ( LINES )
      IJUMPI  =  IJUMP(I)
*ENDSET
*APPEND ( LINES, '      GO  TO  (10001, 10002, 10003, 10004,' )
*APPEND ( LINES, ' 10005, 10006, 10007, 10008, 10009, 10010,' )
*APPEND ( LINES )
 10011, 10012, 10013, 10014, 10015, 10016, 10017),  IJUMPI
*ENDAPP
*INCLUDE(LINES)
*END
*OPTION ( LISTI   =  .TRUE. )
*OPTION ( LISTO   =  .TRUE. )
