mirror of
https://github.com/kennethreitz/elizagen.org.git
synced 2026-06-21 15:10:57 +00:00
0be80da745
- Fix identifiers longer than 6 characters discovered by the CTSS MAD compiler. - Fix OBJECT/OBJCT mismatch discovered by @anthay
418 lines
34 KiB
Plaintext
418 lines
34 KiB
Plaintext
|
|
|
|
|
|
CHANGE MAD
|
|
EXTERNAL FUNCTION (KEY,MYTRAN) 000010
|
|
NORMAL MODE IS INTEGER 000020
|
|
ENTRY TO CHANGE. 000030
|
|
LIST.(INPUT) 000040
|
|
V'S G(1)=$TYPE$,$SUBST$,$APPEND$,$ADD$, 000050
|
|
1$START$,$RANK$,$DISPLA$ 000060
|
|
V'S SNUMB = $ I3 *$ 000070
|
|
FIT=0 000080
|
|
CHANGE PRINT COMMENT $PLEASE INSTRUCT ME$ 001400
|
|
LISTRD.(MTLIST.(INPUT),0) 001410
|
|
JOB=POPTOP.(INPUT) 001420
|
|
T'H IDENT, FOR J=1,1, J.G. 7 001430
|
|
IDENT W'R G(J) .E. JOB, T'O THEMA 001440
|
|
PRINT COMMENT $CHANGE NOT RECOGNIZED$ 001450
|
|
T'O CHANGE 001460
|
|
THEMA W'R J .E. 5, F'N IRALST.(INPUT) 001470
|
|
W'R J .E. 7 001480
|
|
T'H DISPLA, FOR I=0,1, I .G. 32 001490
|
|
W'R LISTMT.(KEY(I)) .E. 0, T'O DISPLA 001500
|
|
S=SEQRDR.(KEY(I)) 001510
|
|
READ(7) NEXT=SEQLR.(S,F) 001520
|
|
W'R F .G. 0, T'O DISPLA 001530
|
|
PRINT COMMENT $*$ 001540
|
|
TPRINT.(NEXT,0) 001550
|
|
PRINT FORMAT SNUMB,I 001560
|
|
PRINT COMMENT $ $ 001570
|
|
T'O READ(7) 001580
|
|
DISPLA CONTINUE 001590
|
|
PRINT COMMENT $ $ 001600
|
|
PRINT COMMENT $MEMORY LIST FOLLOWS$ 001610
|
|
PRINT COMMENT $ $ 001620
|
|
T'H MEMLST, FOR I=1 , 1, I .G. 4 001630
|
|
MEMLST TXTPRT.(MYTRAN(I),0) 001640
|
|
T'O CHANGE 001650
|
|
E'L 001660
|
|
THEME=POPTOP.(INPUT) 001670
|
|
SUBJCT=KEY(HASH.(THEME,5)) 001680
|
|
S=SEQRDR.(SUBJCT) 001690
|
|
LOOK TERM=SEQLR.(S,F) 001700
|
|
W'R F .G. 0, T'O FAIL 001710
|
|
W'R TOP.(TERM) .E. THEME, T'O FOUND 001720
|
|
T'O LOOK 001730
|
|
FOUND T'O DELTA(J) 001740
|
|
DELTA(1) TPRINT.(TERM,0) 001750
|
|
T'O CHANGE 001760
|
|
FAIL PRINT COMMENT $LIST NOT FOUND$ 001770
|
|
T'O CHANGE 001780
|
|
DELTA(2) S=SEQRDR.(TERM) 001790
|
|
OLD=POPTOP.(INPUT) 001800
|
|
READ(1) OBJCT=SEQLR.(S,F) 001810
|
|
W'R F .G. 0, T'O FAIL 001820
|
|
W'R F .NE. 0, T'O READ(1) 001830
|
|
INSIDE=SEQRDR.(OBJCT) 001840
|
|
READ(2) IT=SEQLR.(INSIDE,F) 001850
|
|
W'R F .G. 0, T'O READ(1) 001860
|
|
SIT=SEQRDR.(IT) 001870
|
|
SOLD=SEQRDR.(OLD) 001880
|
|
ITOLD TOLD=SEQLR.(SOLD,FOLD) 001890
|
|
DIT=SEQLR.(SIT,FIT) 001900
|
|
W'R TOLD .E. DIT .AND. FOLD .LE. 0,T'O ITOLD 001910
|
|
W'R FOLD .G. 0, T'O OK(J) 001920
|
|
T'O READ(2) 001930
|
|
OK(2) SUBST.(POPTOP.(INPUT),LSPNTR.(INSIDE)) 001940
|
|
T'O CHANGE 001950
|
|
OK(3) NEWBOT.(POPTOP.(INPUT),OBJCT) 001960
|
|
T'O CHANGE 001970
|
|
DELTA(3) T'O DELTA(2) 001980
|
|
DELTA(4) W'R NAMTST.(BOT.(TERM)) .E. 0 001990
|
|
BOTTOM=POPBOT.(TERM) 002000
|
|
NEWBOT.(POPTOP.(INPUT),TERM) 002010
|
|
NEWBOT.(BOTTOM,TERM) 002020
|
|
O'E 002030
|
|
NEWBOT.(POPTOP.(INPUT),TERM) 002040
|
|
E'L 002050
|
|
T'O CHANGE 002060
|
|
DELTA(6) S=SEQRDR.(TERM) 002070
|
|
READ(6) OBJCT=SEQLR.(S,F) 002080
|
|
W'R F .G. 0, T'O FAIL 002090
|
|
W'R F .NE. 0, T'O READ(6) 002100
|
|
OBJCT=SEQLL.(S,F) 002110
|
|
W'R LNKL.(OBJCT) .E. 0 002120
|
|
SUBST.(POPTOP.(INPUT),LSPNTR.(S)) 002130
|
|
O'E 002140
|
|
NEWTOP.(POPTOP.(INPUT),LSPNTR.(S)) 002150
|
|
E'L 002160
|
|
T'O CHANGE 002170
|
|
R* * * * * * * * * * END OF MODIFICATION ROUTINE 002180
|
|
E'N 002200
|
|
TPRINT MAD
|
|
EXTERNAL FUNCTION (LST) 000010
|
|
NORMAL MODE IS INTEGER 000020
|
|
ENTRY TO TPRINT. 000030
|
|
SA=SEQRDR.(LST) 000040
|
|
LIST.(OUT) 000050
|
|
READ NEXT=SEQLR.(SA,FA) 000060
|
|
W'R FA .G. 0, T'O P 000070
|
|
W'R FA .E. 0, T'O B 000080
|
|
POINT=NEWBOT.(NEXT,OUT) 000100
|
|
W'R SA .L. 0, MRKNEG.(POINT) 000110
|
|
T'O READ 000120
|
|
B TXTPRT.(OUT,0) 000130
|
|
SEQLL.(SA,FA) 000140
|
|
MORE NEXT=SEQLR.(SA,FA) 000150
|
|
W'R TOP.(NEXT) .E. $=$ 000160
|
|
TXTPRT.(NEXT,0) 000170
|
|
T'O MORE 000180
|
|
E'L 000190
|
|
W'R FA .G. 0, T'O DONE 000200
|
|
PRINT COMMENT $ $ 000210
|
|
SB=SEQRDR.(NEXT) 000220
|
|
MEHR TERM=SEQLR.(SB,FB) 000230
|
|
W'R FB .L.0 000240
|
|
PRINT ON LINE FORMAT NUMBER, TERM 000250
|
|
V'S NUMBER = $I3 *$ 000260
|
|
T'O MEHR 000270
|
|
E'L 000280
|
|
W'R FB .G. 0, T'O MORE 000290
|
|
TXTPRT.(TERM,0) 000300
|
|
T'O MEHR 000310
|
|
P TXTPRT.(OUT,0) 000320
|
|
DONE IRALST.(OUT) 000330
|
|
F'N 000340
|
|
E'N 000350
|
|
LPRINT MAD
|
|
EXTERNAL FUNCTION (LST,TAPE) 006340
|
|
NORMAL MODE IS INTEGER 006350
|
|
ENTRY TO LPRINT. 006360
|
|
BLANK = $ $ 006370
|
|
EXECUTE PLACE.(TAPE,0) 006380
|
|
LEFTP = 606074606060K 006390
|
|
RIGHTP= 606034606060K 006400
|
|
BOTH = 607460603460K 006410
|
|
EXECUTE NEWTOP.(SEQRDR.(LST),LIST.(STACK)) 006420
|
|
S=POPTOP.(STACK) 006430
|
|
BEGIN EXECUTE PLACE.(LEFTP,1) 006440
|
|
NEXT WORD=SEQLR.(S,FLAG) 006450
|
|
W'R FLAG .L. 0 006460
|
|
EXECUTE PLACE.(WORD,1) 006470
|
|
W'R S .G. 0, PLACE.(BLANK,1) 006480
|
|
T'O NEXT 006490
|
|
OR W'R FLAG .G. 0 006500
|
|
EXECUTE PLACE.(RIGHTP,1) 006510
|
|
W'R LISTMT.(STACK) .E. 0, T'O DONE 006520
|
|
S=POPTOP.(STACK) 006530
|
|
T'O NEXT 006540
|
|
OTHERWISE 006550
|
|
W'R LISTMT.(WORD) .E. 0 006560
|
|
EXECUTE PLACE.(BOTH,1) 006570
|
|
T'O NEXT 006580
|
|
OTHERWISE 006590
|
|
EXECUTE NEWTOP.(S,STACK) 006600
|
|
S=SEQRDR.(WORD) 006610
|
|
T'O BEGIN 006620
|
|
E'L 006630
|
|
E'L 006640
|
|
DONE EXECUTE PLACE.(0,-1) 006650
|
|
EXECUTE IRALST.(STACK) 006660
|
|
FUNCTION RETURN LST 006670
|
|
END OF FUNCTION 006680
|
|
TESTS MAD
|
|
EXTERNAL FUNCTION(CAND,S) 000010
|
|
NORMAL MODE IS INTEGER 000020
|
|
DIMENSION FIRST(5),SECOND(5) 000030
|
|
ENTRY TO TESTS. 000040
|
|
STORE=S 000050
|
|
READER=SEQRDR.(CAND) 000060
|
|
T'H ONE, FOR I=0,1, I .G. 100 000070
|
|
FIRST(I)=SEQLR.(READER,FR) 000080
|
|
ONE W'R READER .G. 0, T'O ENDONE 000090
|
|
ENDONE SEQLL.(S,F) 000100
|
|
T'H TWO, FOR J=0,1, J .G. 100 000110
|
|
SECOND(J)=SEQLR.(S,F) 000120
|
|
TWO W'R S .G. 0, T'O ENDTWO 000130
|
|
ENDTWO W'R I .NE. J, F'N 0 000140
|
|
T'H LOOK, FOR K=0,1, K.G. J 000150
|
|
LOOK W'R FIRST(K) .NE. SECOND(K), F'N 0 000170
|
|
EQL=SEQLR.(READER,FR) 000180
|
|
W'R EQL .NE. $=$ 000190
|
|
SEQLL.(READER,FR) 000200
|
|
F'N READER 000210
|
|
O'E 000220
|
|
POINT=LNKL.(STORE) 000230
|
|
T'H DELETE , FOR K=0,1, K .G. J 000240
|
|
REMOVE.(LSPNTR.(STORE)) 000250
|
|
DELETE SEQLR.(STORE,F) 000260
|
|
INSRT NEW=SEQLR.(READER,FR) 000270
|
|
POINT=NEWTOP.(NEW,POINT) 000280
|
|
MRKNEG.(POINT) 000290
|
|
W'R READER .L. 0, T'O INSRT 000300
|
|
MRKPOS.(POINT) 000310
|
|
F'N READER 000320
|
|
E'L 000330
|
|
E'N 000340
|
|
DOCBCD MAD
|
|
EXTERNAL FUNCTION (A,B) 000010
|
|
NORMAL MODE IS INTEGER 000020
|
|
ENTRY TO FRBCD. 000030
|
|
W'R LNKL.(A) .E. 0, T'O NUMBER 000040
|
|
B=A 000050
|
|
F'N 0 000060
|
|
NUMBER K=A*262144 000070
|
|
B=BCDIT.(K) 000080
|
|
F'N 0 000090
|
|
E'N 000100
|
|
ELIZA MAD
|
|
NORMAL MODE IS INTEGER 000010
|
|
DIMENSION KEY(32),MYTRAN(4) 000020
|
|
INITAS.(0) 000030
|
|
PRINT COMMENT $WHICH SCRIPT DO YOU WISH TO PLAY$ 000060
|
|
READ FORMAT SNUMB,SCRIPT 000070
|
|
LIST.(TEST) 000080
|
|
LIST.(INPUT) 000090
|
|
LIST.(OUTPUT) 000100
|
|
LIST.(JUNK) 000110
|
|
LIMIT=1 000120
|
|
LSSCPY.(TREAD.(INPUT,SCRIPT),JUNK) 000130
|
|
MTLIST.(INPUT) 000140
|
|
T'H MLST, FOR I=1,1, I .G. 4 000150
|
|
MLST LIST.(MYTRAN(I)) 000160
|
|
MINE=0 000170
|
|
LIST.(MYLIST) 000180
|
|
T'H KEYLST, FOR I=0,1, I .G. 32 000220
|
|
KEYLST LIST.(KEY(I)) 000230
|
|
R* * * * * * * * * * READ NEW SCRIPT 000240
|
|
BEGIN MTLIST.(INPUT) 000250
|
|
NODLST.(INPUT) 000260
|
|
LISTRD.(INPUT,SCRIPT) 000270
|
|
W'R LISTMT.(INPUT) .E. 0 000280
|
|
TXTPRT.(JUNK,0) 000290
|
|
MTLIST.(JUNK) 000300
|
|
T'O START 000310
|
|
E'L 000320
|
|
W'R TOP.(INPUT) .E. $NONE$ 000330
|
|
NEWTOP.(LSSCPY.(INPUT,LIST.(9)),KEY(32)) 000340
|
|
T'O BEGIN 000350
|
|
OR W'R TOP.(INPUT) .E. $MEMORY$ 000360
|
|
POPTOP.(INPUT) 000370
|
|
MEMORY=POPTOP.(INPUT) 000380
|
|
T'H MEM, FOR I=1,1, I .G. 4 000390
|
|
MEM LSSCPY.(POPTOP.(INPUT),MYTRAN(I)) 000400
|
|
T'O BEGIN 000410
|
|
O'E 000420
|
|
NEWBOT.(LSSCPY.(INPUT,LIST.(9)),KEY(HASH. 000430
|
|
1 (TOP.(INPUT),5))) 000440
|
|
T'O BEGIN 000450
|
|
E'L 000460
|
|
R* * * * * * * * * * BEGIN MAJOR LOOP 000470
|
|
START TREAD.(MTLIST.(INPUT),0) 000480
|
|
KEYWRD=0 000490
|
|
PREDNC=0 000500
|
|
LIMIT=LIMIT+1 000510
|
|
W'R LIMIT .E. 5, LIMIT=1 000520
|
|
W'R LISTMT.(INPUT) .E. 0, T'O ENDPLA 000530
|
|
IT=0 000540
|
|
W'R TOP.(INPUT) .E. $+$ 000550
|
|
CHANGE.(KEY,MYTRAN) 000560
|
|
T'O START 000570
|
|
E'L 000580
|
|
W'R TOP.(INPUT) .E. $*$, T'O NEWLST 000590
|
|
S=SEQRDR.(INPUT) 000600
|
|
NOTYET W'R S .L. 0 000610
|
|
SEQLR.(S,F) 000620
|
|
T'O NOTYET 000630
|
|
O'E 000640
|
|
WORD=SEQLR.(S,F) 000650
|
|
W'R WORD .E. $.$ .OR. WORD .E. $,$ .OR. WORD .E. $BUT$ 000660
|
|
W'R IT .E. 0 000670
|
|
NULSTL.(INPUT,LSPNTR.(S),JUNK) 000680
|
|
MTLIST.(JUNK) 000690
|
|
T'O NOTYET 000700
|
|
O'E 000710
|
|
NULSTR.(INPUT,LSPNTR.(S),JUNK) 000720
|
|
MTLIST.(JUNK) 000730
|
|
T'O ENDTXT 000740
|
|
E'L 000750
|
|
E'L 000760
|
|
E'L 000770
|
|
W'R F .G. 0, T'O ENDTXT 000780
|
|
I=HASH.(WORD,5) 000790
|
|
SCANER=SEQRDR.(KEY(I)) 000800
|
|
SF=0 000810
|
|
T'H SEARCH, FOR J=0,0, SF .G. 0 000820
|
|
CAND= SEQLR.(SCANER,SF) 000830
|
|
W'R SF .G. 0, T'O NOTYET 000840
|
|
SEARCH W'R TOP.(CAND) .E. WORD, T'O KEYFND 000850
|
|
KEYFND READER=TESTS.(CAND,S) 000860
|
|
W'R READER .E. 0, T'O NOTYET 000870
|
|
W'R LSTNAM.(CAND) .NE. 0 000880
|
|
DL=LSTNAM.(CAND) 000890
|
|
SEQ W'R S .L. 0 000900
|
|
SEQLR.(S,F) 000910
|
|
T'O SEQ 000920
|
|
O'E 000930
|
|
NEWTOP.(DL,LSPNTR.(S)) 000940
|
|
E'L 000950
|
|
O'E 000960
|
|
E'L 000970
|
|
NEXT=SEQLR.(READER,FR) 000980
|
|
W'R FR .G. 0, T'O NOTYET 000990
|
|
W'R IT .E. 0 .AND. FR .E. 0 001000
|
|
PLCKEY IT=READER 001010
|
|
KEYWRD=WORD 001020
|
|
OR W'R FR .L. 0 .AND. NEXT .G. PREDNC 001030
|
|
PREDNC=NEXT 001040
|
|
NEXT=SEQLR.(READER,FR) 001050
|
|
T'O PLCKEY 001060
|
|
O'E 001070
|
|
T'O NOTYET 001080
|
|
E'L 001090
|
|
T'O NOTYET 001100
|
|
R* * * * * * * * * * END OF MAJOR LOOP 001110
|
|
ENDTXT W'R IT .E. 0 001120
|
|
W'R LIMIT .E. 4 .AND. LISTMT.(MYLIST) .NE. 0 001130
|
|
OUT=POPTOP.(MYLIST) 001140
|
|
TXTPRT.(OUT,0) 001150
|
|
IRALST.(OUT) 001160
|
|
T'O START 001170
|
|
O'E 001180
|
|
ES=BOT.(TOP.(KEY(32))) 001190
|
|
T'O TRY 001200
|
|
E'L 001210
|
|
OR W'R KEYWRD .E. MEMORY 001220
|
|
I=HASH.(BOT.(INPUT),2)+1 001230
|
|
NEWBOT.(REGEL.(MYTRAN(I),INPUT,LIST.(MINE)),MYLIST) 001240
|
|
SEQLL.(IT,FR) 001250
|
|
T'O MATCH 001260
|
|
O'E 001270
|
|
SEQLL.(IT,FR) 001280
|
|
R* * * * * * * * * * MATCHING ROUTINE 001290
|
|
MATCH ES=SEQLR.(IT,FR) 001300
|
|
W'R TOP.(ES) .E. $=$ 001310
|
|
S=SEQRDR.(ES) 001320
|
|
SEQLR.(S,F) 001330
|
|
WORD=SEQLR.(S,F) 001340
|
|
I=HASH.(WORD,5) 001350
|
|
SCANER=SEQRDR.(KEY(I)) 001360
|
|
SCAN ITS=SEQLR.(SCANER,F) 001370
|
|
W'R F .G. 0, T'O NOMACH(LIMIT) 001380
|
|
W'R WORD .E. TOP.(ITS) 001390
|
|
S=SEQRDR.(ITS) 001400
|
|
SCANI ES=SEQLR.(S,F) 001410
|
|
W'R F .NE.0, T'O SCANI 001420
|
|
IT=S 001430
|
|
T'O TRY 001440
|
|
O'E 001450
|
|
T'O SCAN 001460
|
|
E'L 001470
|
|
E'L 001480
|
|
W'R FR .G. 0, T'O NOMACH(LIMIT) 001490
|
|
TRY W'R YMATCH.(TOP.(ES),INPUT,MTLIST.(TEST)) .E. 0,T'O MATCH 001500
|
|
ESRDR=SEQRDR.(ES) 001510
|
|
SEQLR.(ESRDR,ESF) 001520
|
|
POINT=SEQLR.(ESRDR,ESF) 001530
|
|
POINTR=LSPNTR.(ESRDR) 001540
|
|
W'R ESF .E. 0 001550
|
|
NEWBOT.(1,POINTR) 001560
|
|
TRANS=POINT 001570
|
|
T'O HIT 001580
|
|
O'E 001590
|
|
T'H FNDHIT,FOR I=0,1, I .G. POINT 001600
|
|
FNDHIT TRANS=SEQLR.(ESRDR,ESF) 001610
|
|
W'R ESF .G. 0 001620
|
|
SEQLR.(ESRDR,ESF) 001630
|
|
SEQLR.(ESRDR,ESF) 001640
|
|
TRANS=SEQLR.(ESRDR,ESF) 001650
|
|
SUBST.(1,POINTR) 001660
|
|
T'O HIT 001670
|
|
O'E 001680
|
|
SUBST.(POINT+1,POINTR) 001690
|
|
T'O HIT 001700
|
|
E'L 001710
|
|
E'L 001720
|
|
HIT TXTPRT.(ASSMBL.(TRANS,TEST,MTLIST.(OUTPUT)),0) 001730
|
|
T'O START 001740
|
|
E'L 001750
|
|
R* * * * * * * * * * INSERT NEW KEYWORD LIST 001760
|
|
NEWLST POPTOP.(INPUT) 001770
|
|
NEWBOT.(LSSCPY.(INPUT,LIST.(9)),KEY(HASH. 001780
|
|
1(TOP.(INPUT),5))) 001790
|
|
T'O START 001800
|
|
R* * * * * * * * * * DUMP REVISED SCRIPT 001810
|
|
ENDPLA PRINT COMMENT $WHAT IS TO BE THE NUMBER OF THE NEW SCRIPT$ 001820
|
|
READ FORMAT SNUMB,SCRIPT 001830
|
|
LPRINT.(INPUT,SCRIPT) 001840
|
|
NEWTOP.(MEMORY,MTLIST.(OUTPUT)) 001850
|
|
NEWTOP.($MEMORY$,OUTPUT) 001860
|
|
T'H DUMP, FOR I=1,1, I .G. 4 001870
|
|
DUMP NEWBOT.(MYTRAN(I),OUTPUT) 001880
|
|
LPRINT.(OUTPUT,SCRIPT) 001890
|
|
MTLIST.(OUTPUT) 001900
|
|
T'H WRITE, FOR I=0,1, I .G. 32 001910
|
|
POPMOR W'R LISTMT.(KEY(I)) .E. 0, T'O WRITE 001920
|
|
LPRINT.(POPTOP.(KEY(I)),SCRIPT) 001930
|
|
T'O POPMOR 001940
|
|
WRITE CONTINUE 001950
|
|
LPRINT.(MTLIST.(INPUT),SCRIPT) 001960
|
|
EXIT. 001970
|
|
R* * * * * * * * * * SCRIPT ERROR EXIT 001980
|
|
NOMACH(1) PRINT COMMENT $PLEASE CONTINUE $ 002200
|
|
T'O START 002210
|
|
NOMACH(2) PRINT COMMENT $HMMM $ 002220
|
|
T'O START 002230
|
|
NOMACH(3) PRINT COMMENT $GO ON , PLEASE $ 002240
|
|
T'O START 002250
|
|
NOMACH(4) PRINT COMMENT $I SEE $ 002260
|
|
T'O START 002270
|
|
VECTOR VALUES SNUMB= $I3 * $ 002280
|
|
E'M 002290
|
|
|
|
|
|
|
|
|
|
|