Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0109/sqhelp.lst
There is 1 other file named sqhelp.lst in the archive. Click here to see a list.
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 1
DSK:SQHELP.SIM 1-MAR- 1976 19:00
1 COMMENT OPTIONS(/C/-Q/-A/-I/-D); OPTIONS(/L/E);
2 COMMENT sqhelp will list on SYSOUT the file given in helpfile.
3 If no dot ('.') in the string - ".HLP" will be assumed.
4 First sqhelp will try to find the file in the user's area.
5 If failed then in order at - HLP: DOC: and finally the SYS: areas.
6 sqhelp will return FALSE if all attempts failed.
7 ;
8 EXTERNAL TEXT PROCEDURE conc,rest,scanto,from,upcase;
9 EXTERNAL REF (infile) PROCEDURE findinfile;
10 EXTERNAL BOOLEAN PROCEDURE dotypeout;
11 EXTERNAL INTEGER PROCEDURE search;
12 BOOLEAN PROCEDURE sqhelp(helpfile,selector,height,width);
13 VALUE helpfile, selector; TEXT helpfile, selector;
14 INTEGER height, width;
B1 15 BEGIN
16 REF (infile) inf;
17 TEXT ARRAY line[1:height+1], strip_line[1:height+1];
18 INTEGER current_line, max_line, match_line, heightp1, first_line;
19 TEXT sysoutimage, lastline, upcased_line, stripinimage;
20 BOOLEAN matching, some_match, first, full;
21 CHARACTER lastchar, formfeed;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 2
DSK:SQHELP.SIM 1-MAR- 1976 19:00
22
23 PROCEDURE create_file;
B2 24 BEGIN
25 formfeed:= char(12);
26 helpfile:- helpfile.strip;
27 IF scanto(helpfile,'.') == helpfile THEN
28 helpfile:- conc(helpfile,".HLP");
29 inf:- findinfile(helpfile);
30 IF inf =/= NONE THEN GO TO list;
31 scanto(helpfile,':');
32 IF helpfile.more THEN helpfile:- rest(helpfile);
33 helpfile:- conc("HLP:",helpfile);
34 inf:- findinfile(helpfile);
35 IF inf =/= NONE THEN GO TO list;
36 helpfile.sub(1,3):= "DOC";
37 inf:- findinfile(helpfile);
38 IF inf =/= NONE THEN GO TO list;
39 helpfile.sub(1,3):= "SYS";
40 inf:- findinfile(helpfile);
41 IF inf =/= NONE THEN GO TO list;
42 outtext("?HLPCFF Cannot find file:"); helpfile.setpos(5);
43 outtext(rest(helpfile)); outimage;
44 list:
E2 45 END of procedure create_file;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 3
DSK:SQHELP.SIM 1-MAR- 1976 19:00
46
47 BOOLEAN PROCEDURE user_wants_more;
B3 48 BEGIN
49 IF first THEN
B4 50 BEGIN first:= FALSE;
51 GOTO out;
E4 52 END;
53 dotypeout(sysout); sysout.image:- sysoutimage;
54 outtext(" >>>>>>> Do you want more info");
55 IF selector =/= NOTEXT THEN
B5 56 BEGIN
57 outtext(" on """); outtext(selector); outchar('"');
E5 58 END;
59 outtext("?/yes/:"); breakoutimage;
60 inimage; lastchar:= ' ';
61 stripinimage:- sysin.image.strip;
62 IF stripinimage =/= NOTEXT THEN
B6 63 BEGIN
64 WHILE lastchar EQ ' ' DO lastchar:= inchar;
65 IF lastchar = 'n' THEN lastchar:= 'N'
66 ELSE IF lastchar = '?' THEN
B7 67 BEGIN
68 selector:- copy(sysin.image.sub(sysin.pos,
69 stripinimage.length-sysin.pos+1));
70 upcase(selector);
E7 71 END;
72 sysin.setpos(-1);
E6 73 END;
74 out: user_wants_more:= NOT lastchar = 'N';
E3 75 END of user_wants_more;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 4
DSK:SQHELP.SIM 1-MAR- 1976 19:00
76
77 PROCEDURE end_message;
B8 78 BEGIN
79 dotypeout(sysout); sysout.image:- sysoutimage;
80 IF lastchar = 'N' THEN outtext("[End of help") ELSE
B9 81 BEGIN
82 outtext("[No "); IF some_match OR matching THEN outtext("more ");
83 outtext("help");
E9 84 END;
85 IF selector =/= NOTEXT THEN
B10 86 BEGIN
87 outtext(" on """); outtext(selector); outchar('"');
E10 88 END;
89 outtext(".] "); breakoutimage;
E8 90 END of procedure end_message;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 5
DSK:SQHELP.SIM 1-MAR- 1976 19:00
91
92 outimage;
93 sysoutimage:- image;
94 sysoutimage:= NOTEXT;
95 IF selector == NOTEXT THEN
B11 96 BEGIN
97 outtext("If you want help on a specific subject,");
98 outimage;
99 outtext("then type ? followed by a word");
100 outimage;
101 outtext("characterizing that subject,"); outimage;
102 outtext("e.g. ?OUTPUT or ?");
103 outtext(helpfile); outchar('.');
104 outimage; outimage;
105 outtext("If you do not do this, you will get complete help");
106 outimage;
107 outtext("on everything available about """);
E11 108 END ELSE
B12 109 BEGIN
110 outtext("Searching for HELP on """);
111 outtext(selector); outtext(""" in """);
E12 112 END;
113 outtext(helpfile); outtext("""."); outimage; outimage;
114 IF selector == NOTEXT THEN
B13 115 BEGIN
116 IF NOT user_wants_more THEN GOTO quit;
E13 117 END;
118 first:= TRUE;
119 heightp1:= height+1;
120 create_file;
121 upcase(selector);
122 INSPECT inf DO
B14 123 BEGIN
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 6
DSK:SQHELP.SIM 1-MAR- 1976 19:00
124
125 PROCEDURE open_file;
B15 126 BEGIN
127 sqhelp:= TRUE;
128 open(sysout.image);
129 FOR current_line:= 1 STEP 1 UNTIL heightp1 DO
130 line[current_line]:- blanks(width);
131 lastline:- line[heightp1];
E15 132 END;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 7
DSK:SQHELP.SIM 1-MAR- 1976 19:00
133
134 PROCEDURE read_page;
B16 135 BEGIN
136 again:
137 matching:= selector == NOTEXT; max_line:= 0; match_line:= 1;
138 full:= FALSE;
139 IF endfile THEN GOTO out;
140 inline: max_line:= max_line+1; image:- line[max_line];
141 inimage;
142 image:- image.strip;
143 IF image = NOTEXT THEN lastchar:= ' ' ELSE
B17 144 BEGIN image.setpos(image.length); lastchar:= image.getchar;
E17 145 END;
146 IF lastchar = formfeed THEN
B18 147 BEGIN
148 image:- image.sub(1,image.length-1);
E18 149 END;
150 strip_line[max_line]:- image;
151 IF NOT matching THEN
B19 152 BEGIN
153 upcased_line:- lastline.sub(1,image.length);
154 upcased_line:=image; upcase(upcased_line);
155 upcased_line.setpos(1);
156 IF search(upcased_line,selector) < upcased_line.length THEN
B20 157 BEGIN
158 some_match:= matching:= TRUE;
159 match_line:= max_line;
E20 160 END;
E19 161 END;
162 IF max_line > height THEN max_line:= 0;
163 IF max_line >= height THEN full:= TRUE;
164 IF full AND matching THEN
B21 165 BEGIN IF mod(max_line-match_line+heightp1,
166 heightp1)*2 > height THEN GOTO found;
E21 167 END;
168 IF lastchar NE formfeed AND NOT endfile
169 THEN GOTO inline;
170 found:
171 IF endfile OR image = NOTEXT THEN max_line:= max_line-1;
172 if max_line < 0 then
173 max_line:= max_line+heightp1;
174 first_line:= max_line+2;
175 IF NOT matching THEN GOTO again;
176 IF NOT full AND max_line = 0 THEN GOTO again;
177 out:
E16 178 END of read_page;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 8
DSK:SQHELP.SIM 1-MAR- 1976 19:00
179
180 PROCEDURE print_page;
B22 181 BEGIN
182 IF full THEN
183 FOR current_line:= first_line STEP 1 UNTIL heightp1 DO
B23 184 BEGIN
185 sysout.image:- strip_line[current_line]; outimage;
E23 186 END;
187 FOR current_line:= 1 STEP 1 UNTIL max_line DO
B24 188 BEGIN
189 sysout.image:- strip_line[current_line]; outimage;
E24 190 END;
E22 191 END of print_page;
DECsystem-20 SIMULA %4A(310) 1-FEB- 1981 14:50 PAGE 9
DSK:SQHELP.SIM 1-MAR- 1976 19:00
192
193 open_file;
194 next_page: read_page;
195 IF max_line NE 0 OR full THEN
B25 196 BEGIN
197 IF user_wants_more THEN
B26 198 BEGIN print_page; GOTO next_page;
E26 199 END;
E25 200 END;
201 close; sysout.image:- sysoutimage;
E14 202 END inf;
203 quit: end_message;
E1 204 END of sqhelp;
SWITCHES CHANGED FROM DEFAULT:
E EXTERNAL CLASS/PROCEDURE
NO ERRORS DETECTED