|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 26880 (0x6900)
Types: TextFile
Names: »ltclist «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦f546e193b⟧
└─⟦this⟧ »ltclist «
ltctxt d.870112.0928
1 begin
2 <********************************************************************>
3 <* Utility LISTTASCAT til udskrift af tas katalog indgange. *>
4 <* *>
5 <* Kald: <out-file> = listtascat <out-spec.> *>
6 <* *>
7 <* user.<name> *>
8 <* terminal.<name> *>
9 <* <out-spec.> ::= type.<number> *>
10 <* size *>
11 <* all *>
12 <* *>
13 <* Compiler call: listtascat=algol ltctxt connect.no *>
14 <********************************************************************>
15
15 <**************************************************************>
16 <* Revision history *>
17 <* *>
18 <* 87.02.01 listtascat release 1.0 *>
19 <**************************************************************>
20
20
20 <* Globale variable *>
21
21 zone buf(128,1,std_error); <* Zone til message m.m. *>
22 integer array user_id(1:4); <* Bruger id fra terminal *>
23 long password; <* Password fra terminal *>
24 boolean file_out; <* True= connect to file *>
25 boolean no_found; <* Entry ikke fundet *>
26 integer array out_stack(1:4); <* out zone stack *>
27 integer array prog_name(1:4); <* Program navn *>
28 integer array conv(0:255); <* Tegn konverterings tabel *>
29 integer param; <* fp parameter tæller *>
30 integer user_size; <* Antal seg i user cat *>
31 integer term_size; <* Antal seg i term cat *>
32 integer type_size; <* Antal seg i type cat *>
33 integer user_hw; <* Antal hw i user entry *>
34 integer term_hw; <* Antal hw i term entry *>
35 integer type_hw; <* Antal hw i type entry *>
36
36 integer array field iaf; <* Work *>
37 real array field raf; <* Work *>
38 boolean array field baf; <* Work *>
39 long array field laf; <* Work *>
40 integer i; <* Work *>
41
41 <* Globale procedure *>
42
42 procedure get_userid;
43 <*-------------------------------------------------------------------*>
44 <* Set user id og password i de globale variable user_id og password *>
45 <* Id og password hentes fra terminalen tilknyttet prim. output *>
46 <*-------------------------------------------------------------------*>
47 begin
48 long array term_name(1:2);
49 integer i;
50 integer array ia(1:20);
51
51 system(7,0,term_name);
52 open(buf,0,term_name,0);
53 close(buf,false);
54 getzone6(buf,ia);
55 i:=ia(19);
56 getshare6(buf,ia,1);
57 ia(4):=131 shift 12;
58 ia(5):=i+1;
59 ia(6):=i+11;
60 ia(7):=0;
61 setshare6(buf,ia,1);
62 if monitor(16,buf,1,ia)=0 then
63 error(2);
64 if monitor(18,buf,1,ia)<>1 then
65 error(5);
66 if ia(1)<>0 then
67 error(5);
68 for i:=1,2,3,4 do
69 user_id(i):=buf.iaf(i);
70 password:=buf.laf(3);
71 end;
72
72 procedure error(err_nr);
73 <*-----------------------------------------------*>
74 <* Udskriv fejlmeddelelse på cur. output og stop *>
75 <*-----------------------------------------------*>
76 integer err_nr;
77 begin
78 close_output;
79 write(out,<:***:>,prog_name.laf,<: :>);
80 if err_nr<1 or err_nr>7 then
81 write(out,<:internal :>,err_nr)
82 else
83 write(out,case err_nr of (
84 <:connect output:>,<:claims:>,
85 <:no system:>,<:no privilege:>,
86 <:not allowed:>,<:parameter:>,
87 <:not found:>));
88 write(out,<:<10>:>);
89 goto stop;
90 end;
91
91
91 procedure set_output;
92 <*-----------------------------------------------*>
93 <* Set output zonen til enten cur. out eller fil *>
94 <*-----------------------------------------------*>
95 begin
96 integer seperator,result;
97 real array file_name(1:2);
98
98 seperator:=system(4,1,prog_name.raf);
99 if seperator shift (-12) = 6 then
100 begin
101 system(4,0,file_name);
102 fp_proc(29)stack_zone:(0,out,out_stack);
103 result:=2;
104 fp_proc(28)connect_output:(result,out,file_name);
105 if result=0 then
106 file_out:=true
107 else
108 error(1);
109 end
110 else
111 begin
112 system(4,0,prog_name.raf);
113 file_out:=false;
114 end;
115 end;
116
116 procedure close_output;
117 <*----------------------------------*>
118 <* Luk output zonen og unstack evt. *>
119 <*----------------------------------*>
120 begin
121 integer array ia(1:20);
122 integer size;
123
123 if file_out then
124 begin
125 fp_proc(34)close_up:(0,out,'em');
126 fp_proc(79)terminate_zone:(0,out,0);
127 getzone6(out,ia);
128 size:=ia(9);
129 monitor(42,out,0,ia);
130 ia(1):=size;
131 ia(6):=systime(7,0,0.0);
132 monitor(44,out,0,ia);
133 fp_proc(30)unstack_zone:(0,out,out_stack);
134 end;
135 end;
136
136 procedure set_buf_zone;
137 <*-------------------------------------------*>
138 <* Sæt zonen buf klar til message til tas *>
139 <*-------------------------------------------*>
140 begin
141 open(buf,0,<:tas:>,0);
142 close(buf,false);
143 end;
144
144 procedure send_modify_mess(size,mode,func,result);
145 <*--------------------------------------------------------------*>
146 <* Send modify message til tas. Repeter hvis process stoppes *>
147 <* Message sendes via zonen buf *>
148 <* *>
149 <* size (call) : Antal hw der skal sendes/modtages i buf *>
150 <* mode (call) : 1=user, 2=terminal, 3=type *>
151 <* func (call) : 0=get, 1=modify, 2=set new, 3=delete *>
152 <* result (ret) : Resultat fra message, 0=OK *>
153 <*--------------------------------------------------------------*>
154 integer size,mode,func,result;
155 begin
156 integer array share(1:12),zone_ia(1:20);
157 boolean send;
158 integer i;
159
159 send:=false;
160 while not send do
161 begin
162 getshare6(buf,share,1);
163 getzone6(buf,zone_ia);
164 share(1):=0;
165 share(4):=(11 shift 12)+mode;
166 share(5):=zone_ia(19)+1;
167 share(6):=share(5)+size-2;
168 share(7):=func;
169 setshare6(buf,share,1);
170 for i:=1 step 1 until 4 do
171 buf.iaf(i):=user_id(i);
172 buf.iaf(5):=password shift (-24);
173 buf.iaf(6):=password extract 24;
174 if monitor(16,buf,1,share)=0 then
175 error(2);
176 if monitor(18,buf,1,share)<>1 then
177 error(3);
178 result:=share(1);
179 if result<>8 then
180 send:=true;
181 end;
182 end;
183
183 procedure get_cat_seg(cat_type,seg_nr,status,segments);
184 <*--------------------------------------------------------------*>
185 <* Send get catalog segment message til tas *>
186 <* Message sendes via zonen buf *>
187 <* Læst segment står i buf. *>
188 <* *>
189 <* cat_type (call) : 1=user, 2=terminal, 3=type *>
190 <* seg_nr (call) : Det segment der skal læses *>
191 <* status (ret) : Status bit ved retur (ingen sat = OK) *>
192 <* segments (ret) : Antal segmenter i angivet katalog *>
193 <*--------------------------------------------------------------*>
194 integer cat_type,seg_nr,status,segments;
195 begin
196 integer array share(1:12),zone_ia(1:20);
197 boolean send;
198 integer i;
199
199 send:=false;
200 while not send do
201 begin
202 getshare6(buf,share,1);
203 getzone6(buf,zone_ia);
204 share(1):=0;
205 share(4):=(3 shift 12);
206 share(5):=zone_ia(19)+1;
207 share(6):=share(5)+510;
208 share(7):=seg_nr;
209 share(8):=cat_type;
210 setshare6(buf,share,1);
211 for i:=1 step 1 until 4 do
212 buf.iaf(i):=user_id(i);
213 buf.iaf(5):=password shift (-24);
214 buf.iaf(6):=password extract 24;
215 if monitor(16,buf,1,share)=0 then
216 error(2);
217 if monitor(18,buf,1,share)<>1 then
218 error(3);
219 status:=share(1);
220 segments:=share(4);
221 if not (false add (status shift (-23))) then
222 send:=true;
223 end;
224 end;
225
225 procedure write_field_name(key);
226 <*--------------------------------------*>
227 <* Udskriv navnet på feltet på ny linie *>
228 <*--------------------------------------*>
229 integer key;
230 begin
231 write(out,<:<10>:>);
232 write(out,true,12,case key of (
233 <:user:>,<:password:>,<:cpassword:>,<:monday:>,<:tuesday:>,
234 <:wednesday:>,<:thursday:>,<:friday:>,<:saturday:>,<:sunday:>,
235 <:sessions:>,<:privilege:>,<:mclname:>,<:base:>,<:groups:>,
236 <:mcltext:>,<:block:>,<:terminal:>,<:termtype:>,<:termgroup:>,
237 <:block:>,<:type:>,<:screentype:>,<:column:>,<:lines:>,
238 <:bypass:>,<:sbup:>,<:sbdown:>,<:sbleft:>,<:sbright:>,
239 <:sbhome:>,<:sbdelete:>,<:ceod:>,<:ceol:>,
240 <:home:>,<:left:>,<:right:>,<:up:>,<:down:>,<:xxxx:>,
241 <:xxxxx:>,<:invon:>,<:invoff:>,<:hlon:>,<:hloff:>,
242 <:delete:>,<:insert:>,<:cursor:>,<:init:>,<:freetext:>));
243 end;
244
244 procedure write_field(key,field_value,field_type);
245 <*------------------------------------------------------------------*>
246 <* Udskriv en linie indholden keyword og parrametre *>
247 <* *>
248 <* key (call) : Feltets key *>
249 <* field_value (call) : Peger til første hw i buf hvor værdier står *>
250 <* field_type (call) : Typen af værdien i feltet *>
251 <*------------------------------------------------------------------*>
252 integer key,field_value,field_type;
253 begin
254 long array field llaf;
255 integer array field liaf;
256 long field lf;
257 integer field inf;
258 boolean array field baf;
259 integer pos,i,j,ch;
260
260 case field_type of
261 begin
262 begin <* 1 *>
263 write_field_name(key);
264 llaf:=field_value-1;
265 write(out,buf.llaf);
266 end;
267 begin <* 2 *>
268 llaf:=liaf:=field_value-1;
269 if (buf.liaf(1) shift (-4))<>0 then
270 begin
271 write_field_name(key);
272 buf.liaf(11):=0;
273 write(out,buf.llaf);
274 end;
275 end;
276 begin <* 3 *>
277 baf:=field_value;
278 if buf.baf(0) then
279 write_field_name(key);
280 end;
281 begin <* 4 *>
282 lf:=field_value+3;
283 if buf.lf<>0 then
284 begin
285 write_field_name(key);
286 write(out,<<dd>,buf.lf);
287 end;
288 end;
289 begin <* 5 *>
290 write_field_name(key);
291 inf:=field_value+1;
292 write(out,<<dd>,buf.inf);
293 end;
294 begin <* 6 *>
295 baf:=field_value;
296 i:=buf.baf(0) extract 12;
297 if i<>0 then
298 begin
299 write_field_name(key);
300 write(out,<<dd>,i);
301 end;
302 end;
303 begin <* 7 *>
304 llaf:=field_value-1;
305 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then
306 begin
307 write_field_name(key);
308 pos:=1;
309 repeat
310 get_char(buf.llaf,pos,conv,ch);
311 if ch<>0 then
312 write(out,<<zdd >,ch);
313 until pos>6 or ch=0;
314 end;
315 end;
316 begin <* 8 *>
317 llaf:=field_value-1;
318 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then
319 begin
320 write_field_name(key);
321 pos:=1;
322 repeat
323 get_char(buf.llaf,pos,conv,ch);
324 if ch<>0 then
325 write(out,<<zdd >,ch);
326 until pos>9 or ch=0;
327 end;
328 end;
329 begin <* 9 *>
330 llaf:=field_value-1;
331 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then
332 begin
333 write_field_name(key);
334 pos:=1;
335 repeat
336 get_char(buf.llaf,pos,conv,ch);
337 if ch<>0 then
338 write(out,<<zdd >,ch);
339 until pos>75 or ch=0;
340 end;
341 end;
342 begin <* 10 *>
343 baf:=field_value;
344 i:=buf.baf(0) extract 12;
345 if i<>0 then
346 begin
347 write_field_name(key);
348 for pos:=11 step (-1) until 0 do
349 begin
350 if false add (i shift (-pos)) then
351 write(out,<<dd >,11-pos);
352 end;
353 end;
354 end;
355 begin <* 11 *>
356 write_field_name(key);
357 for j:=1 step 2 until 7 do
358 begin
359 inf:=field_value+j;
360 i:=buf.inf;
361 for pos:=23 step (-1) until 0 do
362 begin
363 if false add (i shift (-pos)) then
364 write(out,<<dd >,23-pos+((j-1)*12));
365 end;
366 end;
367 end;
368 begin <* 12 *>
369 llaf:=field_value+1;
370 if buf.llaf(0) extract 12<>0 then
371 begin
372 write_field_name(key);
373 put_char(buf.llaf,(buf.llaf(0) extract 12)+1,0);
374 write(out,buf.llaf);
375 end;
376 end;
377 begin <* 13 *>
378 write_field_name(key);
379 inf:=field_value+1;
380 write(out,<<d>,buf.inf);
381 inf:=field_value+3;
382 write(out,<: :>,<<d>,buf.inf);
383 end;
384 begin <* 14 *>
385 baf:=field_value;
386 i:=buf.baf(0) extract 12;
387 if (i extract 2)<>0 then
388 begin
389 write_field_name(key);
390 write(out,<<dd >,i shift (-7),i shift (-2) extract 5);
391 end;
392 end;
393 end;
394 end;
395
395 procedure list_user;
396 <*--------------------------------------*>
397 <* Udskriv indholdet af en user indgang *>
398 <*--------------------------------------*>
399 begin
400 integer array u_id(1:4);
401 integer sep,i,result;
402
402 sep:=system(4,param,u_id.raf);
403 if sep=(8 shift 12 + 10) then
404 begin
405 param:=param+1;
406 for i:=1 step 1 until 4 do
407 buf.iaf(6+i):=u_id(i);
408 send_modify_mess(132,1,0,result);
409 if result=0 then
410 begin
411 for i:=1 step 1 until 17 do
412 write_field( case i of (
413 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50),
414 case i of (
415 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111),
416 case i of (
417 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2));
418
418 end
419 else
420 if result<>2 then
421 begin
422 if result=4 then
423 error(4)
424 else
425 if result=13 then
426 error(5)
427 else
428 error(8);
429 end
430 else
431 begin
432 no_found:=true;
433 write(out,<:<10>; user.:>,u_id.laf,<: entry not found:>);
434 end;
435 write(out,<:<10>:>);
436 end
437 else
438 error(6);
439 end;
440
440 procedure list_term;
441 <*------------------------------------------*>
442 <* Udskriv indholdet af en terminal indgang *>
443 <*------------------------------------------*>
444 begin
445 long array t_id(1:2);
446 integer sep,i,j,ch,result;
447 long array field llaf;
448
448 llaf:=12;
449 sep:=system(4,param,t_id.raf);
450 if sep=(8 shift 12 + 10) then
451 begin
452 param:=param+1;
453 j:=i:=1;
454 get_char(t_id,i,conv,ch);
455 if ch='t' then
456 get_char(t_id,i,conv,ch);
457 buf.llaf(2):=0;
458 while i<13 do
459 begin
460 put_char(buf.llaf,j,conv,ch);
461 get_char(t_id,i,conv,ch);
462 end;
463 send_modify_mess(46,2,0,result);
464 if result=0 then
465 begin
466 for i:=1 step 1 until 6 do
467 write_field( case i of (18,19,20,26,21,50),
468 case i of (13,21,24,23,22,25),
469 case i of (1,6,6,3,6,2));
470 end
471 else
472 if result<>2 then
473 begin
474 if result=4 then
475 error(4)
476 else
477 if result=13 then
478 error(5)
479 else
480 error(9);
481 end
482 else
483 begin
484 no_found:=true;
485 write(out,<:<10>; terminal.:>,buf.llaf,<: entry not found:>);
486 end;
487 write(out,<:<10>:>);
488 end
489 else
490 error(6);
491 end;
492
492 procedure list_type;
493 <*--------------------------------------*>
494 <* Udskriv indholdet af en user indgang *>
495 <*--------------------------------------*>
496 begin
497 real array type(1:2);
498 integer sep,i,result;
499
499 sep:=system(4,param,type);
500 if sep=(8 shift 12 + 4) then
501 begin
502 param:=param+1;
503 buf.iaf(7):=type(1);
504 send_modify_mess(140,3,0,result);
505 if result=0 then
506 begin
507 for i:=1 step 1 until 26 do
508 write_field( case i of (
509 22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,
510 42,43,44,45,46,47,48,49,50),
511 case i of (
512 13,15,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64,
513 33,37,41,45,49,53,57,69,119),
514 case i of (
515 5,10,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8,
516 9,2));
517 end
518 else
519 if result<>2 then
520 begin
521 if result=4 then
522 error(4)
523 else
524 if result=13 then
525 error(5)
526 else
527 error(5);
528 end
529 else
530 begin
531 no_found:=true;
532 write(out,<:<10>; type.:>,<<d>,entier type(1),<: entry not found:>);
533 end;
534 write(out,<:<10>:>);
535 end
536 else
537 error(6);
538 end;
539
539 procedure list_size;
540 <*-------------------------------------------------*>
541 <* Udskriv antallet af indgange i de tre kataloger *>
542 <*-------------------------------------------------*>
543 begin
544 integer user_ent,term_ent,type_ent,status;
545
545 get_cat_seg(1,0,status,user_size);
546 if status<>0 then
547 begin
548 if false add (status shift (-11)) then
549 error(4)
550 else
551 if false add (status shift (-10)) then
552 error(5)
553 else
554 error(11);
555 end;
556 user_hw:=buf.iaf(3);
557 user_ent:=(user_size-1)*(512//user_hw);
558 get_cat_seg(2,0,status,term_size);
559 if status<>0 then
560 begin
561 if false add (status shift (-11)) then
562 error(4)
563 else
564 if false add (status shift (-10)) then
565 error(5)
566 else
567 error(12);
568 end;
569 term_hw:=buf.iaf(3);
570 term_ent:=(term_size-1)*(512//term_hw);
571 get_cat_seg(3,0,status,type_size);
572 if status<>0 then
573 begin
574 if false add (status shift (-11)) then
575 error(4)
576 else
577 if false add (status shift (-10)) then
578 error(5)
579 else
580 error(13);
581 end;
582 type_hw:=buf.iaf(3);
583 type_ent:=(type_size-1)*(512//type_hw);
584 write(out,<:; Catalog generated at: :>);
585 outdate(out,entier systime(6,buf.iaf(4),0.0));
586 write(out,<:<10>size :>,<<d>,
587 user_ent,<:,:>,term_ent,<:,:>,type_ent);
588 write(out,<: ; Max. entries (User,Terminal,Terminaltype)<10>:>);
589 end;
590
590 procedure list_all;
591 <*-----------------------------------------*>
592 <* Udskriv alle indgange i de 3 kataloger *>
593 <*-----------------------------------------*>
594 begin
595 integer array field base;
596 integer seg_nr,i;
597
597 list_size;
598 for seg_nr:=1 step 1 until user_size-1 do
599 begin
600 get_cat_seg(1,seg_nr,0,0);
601 for base:=4 step user_hw until ((512//user_hw)-1)*user_hw+4 do
602 begin
603 if buf.base(0)<>0 then
604 begin
605 for i:=1 step 1 until 17 do
606 write_field( case i of (
607 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50),
608 base-12+(case i of (
609 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111)),
610 case i of (
611 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2));
612
612 write(out,<:<10>:>);
613 end;
614 end;
615 end;
616 for seg_nr:=1 step 1 until term_size-1 do
617 begin
618 get_cat_seg(2,seg_nr,0,0);
619 for base:=4 step term_hw until ((512//term_hw)-1)*term_hw+4 do
620 begin
621 if buf.base(0)<>0 then
622 begin
623 for i:=1 step 1 until 6 do
624 write_field( case i of (18,19,20,26,21,50),
625 base-12+(case i of (13,21,24,23,22,25)),
626 case i of (1,6,6,3,6,2));
627 write(out,<:<10>:>);
628 end;
629 end;
630 end;
631 for seg_nr:=1 step 1 until type_size-1 do
632 begin
633 get_cat_seg(3,seg_nr,0,0);
634 for base:=0 step type_hw until ((512//type_hw)-1)*type_hw do
635 begin
636 if buf.base(1)<>0 then
637 begin
638 for i:=1 step 1 until 26 do
639 write_field( case i of (
640 22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,
641 42,43,44,45,46,47,48,49,50),
642 base-12+(case i of (
643 13,15,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64,
644 33,37,41,45,49,53,57,69,119)),
645 case i of (
646 5,10,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8,
647 9,2));
648 write(out,<:<10>:>);
649 end;
650 end;
651 end;
652 end;
653
653 procedure list;
654 <*-----------------------------------------------*>
655 <* Bestem hvilken type udskrift der skal udføres *>
656 <*-----------------------------------------------*>
657 begin
658 real array name(1:2);
659
659 param:=if file_out then
660 2
661 else
662 1;
663 while system(4,param,name)<>0 do
664 begin
665 param:=param+1;
666 if name.laf(1)= long <:user:> then
667 list_user
668 else
669 if name.laf(1)= long <:termi:> add 'n' then
670 list_term
671 else
672 if name.laf(1)= long <:type:> then
673 list_type
674 else
675 if name.laf(1)= long <:size:> then
676 list_size
677 else
678 if name.laf(1)= long <:all:> then
679 list_all
680 else
681 error(6);
682 end;
683 end;
684
684 <* Hoved program *>
685 trap(alarm);
686 trapmode:=1 shift 10;
687 raf:=laf:=iaf:=baf:=0;
688 no_found:=false;
689 for i:=0 step 1 until 255 do
690 conv(i):=i;
691 set_output;
692 get_userid;
693 set_buf_zone;
694 list;
695 if file_out and no_found then
696 error(7);
697 alarm:
698 close_output;
699 stop:
700 end;\f
algol end 72
▶EOF◀