Upgrading to GPLv3
[supernova.git] / src / ROOMRITE.PAS
1 {//-------------------------------------------------------------------------}\r
2 {/*                                                                         }\r
3 {Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
4 {                                                                           }\r
5 {This file is part of Supernova.  Supernova is free software; you can       }\r
6 {redistribute it and/or modify it under the terms of the GNU General Public }\r
7 {License as published by the Free Software Foundation; either version 3     }\r
8 {of the License, or (at your option) any later version.                     }\r
9 {                                                                           }\r
10 {This program is distributed in the hope that it will be useful,            }\r
11 {but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
12 {MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
13 {                                                                           }\r
14 {See the GNU General Public License for more details.                       }\r
15 {                                                                           }\r
16 {You should have received a copy of the GNU General Public License          }\r
17 {along with this program; if not, write to the Free Software                }\r
18 {Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
19 {                                                                           }\r
20 {Original Source: 1990 Scott Miller                                         }\r
21 {Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
22 {*/                                                                         }\r
23 {//-------------------------------------------------------------------------}\r
24 {$c-}\r
25 const\r
26   Max = 234;\r
27 \r
28 type\r
29   MaxLength = string[Max];\r
30   OneChar   = string[1];\r
31 \r
32 var\r
33   R1, R2            : file of MaxLength;\r
34   Position,Counter,\r
35   Start,Stop,x      : integer;\r
36   Text1, Text2      : MaxLength;\r
37   Answer            : char;\r
38   Letter            : OneChar;\r
39   List              : boolean;\r
40 \r
41 procedure Diskwrite(text1,text2: MaxLength; pointer: integer);\r
42   begin\r
43     seek(R1,pointer); seek(R2,pointer);\r
44     WRITE(R1,text1); WRITE(R2,text2);\r
45     writeln('ROOM decription ',pointer,\r
46             ' is written!  Size = ',filesize(R1));\r
47     close(R1); close(R2);\r
48   end; {End of Diskwrite.}\r
49 \r
50 procedure Diskread(start,stop: integer);\r
51 var\r
52 counter : integer;\r
53 text1, text2 : MaxLength;\r
54   begin\r
55    assign(R1,'R1');assign(R2,'R2');\r
56    reset(R1); reset(R2);\r
57    seek(R1,start); seek(R2,start);\r
58     for counter:= start to stop do\r
59       begin\r
60         highvideo;\r
61         READ(R1,text1); READ(R2,text2);\r
62         if list then\r
63           begin\r
64             writeln(lst,'Discription # ',counter);\r
65             writeln(lst,text1,text2);\r
66           end\r
67         else\r
68           begin\r
69             writeln('Here is ROOM description # ',counter);\r
70             lowvideo;\r
71             writeln(text1,text2);\r
72             highvideo;\r
73           end;\r
74       end;\r
75     close(R1); close(R2);\r
76     write('The file contains ',filesize(R1),' ROOM descriptions.');\r
77   end;  {End of Diskread.}\r
78 \r
79 procedure Beep;\r
80 begin\r
81  if(length(text1)in[68,146,224])or(length(text2)in[68,146,224])then\r
82   begin sound(99);delay(50);nosound;end;\r
83 end;\r
84 \r
85 BEGIN\r
86 nosound;\r
87 window(2,1,79,25);\r
88 repeat          {Main loop.}\r
89   text1:='';\r
90   text2:='';\r
91 \r
92 writeln;\r
93 writeln('Do you want to R)ead, W)rite or Q)uit?');\r
94 read(kbd,answer);\r
95 if upcase(answer) = 'Q' then begin writeln('FINISHED');halt;end;\r
96 if upcase(answer) <> 'R' then       {Write to 'ROOMS'.}\r
97     begin\r
98       writeln;writeln;\r
99       assign(R1,'R1'); assign(R2,'R2');\r
100       textcolor(9);writeln('Now RESETing ROOM files.');highvideo;\r
101             RESET(R1); RESET(R2);\r
102       writeln;\r
103       writeln('Input a string not more than ',2*Max,' characters.',\r
104               '  ''\''-Ends string.');\r
105       x:=wherey;if(x>17)then x:=18;for stop:=1 to 7 do writeln;gotoxy(1,x);\r
106       lowvideo;\r
107         repeat\r
108           read(trm,letter);\r
109           if letter = ^h then\r
110             begin\r
111               if(wherex=1)then\r
112                begin window(2,1,80,25);gotoxy(79,wherey-1)end;\r
113               write(^h,' ',^h);\r
114               delete(text1,length(text1),2);\r
115               window(2,1,79,25);\r
116             end;\r
117           beep;\r
118           if (letter <> '\') and (letter <> ^h) then text1:=text1+letter\r
119         until (length(text1)=Max) or (letter='\');\r
120         if letter = '\' then\r
121           begin\r
122             writeln;\r
123             highvideo;\r
124             writeln('Total of ',length(text1),' characters.');\r
125             text2:='';\r
126           end\r
127         else\r
128           begin\r
129               repeat\r
130                 textcolor(11);\r
131                 read(trm,letter);\r
132                 if letter = ^h then\r
133                   begin\r
134                    if(wherex=1)then\r
135                     begin window(2,1,80,25);gotoxy(79,wherey-1)end;\r
136                    write(^h,' ',^h);\r
137                    delete(text2,length(text2),2);\r
138                    window(2,1,79,25);\r
139                   end;\r
140                 beep;\r
141                 if (letter <> '\') and (letter <> ^h) then text2:=text2+letter\r
142               until (length(text2)=Max) or (letter='\');\r
143             writeln; highvideo;\r
144             writeln('Total description length = ',\r
145                      length(text1)+length(text2),' characters.');\r
146           end;\r
147       writeln('Now WRITING string to disk.');\r
148       writeln('  At what position?  (Next open is # ',filesize(R1),')');\r
149       textcolor(12);position:=position+1;readln(position);highvideo;\r
150       Diskwrite(text1,text2,position);\r
151     end\r
152 else                      {Read from 'ROOMS'.}\r
153   begin\r
154     writeln;writeln;\r
155     writeln('To the S)creen or the P)rinter');\r
156     read(kbd,answer);\r
157     if(upcase(answer)='P')then List:=True else List:=False;\r
158     assign(R1,'R1');\r
159     reset(R1);\r
160     writeln('Filesize = ',filesize(R1),\r
161             '  (From 0 to ',filesize(R1)-1,')');\r
162     close(R1);\r
163     writeln('Enter starting position:');\r
164     textcolor(12);readln(start);highvideo;\r
165     if(start > filesize(R1)-5)then stop:=(filesize(R1)-1) else\r
166       begin\r
167         writeln('Enter final position:');\r
168         textcolor(12);readln(stop);highvideo;\r
169       end;\r
170     Diskread(start,stop);\r
171   end;  {End of else clause.}\r
172 until false;     {End of Main loop.}\r
173 END.\r
174 \r
175 \r
176 \1a\r