1000  COM Q[100,3],I$[72],S$[37],Q,T,F,F1
1001  REM  ****  hp basic program library  *******************************
1002  REM
1003  REM        turing:  turing machine simulator (tm*in, part 3 of 5)
1004  REM
1005  REM         36743 rev a -- 10/73
1006  REM
1007  REM  ****  contributed program  ************************************
1010  FILES TTAPE,TWORM,TQUIN
1020  IF F1#0 THEN 3620
1030  F1=1
1040  GOTO F OF 2000,3000
2000  REM.....
2010  REM.....TURING MACHINE
2020  REM.....
2030  REM.....INPUT A TAPE
2040  REM.....
2050  PRINT "1ST CHARACTER POSITION";
2060  INPUT C
2070  IF C<0 OR C>T OR C#INT(C) THEN 2050
2080  READ #1,1
2090  READ #2,1
2100  FOR I=1 TO C
2110  READ #1;T$
2120  PRINT #2;T$
2130  NEXT I
2140  PRINT "TMT";
2150  INPUT I$
2160  FOR I=1 TO LEN(I$)
2170  IF I$[I,I]="/" THEN 2310
2180  FOR J=1 TO 36
2190  IF I$[I,I]=S$[J,J] THEN 2230
2200  NEXT J
2210  PRINT '7'7'7"GOOF"
2220  GOTO 2310
2230  PRINT #2;I$[I,I]
2240  READ #1;T$
2250  C=C+1
2260  IF C <= T+1 THEN 2290
2270  PRINT "OUT OF STORAGE --- ";
2280  GOTO 2210
2290  NEXT I
2300  GOTO 2140
2310  FOR I=C+1 TO T+1
2320  READ #1;T$
2330  PRINT #2;T$
2340  NEXT I
2350  READ #1,1
2360  READ #2,1
2370  FOR I=0 TO T
2380  READ #2;T$
2390  PRINT #1;T$
2400  NEXT I
2410  GOTO 3620
3000  REM.....
3010  REM.....TURING MACHINE
3020  REM.....
3030  REM.....INPUT QUINTUPLES
3040  REM.....
3050  PRINT "TMQ";
3060  INPUT I$
3070  IF I$="/" THEN 3600
3080  J=1
3090  FOR I=1 TO LEN(I$)
3100  IF I$[I,I]=" " THEN 3130
3110  I$[J,J]=I$[I,I]
3120  J=J+1
3130  NEXT I
3140  I$=I$[1,J-1]
3150  IF LEN(I$)#3 AND LEN(I$)#7 THEN 3630
3160  T$=I$[1,1]
3170  GOSUB 3510
3180  Q1=C
3190  T$=I$[2,2]
3200  GOSUB 3510
3210  Q1=C+Q1*10
3220  T$=I$[3,3]
3230  GOSUB 3540
3240  S1=C
3250  FOR I=1 TO Q
3260  IF Q[I,3]<0 THEN 3290
3270  IF Q[I,1]#Q1*100+S1 THEN 3290
3280  Q[I,3]=-1
3290  NEXT I
3300  IF LEN(I$)=3 THEN 3050
3310  FOR I=1 TO Q
3320  IF Q[I,3]<0 THEN 3360
3330  NEXT I
3340  PRINT "OUT OF STORAGE --- ";
3350  GOTO 3630
3360  Q[I,1]=Q1*100+S1
3370  T$=I$[4,4]
3380  GOSUB 3510
3390  Q1=C
3400  T$=I$[5,5]
3410  GOSUB 3510
3420  Q1=C+Q1*10
3430  T$=I$[6,6]
3440  GOSUB 3540
3450  Q[I,2]=Q1*100+C
3460  T$=I$[7,7]
3470  GOSUB 3540
3480  IF C#12 AND C#21 AND C#27 THEN 3630
3490  Q[I,3]=C
3500  GOTO 3050
3510  GOSUB 3540
3520  IF C>9 THEN 3630
3530  RETURN 
3540  FOR C=1 TO 37
3550  IF S$[C,C]=T$ THEN 3580
3560  NEXT C
3570  GOTO 3630
3580  C=C-1
3590  RETURN 
3600  READ #3,1
3610  MAT  PRINT #3;Q
3620  READ #1,1
3621  READ #2,1
3622  READ #3,1
3625  CHAIN "TM"
3630  PRINT '7'7'7"GOOF"
3640  GOTO 3600
3650  END 
