Commit | Line | Data |
---|---|---|
8b22683c KB |
1 | #include "files.h" |
2 | ||
3 | #ifndef RTEXTFILE | |
4 | #define RTEXTFILE '/usr/games/lib/dunlib/rtext.dat' | |
5 | #endif | |
6 | ||
7 | #ifndef TEXTFILE | |
8 | #define TEXTFILE '/usr/games/lib/dunlib/dtext.dat' | |
9 | #endif | |
10 | ||
11 | C | |
12 | C manual speak routine | |
13 | C gets dungeon messages and prints them | |
14 | C (only used for pdp version) | |
15 | C | |
16 | program speak | |
17 | IMPLICIT INTEGER(A-Z) | |
18 | C | |
19 | COMMON /CHAN/ INPCH,OUTCH,DBCH | |
20 | #include "mindex.h" | |
21 | C | |
22 | C load the lookup table | |
23 | C | |
24 | OPEN(UNIT=9,file=RTEXTFILE, | |
25 | & status='OLD',IOSTAT=IO, | |
26 | & FORM='formatted',ACCESS='SEQUENTIAL',err=50) | |
27 | C | |
28 | call load | |
29 | C | |
30 | C open the message file | |
31 | C | |
32 | DBCH=2 | |
33 | C | |
34 | OPEN(UNIT=DBCH,file=TEXTFILE, | |
35 | & status='OLD',IOSTAT=IO, | |
36 | & FORM='UNFORMATTED',ACCESS='DIRECT',recl=76,err=60) | |
37 | C | |
38 | print 20 | |
39 | #ifdef NOCC | |
40 | 20 format('Sigh... '/) | |
41 | #else NOCC | |
42 | 20 format(' Sigh... '/) | |
43 | #endif NOCC | |
44 | C | |
45 | C get numbers and call speaking program | |
46 | C | |
47 | 10 continue | |
48 | C | |
49 | call inprd(mesage,i,j) | |
50 | call RSPSB2(mesage,i,j) | |
51 | goto 10 | |
52 | C | |
53 | C INITIALIZATION ERROR | |
54 | C | |
55 | 50 print 960 | |
56 | print 980 | |
57 | goto 99 | |
58 | 60 print 970 | |
59 | print 980 | |
60 | goto 99 | |
61 | #ifdef NOCC | |
62 | 960 FORMAT('I can''t open ',RTEXTFILE,'.') | |
63 | 970 FORMAT('I can''t open ',TEXTFILE,'.') | |
64 | 980 FORMAT('Suddenly a sinister, wraithlike figure appears before ' | |
65 | & 'you,'/'seeming to float in the air. In a low, sorrowful voice' | |
66 | & ' he says,'/'"Alas, the very nature of the world has changed, ' | |
67 | & 'and the dungeon'/'cannot be found. All must now pass away."' | |
68 | & ' Raising his oaken staff'/'in farewell, he fades into the ' | |
69 | & 'spreading darkness. In his place'/'appears a tastefully ' | |
70 | & 'lettered sign reading:'//23X,'INITIALIZATION FAILURE'// | |
71 | & 'The darkness becomes all encompassing, and your vision fails.') | |
72 | #else NOCC | |
73 | 960 FORMAT(' I can''t open ',RTEXTFILE,'.') | |
74 | 970 FORMAT(' I can''t open ',TEXTFILE,'.') | |
75 | 980 FORMAT(' Suddenly a sinister, wraithlike figure appears before ' | |
76 | & 'you,'/' seeming to float in the air. In a low, sorrowful voice' | |
77 | & ' he says,'/' "Alas, the very nature of the world has changed, ' | |
78 | & 'and the dungeon'/' cannot be found. All must now pass away."' | |
79 | & ' Raising his oaken staff'/' in farewell, he fades into the ' | |
80 | & 'spreading darkness. In his place'/' appears a tastefully ' | |
81 | & 'lettered sign reading:'//23X,'INITIALIZATION FAILURE'// | |
82 | & ' The darkness becomes all encompassing, and your vision fails.') | |
83 | #endif NOCC | |
84 | 99 stop | |
85 | end | |
86 | C | |
87 | C RSPSB2-- OUTPUT RANDOM MESSAGE WITH SUBSTITUTABLE ARGUMENTS | |
88 | C | |
89 | C CALLED BY-- | |
90 | C | |
91 | C CALL RSPSB2(MSGNUM,S1,S2) | |
92 | C | |
93 | SUBROUTINE RSPSB2(A,B,C) | |
94 | IMPLICIT INTEGER(A-Z) | |
95 | CHARACTER*74 B1,B2,B3 | |
96 | INTEGER*2 OLDREC,NEWREC,JREC | |
97 | C | |
98 | C DECLARATIONS | |
99 | C | |
100 | C | |
101 | COMMON /RMSG/ MLNT,RTEXT(1050) | |
102 | COMMON /CHAN/ INPCH,OUTCH,DBCH | |
103 | C | |
104 | C CONVERT ALL ARGUMENTS FROM DICTIONARY NUMBERS (IF POSITIVE) | |
105 | C TO ABSOLUTE RECORD NUMBERS. | |
106 | C | |
107 | X=A | |
108 | Y=B | |
109 | Z=C | |
110 | IF(X.GT.0) X=RTEXT(X) | |
111 | IF(Y.GT.0) Y=RTEXT(Y) | |
112 | IF(Z.GT.0) Z=RTEXT(Z) | |
113 | X=IABS(X) | |
114 | Y=IABS(Y) | |
115 | Z=IABS(Z) | |
116 | IF(X.EQ.0) RETURN | |
117 | C | |
118 | READ(UNIT=DBCH,REC=X) OLDREC,B1 | |
119 | C | |
120 | 100 DO 150 I=1,74 | |
121 | X1=and(X,31)+I | |
122 | B1(I:I)=char(xor(ichar(B1(I:I)),X1)) | |
123 | 150 CONTINUE | |
124 | C | |
125 | 200 IF(Y.EQ.0) GO TO 400 | |
126 | DO 300 I=1,74 | |
127 | IF(B1(I:I).EQ.'#') GO TO 1000 | |
128 | 300 CONTINUE | |
129 | C | |
130 | 400 DO 500 I=74,1,-1 | |
131 | IF(B1(I:I).NE.' ') GO TO 600 | |
132 | 500 CONTINUE | |
133 | C | |
134 | C 600 WRITE(OUTCH,650) (B1(J:J),J=1,I) | |
135 | 600 PRINT 650, (B1(J:J),J=1,I) | |
136 | #ifdef NOCC | |
137 | 650 FORMAT(74A1) | |
138 | #else NOCC | |
139 | 650 FORMAT(1X,74A1) | |
140 | #endif NOCC | |
141 | X=X+1 | |
142 | READ(UNIT=DBCH,REC=X) NEWREC,B1 | |
143 | IF(OLDREC.EQ.NEWREC) GO TO 100 | |
144 | RETURN | |
145 | C | |
146 | C SUBSTITUTION WITH SUBSTITUTABLE AVAILABLE. | |
147 | C I IS INDEX OF # IN B1. | |
148 | C Y IS NUMBER OF RECORD TO SUBSTITUTE. | |
149 | C | |
150 | C PROCEDURE: | |
151 | C 1) COPY REST OF B1 TO B2 | |
152 | C 2) READ SUBSTITUTABLE OVER B1 | |
153 | C 3) RESTORE TAIL OF ORIGINAL B1 | |
154 | C | |
155 | C THE IMPLICIT ASSUMPTION HERE IS THAT THE SUBSTITUTABLE STRING | |
156 | C IS VERY SHORT (i.e. MUCH LESS THAN ONE RECORD). | |
157 | C | |
158 | 1000 K2=1 | |
159 | DO 1100 K1=I+1,74 | |
160 | B2(K2:K2)=B1(K1:K1) | |
161 | K2=K2+1 | |
162 | 1100 CONTINUE | |
163 | C | |
164 | C READ SUBSTITUTE STRING INTO B3, AND DECRYPT IT: | |
165 | C | |
166 | READ(UNIT=DBCH,REC=Y) JREC,B3 | |
167 | DO 1150 K1=1,74 | |
168 | X1=and(Y,31)+K1 | |
169 | B3(K1:K1)=char(xor(ICHAR(B3(K1:K1)),X1)) | |
170 | 1150 CONTINUE | |
171 | C | |
172 | C FILL REMAINDER OF B1 WITH CHARACTERS FROM B3: | |
173 | C | |
174 | K2=1 | |
175 | DO 1180 K1=I,74 | |
176 | B1(K1:K1)=B3(K2:K2) | |
177 | K2=K2+1 | |
178 | 1180 CONTINUE | |
179 | C | |
180 | C FIND END OF SUBSTITUTE STRING IN B1: | |
181 | C | |
182 | DO 1200 J=74,1,-1 | |
183 | IF(B1(J:J).NE.' ') GO TO 1300 | |
184 | 1200 CONTINUE | |
185 | C | |
186 | C PUT TAIL END OF B1 (NOW IN B2) BACK INTO B1 AFTER SUBSTITUTE STRING: | |
187 | C | |
188 | 1300 K1=1 | |
189 | DO 1400 K2=J+1,74 | |
190 | B1(K2:K2)=B2(K1:K1) | |
191 | K1=K1+1 | |
192 | 1400 CONTINUE | |
193 | C | |
194 | Y=Z | |
195 | Z=0 | |
196 | GO TO 200 | |
197 | C | |
198 | END | |
199 | SUBROUTINE LOAD | |
200 | IMPLICIT INTEGER (A-Z) | |
201 | C | |
202 | C load rtext data | |
203 | C | |
204 | C | |
205 | C MESSAGE INDEX | |
206 | C | |
207 | COMMON /RMSG/ MLNT,RTEXT(1050) | |
208 | C | |
209 | C | |
210 | rewind 9 | |
211 | C | |
212 | C load the data | |
213 | C | |
214 | C | |
215 | READ(9,130) RTEXT | |
216 | 130 FORMAT(I8) | |
217 | close(9) | |
218 | C | |
219 | C | |
220 | return | |
221 | END |