
C
C COPY - COPY STANDARD INPUT TO STANDARD OUTPUT
      INTEGER C, GETCH, DUMMY
C
10    CONTINUE
C                       10003 INDICATES AN EOF
      IF (GETCH(C,DUMMY) .EQ. 10003)  GO TO 25
      CALL PUTCH (C, DUMMY)
      GO TO 10
C
25    CONTINUE
C
C                      ALSO TEST REMARK
      CALL REMARK (17HEND OF COPY TEST.)
      CALL EXIT
      END
C
C GETCH - GET CHARACTERS FROM FILE
C
       INTEGER FUNCTION GETCH(C, F)
       INTEGER INMAP
       INTEGER BUF(81), C
       INTEGER F, I, LASTC
       DATA LASTC /81/, BUF(81) /10/
C
C                      10 IS THE NEWLINE CHARACTER
       IF(.NOT.(BUF(LASTC) .EQ. 10 .OR. LASTC .GE. 81))   GOTO 23114
C                  CHANGE THE UNIT NUMBER IF NECESSARY
       READ(5, 1, END=10) (BUF(I), I = 1, 80)
1      FORMAT(80 A1)
       CONTINUE
       I = 1
23116  IF(.NOT.( I .LE. 80))   GOTO 23118
       BUF(I) = INMAP(BUF(I))
23117   I = I + 1
       GOTO 23116
23118  CONTINUE
       CONTINUE
       I = 80
23119  IF(.NOT.( I .GT. 0)) GOTO 23121
C                           32 IS BLANK
       IF(.NOT.(BUF(I) .NE. 32))  GOTO 23122
       GOTO 23121
23122  CONTINUE
23120   I = I - 1
       GOTO 23119
23121  CONTINUE
C                 10 IS NEWLINE
       BUF(I+1) = 10
       LASTC = 0
23114  CONTINUE
       LASTC = LASTC + 1
       C = BUF(LASTC)
       GETCH = C
       RETURN
C          10003 IS END-OF-FILE MARKER
10     C = 10003
       GETCH = 10003
       RETURN
       END
C
C PUTCH (INTERIM VERSION)  PUT CHARACTERS
C
       SUBROUTINE PUTCH(C, F)
       INTEGER BUF(81), C
       INTEGER OUTMAP
       INTEGER F, I, LASTC
       DATA LASTC /0/
C
C                        10 IS THE NEWLINE CHARACTER
       IF(.NOT.(LASTC .GE. 81 .OR. C .EQ. 10))   GOTO 23342
       IF(.NOT.( LASTC .LE. 0 ))  GOTO 23344
C                 IF NECESSARY, CHANGE THE UNIT NUMBER IS THE
C                 2 WRITE STATEMENTS IN THIS ROUTINE AND THE
C                 1 IN REMARK
       WRITE(6,2)
2      FORMAT(/)
       GOTO 23345
23344  CONTINUE
       WRITE(6, 1) (BUF(I), I = 1, LASTC)
1      FORMAT(80 A1)
23345  CONTINUE
       LASTC = 0
23342  CONTINUE
C                      10 IS NEWLINE
       IF(.NOT.(C .NE. 10)) GOTO 23346
       LASTC = LASTC + 1
       BUF(LASTC) = OUTMAP(C)
23346  CONTINUE
       RETURN
       END
C
C REMARK - INTERIM VERSION
C
       SUBROUTINE REMARK(BUF)
       INTEGER BUF(100), I
C            DON'T WORRY ABOUT FINDING THE END OF THE BUF
C            ARRAY JUST YET.  SIMPLY PRINT OUT 20 OR SO
C            CHARACTERS IN WHATEVER FORMAT YOUR SYSTEM
C            NEEDS FOR PRINTING HOLLERITH ARRAYS.
C
C                 YOU MIGHT HAVE THE CHANGE THE UNIT NUMBER
       WRITE(6, 10) (BUF(I), I = 1, 10)
10     FORMAT(10A2)
       RETURN
       END
C
C INMAP - CONVERT LEFT ADJUSTED EXTERNAL REP TO RIGHT ADJ ASCII
C
       INTEGER FUNCTION INMAP(INCHAR)
       INTEGER I, INCHAR
       COMMON /CCHAR/ EXTDIG(10), INTDIG(10), EXTLET(26), INTLET(26),  E
     *XTBIG(26), INTBIG(26), EXTCHR(33), INTCHR(33),  EXTBLK, INTBLK
       INTEGER EXTDIG
       INTEGER INTDIG
       INTEGER EXTLET
       INTEGER INTLET
       INTEGER EXTBIG
       INTEGER INTBIG
       INTEGER EXTCHR
       INTEGER INTCHR
       INTEGER EXTBLK
       INTEGER INTBLK
C
C                IS IT A BLANK?
       IF(.NOT.(INCHAR .EQ. EXTBLK)) GOTO 23194
       INMAP = INTBLK
       RETURN
23194  CONTINUE
       DO23196I = 1, 10
C                IS IT A DIGIT?
       IF(.NOT.(INCHAR .EQ. EXTDIG(I))) GOTO 23198
       INMAP = INTDIG(I)
       RETURN
23198  CONTINUE
23196  CONTINUE
23197  CONTINUE
C                 IS IT A SMALL LETTER?
       DO23200I = 1, 26
       IF(.NOT.(INCHAR .EQ. EXTLET(I))) GOTO 23202
       INMAP = INTLET(I)
       RETURN
23202  CONTINUE
23200  CONTINUE
23201  CONTINUE
C                 IS IT A CAPITAL LETTER?
       DO23204I = 1, 26
       IF(.NOT.(INCHAR .EQ. EXTBIG(I))) GOTO 23206
       INMAP = INTBIG(I)
       RETURN
23206  CONTINUE
23204  CONTINUE
23205  CONTINUE
C               IS IT A SPECIAL CHARACTER?
       DO23208I = 1, 33
       IF(.NOT.(INCHAR .EQ. EXTCHR(I))) GOTO 23210
       INMAP = INTCHR(I)
       RETURN
23210  CONTINUE
23208  CONTINUE
23209  CONTINUE
C               MUST BE SOMETHING ELSE
       INMAP = INCHAR
       RETURN
       END
C
C
C OUTMAP - CONVERT RIGHT ADJ ASCII TO LEFT ADJUSTED EXTERNAL REP
C
       INTEGER FUNCTION OUTMAP(INCHAR)
       INTEGER I, INCHAR
       COMMON /CCHAR/ EXTDIG(10), INTDIG(10), EXTLET(26), INTLET(26),  E
     *XTBIG(26), INTBIG(26), EXTCHR(33), INTCHR(33),  EXTBLK, INTBLK
       INTEGER EXTDIG
       INTEGER INTDIG
       INTEGER EXTLET
       INTEGER INTLET
       INTEGER EXTBIG
       INTEGER INTBIG
       INTEGER EXTCHR
       INTEGER INTCHR
       INTEGER EXTBLK
       INTEGER INTBLK
C
C               IS IT A BLANK?
       IF(.NOT.(INCHAR .EQ. INTBLK)) GOTO 23270
       OUTMAP = EXTBLK
       RETURN
23270  CONTINUE
C               IS IT A DIGIT?
       DO23272I = 1, 10
       IF(.NOT.(INCHAR .EQ. INTDIG(I))) GOTO 23274
       OUTMAP = EXTDIG(I)
       RETURN
23274  CONTINUE
23272  CONTINUE
23273  CONTINUE
C                IS IT A SMALL LETTER?
       DO23276I = 1, 26
       IF(.NOT.(INCHAR .EQ. INTLET(I))) GOTO 23278
       OUTMAP = EXTLET(I)
       RETURN
23278  CONTINUE
23276  CONTINUE
23277  CONTINUE
C                   IS IT A CAPITAL LETTER?
       DO23280I = 1, 26
       IF(.NOT.(INCHAR .EQ. INTBIG(I))) GOTO 23282
       OUTMAP = EXTBIG(I)
       RETURN
23282  CONTINUE
23280  CONTINUE
23281  CONTINUE
C                    IS IT A SPECIAL CHARACTER?
       DO23284I = 1, 33
       IF(.NOT.(INCHAR .EQ. INTCHR(I))) GOTO 23286
       OUTMAP = EXTCHR(I)
       RETURN
23286  CONTINUE
23284  CONTINUE
23285  CONTINUE
C                 MUST BE SOMETHING ELSE
       OUTMAP = INCHAR
       RETURN
       END
                                                                                
C
C BLOCK DATA - INITIALIZE GLOBAL VARIABLES
C
       BLOCK DATA
       COMMON /CCHAR/ EXTDIG(10), INTDIG(10), EXTLET(26), INTLET(26),  E
     *XTBIG(26), INTBIG(26), EXTCHR(33), INTCHR(33),  EXTBLK, INTBLK
       INTEGER EXTDIG
       INTEGER INTDIG
       INTEGER EXTLET
       INTEGER INTLET
       INTEGER EXTBIG
       INTEGER INTBIG
       INTEGER EXTCHR
       INTEGER INTCHR
       INTEGER EXTBLK
       INTEGER INTBLK
       DATA EXTBLK /1H /, INTBLK /32/
       DATA EXTDIG(1) /1H0/, INTDIG(1) /48/
       DATA EXTDIG(2) /1H1/, INTDIG(2) /49/
       DATA EXTDIG(3) /1H2/, INTDIG(3) /50/
       DATA EXTDIG(4) /1H3/, INTDIG(4) /51/
       DATA EXTDIG(5) /1H4/, INTDIG(5) /52/
       DATA EXTDIG(6) /1H5/, INTDIG(6) /53/
       DATA EXTDIG(7) /1H6/, INTDIG(7) /54/
       DATA EXTDIG(8) /1H7/, INTDIG(8) /55/
       DATA EXTDIG(9) /1H8/, INTDIG(9) /56/
       DATA EXTDIG(10) /1H9/, INTDIG(10) /57/
       DATA EXTLET(1) /1Ha/, INTLET(1) /97/
       DATA EXTLET(2) /1Hb/, INTLET(2) /98/
       DATA EXTLET(3) /1Hc/, INTLET(3) /99/
       DATA EXTLET(4) /1Hd/, INTLET(4) /100/
       DATA EXTLET(5) /1He/, INTLET(5) /101/
       DATA EXTLET(6) /1Hf/, INTLET(6) /102/
       DATA EXTLET(7) /1Hg/, INTLET(7) /103/
       DATA EXTLET(8) /1Hh/, INTLET(8) /104/
       DATA EXTLET(9) /1Hi/, INTLET(9) /105/
       DATA EXTLET(10) /1Hj/, INTLET(10) /106/
       DATA EXTLET(11) /1Hk/, INTLET(11) /107/
       DATA EXTLET(12) /1Hl/, INTLET(12) /108/
       DATA EXTLET(13) /1Hm/, INTLET(13) /109/
       DATA EXTLET(14) /1Hn/, INTLET(14) /110/
       DATA EXTLET(15) /1Ho/, INTLET(15) /111/
       DATA EXTLET(16) /1Hp/, INTLET(16) /112/
       DATA EXTLET(17) /1Hq/, INTLET(17) /113/
       DATA EXTLET(18) /1Hr/, INTLET(18) /114/
       DATA EXTLET(19) /1Hs/, INTLET(19) /115/
       DATA EXTLET(20) /1Ht/, INTLET(20) /116/
       DATA EXTLET(21) /1Hu/, INTLET(21) /117/
       DATA EXTLET(22) /1Hv/, INTLET(22) /118/
       DATA EXTLET(23) /1Hw/, INTLET(23) /119/
       DATA EXTLET(24) /1Hx/, INTLET(24) /120/
       DATA EXTLET(25) /1Hy/, INTLET(25) /121/
       DATA EXTLET(26) /1Hz/, INTLET(26) /122/
       DATA EXTBIG(1) /1HA/, INTBIG(1) /65/
       DATA EXTBIG(2) /1HB/, INTBIG(2) /66/
       DATA EXTBIG(3) /1HC/, INTBIG(3) /67/
       DATA EXTBIG(4) /1HD/, INTBIG(4) /68/
       DATA EXTBIG(5) /1HE/, INTBIG(5) /69/
       DATA EXTBIG(6) /1HF/, INTBIG(6) /70/
       DATA EXTBIG(7) /1HG/, INTBIG(7) /71/
       DATA EXTBIG(8) /1HH/, INTBIG(8) /72/
       DATA EXTBIG(9) /1HI/, INTBIG(9) /73/
       DATA EXTBIG(10) /1HJ/, INTBIG(10) /74/
       DATA EXTBIG(11) /1HK/, INTBIG(11) /75/
       DATA EXTBIG(12) /1HL/, INTBIG(12) /76/
       DATA EXTBIG(13) /1HM/, INTBIG(13) /77/
       DATA EXTBIG(14) /1HN/, INTBIG(14) /78/
       DATA EXTBIG(15) /1HO/, INTBIG(15) /79/
       DATA EXTBIG(16) /1HP/, INTBIG(16) /80/
       DATA EXTBIG(17) /1HQ/, INTBIG(17) /81/
       DATA EXTBIG(18) /1HR/, INTBIG(18) /82/
       DATA EXTBIG(19) /1HS/, INTBIG(19) /83/
       DATA EXTBIG(20) /1HT/, INTBIG(20) /84/
       DATA EXTBIG(21) /1HU/, INTBIG(21) /85/
       DATA EXTBIG(22) /1HV/, INTBIG(22) /86/
       DATA EXTBIG(23) /1HW/, INTBIG(23) /87/
       DATA EXTBIG(24) /1HX/, INTBIG(24) /88/
       DATA EXTBIG(25) /1HY/, INTBIG(25) /89/
       DATA EXTBIG(26) /1HZ/, INTBIG(26) /90/
C
C      SPECIAL CHARACTERS -- YOU MIGHT HAVE TO CHANGE SOME OF THESE
C
       DATA EXTCHR(1) /1H!/, INTCHR(1) /33/
C                      EXCLAMATION POINT
       DATA EXTCHR(2) /1H"/, INTCHR(2) /34/
C                      DOUBLE QUOTE
       DATA EXTCHR(3) /1H#/, INTCHR(3) /35/
C                      POUND (NUMBER) SIGN
       DATA EXTCHR(4) /1H$/, INTCHR(4) /36/
C                      DOLLAR SIGN
       DATA EXTCHR(5) /1H%/, INTCHR(5) /37/
C                      PERCENT
       DATA EXTCHR(6) /1H&/, INTCHR(6) /38/
C                      AMPERSAND
       DATA EXTCHR(7) /1H'/, INTCHR(7) /39/
C                      SINGLE QUOTE
       DATA EXTCHR(8) /1H(/, INTCHR(8) /40/
C                      LEFT PAREN
       DATA EXTCHR(9) /1H)/, INTCHR(9) /41/
C                      RIGHT PAREN
       DATA EXTCHR(10) /1H*/, INTCHR(10) /42/
C                       ASTERISK
       DATA EXTCHR(11) /1H+/, INTCHR(11) /43/
C                       PLUS
       DATA EXTCHR(12) /1H,/, INTCHR(12) /44/
C                       COMMA
       DATA EXTCHR(13) /1H-/, INTCHR(13) /45/
C                       DASH (MINUS)
       DATA EXTCHR(14) /1H./, INTCHR(14) /46/
C                       PERIOD
       DATA EXTCHR(15) /1H//, INTCHR(15) /47/
       DATA EXTCHR(16) /1H:/, INTCHR(16) /58/
C                       COLON
       DATA EXTCHR(17) /1H;/, INTCHR(17) /59/
C                       SEMICOLON
       DATA EXTCHR(18) /1H</, INTCHR(18) /60/
C                       LESS THAN (LEFT ANGLE BRACKET)
       DATA EXTCHR(19) /1H=/, INTCHR(19) /61/
C                       EQUALS
       DATA EXTCHR(20) /1H>/, INTCHR(20) /62/
C                       GREATER THAN (RIGHT ANGLE BRACKET)
       DATA EXTCHR(21) /1H?/, INTCHR(21) /63/
C                       QUESTION MARK
       DATA EXTCHR(22) /1H@/, INTCHR(22) /64/
C                       ATSIGN
       DATA EXTCHR(23) /1H[/, INTCHR(23) /91/
C                      LEFT BRACKET
       DATA EXTCHR(24) /1H\/, INTCHR(24) /92/
C                     BACKSLASH
       DATA EXTCHR(25) /1H]/, INTCHR(25) /93/
C                    RIGHT BRACKET
       DATA EXTCHR(26) /1H_/, INTCHR(26) /95/
C                    UNDERSCORE
       DATA EXTCHR(27) /1H{/, INTCHR(27) /123/
C                    LEFT BRACE
       DATA EXTCHR(28) /1H|/, INTCHR(28) /124/
C                    VERTICAL BAR
       DATA EXTCHR(29) /1H}/, INTCHR(29) /125/
C                    RIGHT BRACE
       DATA EXTCHR(30) /1H/, INTCHR(30) /8/
C                   BACKSPACE   (CONTROL-H)
       DATA EXTCHR(31) /1H	/, INTCHR(31) /9/
C                   TAB (CONTROL-I)
       DATA EXTCHR(32) /1H^/, INTCHR(32) /94/
C                   CARET (UP-ARROW)
       DATA EXTCHR(33) /1H~/, INTCHR(33) /126/
C                   TILDE
       END
