|
|
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: 84480 (0x14a00)
Types: TextFile
Names: »utillist «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦39138f30b⟧
└─⟦this⟧ »utillist «
*algol mvmcltxt connect.no list.yes
mvmcltxt d.861121.1142
1 begin
2 <********************************************************************>
3 <* Utility MOVEMCL til flytning af oversatte mcl programmer til *>
4 <* Tas mcl-database *>
5 <* *>
6 <* Kald: movemcl <move spec.> *>
7 <* *>
8 <* include.<name> *>
9 <* <move spec.> ::= get.<name> *>
10 <* lookup.<name> *>
11 <* lookup *>
12 <* *>
13 <* Henning Godske A/S Regnecentralen 861121 *>
14 <* Compiler call: movemcl=algol mvmcltxt connect.no *>
15 <********************************************************************>
16
16 <**************************************************************>
17 <* Revision history *>
18 <* *>
19 <* 86.12.01 movemcl release 1.0 *>
20 <**************************************************************>
21
21 <* Globale variable *>
22
22 zone buf(128,1,std_error); <* Zone til message m.m. *>
23 integer array user_id(1:4); <* Bruger id fra terminal *>
24 long password; <* Password fra terminal *>
25 integer array prog_name(1:4); <* Program navn *>
26 integer param; <* fp parameter tæller *>
27 integer array mcl_bases(1:2); <* Bases for mcl files *>
28 integer array user_bases(1:2); <* Egne bruger baser *>
29 integer array empty(1:4); <* Tomt navn *>
30 boolean eof; <* End Of File *>
31
31 integer array arr(1:8); <* Work *>
32 integer array field iaf; <* Work *>
33 real array field raf; <* Work *>
34 boolean array field baf; <* Work *>
35 long array field laf; <* Work *>
36 integer i; <* Work *>
37
37 <* Globale procedure *>
38
38 procedure get_userid;
39 <*-------------------------------------------------------------------*>
40 <* Set user id og password i de globale variable user_id og password *>
41 <* Id og password hentes fra terminalen tilknyttet prim. output *>
42 <*-------------------------------------------------------------------*>
43 begin
44 long array term_name(1:2);
45 integer i;
46 integer array ia(1:20);
47
47 system(7,0,term_name);
48 open(buf,0,term_name,0);
49 close(buf,false);
50 getzone6(buf,ia);
51 i:=ia(19);
52 getshare6(buf,ia,1);
53 ia(4):=131 shift 12;
54 ia(5):=i+1;
55 ia(6):=i+11;
56 ia(7):=0;
57 setshare6(buf,ia,1);
58 if monitor(16,buf,1,ia)=0 then
59 error(8,empty);
60 if monitor(18,buf,1,ia)<>1 then
61 error(11,empty);
62 if ia(1)<>0 then
63 error(13,empty);
64 for i:=1,2,3,4 do
65 user_id(i):=buf.iaf(i);
66 password:=buf.laf(3);
67 end;
68
68 procedure error(err_nr,name);
69 <*-----------------------------------------------*>
70 <* Udskriv fejlmeddelelse på cur. output og stop *>
71 <*-----------------------------------------------*>
72 integer err_nr;
73 integer array name;
74 begin
75 write(out,<:<10>***:>,prog_name.laf,<: :>,name.laf,<: :>);
76 if err_nr<1 or err_nr>13 then
77 write(out,<:internal :>,err_nr)
78 else
79 write(out,case err_nr of (
80 <:not found:>,<:error - not moved:>,
81 <:exist allready:>,<:protected:>,
82 <:in use:>,<:illegal name:>,
83 <:no privilegie:>,<:claims:>,
84 <:not a permanent file:>,<:parameter:>,
85 <:no system:>,<:internal 12:>,
86 <:not allowed:>));
87 write(out,<:<10>:>);
88 goto stop;
89 end;
90
90 procedure set_buf_zone;
91 <*-------------------------------------------*>
92 <* Sæt zonen buf klar til message til tas *>
93 <*-------------------------------------------*>
94 begin
95 open(buf,0,<:tas:>,0);
96 close(buf,false);
97 end;
98
98 procedure send_move_mess(mode,name,bases,result);
99 <*--------------------------------------------------------------*>
100 <* Send move message til Tas. Repeter hvis process stoppes *>
101 <* Message sendes via zonen buf *>
102 <* *>
103 <* mode (call) : 0= Base, 1=To, 2=From *>
104 <* name (call) : Navn på fil der skal flyttes *>
105 <* bases(call) : Bruger baser hvor fil skal til/fra *>
106 <* result (ret) : Resultat fra message, 0=OK *>
107 <*--------------------------------------------------------------*>
108 integer mode,result;
109 integer array name,bases;
110 begin
111 integer array share(1:12),zone_ia(1:20);
112 boolean send;
113 integer i;
114
114 send:=false;
115 while not send do
116 begin
117 getshare6(buf,share,1);
118 getzone6(buf,zone_ia);
119 share(1):=0;
120 share(4):=(15 shift 12)+mode;
121 share(5):=zone_ia(19)+1;
122 share(6):=share(5)+22;
123 setshare6(buf,share,1);
124 for i:=1 step 1 until 4 do
125 buf.iaf(i):=user_id(i);
126 buf.iaf(5):=password shift (-24);
127 buf.iaf(6):=password extract 24;
128 for i:=1,2,3,4 do
129 buf.iaf(6+i):=name(i);
130 buf.iaf(11):=bases(1);
131 buf.iaf(12):=bases(2);
132 if monitor(16,buf,1,share)=0 then
133 error(8,empty);
134 if monitor(18,buf,1,share)<>1 then
135 error(11,empty);
136 result:=share(1);
137 mcl_bases(1):=share(4);
138 mcl_bases(2):=share(5);
139 if result<>8 then
140 send:=true;
141 end;
142 end;
143
143 procedure cat_error(z,s,b);
144 <*------------------------------------------*>
145 <* Catalog læsnings fejl procedure *>
146 <*------------------------------------------*>
147 zone z;
148 integer s,b;
149 begin
150 if false add (s shift (-18)) then
151 begin
152 b:=34;
153 eof:=true;
154 end
155 else
156 std_error(z,s,b);
157 end;
158
158 procedure lookup_entry(name);
159 <*---------------------------------------------*>
160 <* Find mcl-fil entry i katalog med givet navn *>
161 <*---------------------------------------------*>
162 integer array name;
163 begin
164 integer result;
165 long array field llaf;
166 real r;
167
167 send_move_mess(0,name,mcl_bases,result);
168 if result=0 then
169 begin
170 write(out,<:<10>:>,true,14,name.laf,<: :>);
171 outdate(out,round systime(6,buf.iaf(11),r));
172 write(out,<: :>);
173 outdate(out,round r);
174 llaf:=2;
175 write(out,<: :>,true,12,buf.llaf,<<ddddd>,buf.iaf(12));
176 end
177 else
178 if result=1 then
179 write(out,<:<10>***:>,prog_name.laf,<: :>,name.laf,<: not found:>)
180 else
181 error(result,name);
182 end;
183
183 procedure lookup_all;
184 <*---------------------------*>
185 <* Find mcl-filer i catalog *>
186 <*---------------------------*>
187 begin
188 zone cat(128,1,cat_error);
189 long array field llaf;
190 real r;
191 integer result;
192
192 send_move_mess(0,prog_name,mcl_bases,result);
193 if result>6 then
194 error(result,empty);
195 open(cat,4,<:catalog:>,1 shift 18);
196 eof:=false;
197 inrec6(cat,34);
198 while not eof do
199 begin
200 if cat.iaf(1)<>-1 then
201 begin
202 if cat.iaf(2)=mcl_bases(1) and
203 cat.iaf(3)=mcl_bases(2) and
204 cat.iaf(16)=29 shift 12 then
205 begin
206 llaf:=6;
207 write(out,<:<10>:>,true,14,cat.llaf,<: :>);
208 outdate(out,round systime(6,cat.iaf(13),r));
209 write(out,<: :>);
210 outdate(out,round r);
211 llaf:=16;
212 write(out,<: :>,true,12,cat.llaf,<<ddddd>,cat.iaf(17));
213 end;
214 end;
215 inrec6(cat,34);
216 end;
217 end;
218
218 procedure lookup_files;
219 <*---------------------------*>
220 <* Lookup parameter funktion *>
221 <*---------------------------*>
222 begin
223 integer array name(1:4);
224
224 if system(4,param,name.raf)<>(8 shift 12 + 10) then
225 lookup_all
226 else
227 repeat
228 param:=param+1;
229 lookup_entry(name);
230 until system(4,param,name.raf)<>(8 shift 12 + 10);
231 end;
232
232 procedure move_file(mode);
233 <*---------------------------------*>
234 <* Flyt filer til/fra system *>
235 <* *>
236 <* mode (call) : 1=To, 2=From *>
237 <*---------------------------------*>
238 integer mode;
239 begin
240 integer array name(1:4);
241 integer result;
242
242 while system(4,param,name.raf)=(8 shift 12 + 10) do
243 begin
244 param:=param+1;
245 send_move_mess(mode,name,user_bases,result);
246 if result<>0 then
247 error(result,name);
248 end;
249 end;
250
250 procedure move;
251 <*-----------------*>
252 <* Hoved procedure *>
253 <*-----------------*>
254 begin
255 integer array parameter(1:4);
256
256 while system(4,param,parameter.raf)=(4 shift 12 + 10) do
257 begin
258 param:=param+1;
259 if parameter.laf(1)=long <:inclu:> add 'd' then
260 move_file(1)
261 else
262 if parameter.laf(1)=long <:get:> then
263 move_file(2)
264 else
265 if parameter.laf(1)=long <:looku:> add 'p' then
266 lookup_files
267 else
268 error(10,parameter);
269 end;
270 if system(4,param,parameter.raf)<>0 then
271 error(10,parameter);
272 end;
273
273 <* Hoved program *>
274 trapmode:=1 shift 10;
275 raf:=laf:=iaf:=0;
276 for i:=1,2,3,4 do empty(i):=0;
277 if system(4,1,prog_name.raf)=(6 shift 12 + 10) then
278 param:=2
279 else
280 begin
281 system(4,0,prog_name.raf);
282 param:=1;
283 end;
284 get_userid;
285 set_buf_zone;
286 system(11,0,arr);
287 user_bases(1):=arr(5);
288 user_bases(2):=arr(6);
289 move;
290 write(out,<:<10>:>);
291 stop:
292 end;\f
algol end 49
*head ▶7f◀1
\f
tasgen 1987.05.14 11.40
*algol dtctxt connect.no list.yes
dtctxt d.861121.1146
1 begin
2 <********************************************************************>
3 <* Utility DELTASCAT til sletning af tas katalog indgange. *>
4 <* *>
5 <* Kald: deltascat <del-spec.> *>
6 <* *>
7 <* user.<name> *>
8 <* <del-spec.> ::= terminal.<name> *>
9 <* type.<number> *>
10 <* *>
11 <* Compiler call: deltascat=algol dtctxt connect.no *>
12 <********************************************************************>
13
13 <**************************************************************>
14 <* Revision history *>
15 <* *>
16 <* 86.12.01 deltascat release 1.0 *>
17 <**************************************************************>
18
18 <* Globale variable *>
19
19 zone buf(128,1,std_error); <* Zone til message m.m. *>
20 integer array user_id(1:4); <* Bruger id fra terminal *>
21 long password; <* Password fra terminal *>
22 integer array prog_name(1:4); <* Program navn *>
23 integer array conv(0:255); <* Tegn konverterings tabel *>
24 integer param; <* fp parameter tæller *>
25
25 integer array field iaf; <* Work *>
26 real array field raf; <* Work *>
27 long array field laf; <* Work *>
28 integer i; <* Work *>
29
29 <* Globale procedure *>
30
30 procedure get_userid;
31 <*-------------------------------------------------------------------*>
32 <* Set user id og password i de globale variable user_id og password *>
33 <* Id og password hentes fra terminalen tilknyttet prim. output *>
34 <*-------------------------------------------------------------------*>
35 begin
36 long array term_name(1:2);
37 integer i;
38 integer array ia(1:20);
39
39 system(7,0,term_name);
40 open(buf,0,term_name,0);
41 close(buf,false);
42 getzone6(buf,ia);
43 i:=ia(19);
44 getshare6(buf,ia,1);
45 ia(4):=131 shift 12;
46 ia(5):=i+1;
47 ia(6):=i+11;
48 ia(7):=0;
49 setshare6(buf,ia,1);
50 if monitor(16,buf,1,ia)=0 then
51 error(7);
52 if monitor(18,buf,1,ia)<>1 then
53 error(3);
54 if ia(1)<>0 then
55 error(3);
56 for i:=1,2,3,4 do
57 user_id(i):=buf.iaf(i);
58 password:=buf.laf(3);
59 end;
60
60 procedure error(err_nr);
61 <*-----------------------------------------------*>
62 <* Udskriv fejlmeddelelse og stop hvis fatal *>
63 <*-----------------------------------------------*>
64 integer err_nr;
65 begin
66 if err_nr>2 then
67 write(out,<:***:>,prog_name.laf,<: :>);
68 if err_nr<1 or err_nr>7 then
69 write(out,<:internal :>,err_nr)
70 else
71 write(out,case err_nr of (
72 <:in use:>,<:not found:>,
73 <:not allowed:>,<:no privilege:>,
74 <:no system:>,<:parameter:>,
75 <:claims:>));
76 write(out,<:<10>:>);
77 if err_nr>2 then
78 goto stop;
79 end;
80
80 procedure set_buf_zone;
81 <*-------------------------------------------*>
82 <* Sæt zonen buf klar til message til tas *>
83 <*-------------------------------------------*>
84 begin
85 open(buf,0,<:tas:>,0);
86 close(buf,false);
87 end;
88
88 procedure send_modify_mess(size,mode,func,result);
89 <*--------------------------------------------------------------*>
90 <* Send modify message til tas. Repeter hvis process stoppes *>
91 <* Message sendes via zonen buf *>
92 <* *>
93 <* size (call) : Antal hw der skal sendes/modtages i buf *>
94 <* mode (call) : 1=user, 2=terminal, 3=type *>
95 <* func (call) : 0=get, 1=modify, 2=set new, 3=delete *>
96 <* result (ret) : Resultat fra message, 0=OK *>
97 <*--------------------------------------------------------------*>
98 integer size,mode,func,result;
99 begin
100 integer array share(1:12),zone_ia(1:20);
101 boolean send;
102 integer i;
103
103 send:=false;
104 while not send do
105 begin
106 getshare6(buf,share,1);
107 getzone6(buf,zone_ia);
108 share(1):=0;
109 share(4):=(11 shift 12)+mode;
110 share(5):=zone_ia(19)+1;
111 share(6):=share(5)+size-2;
112 share(7):=func;
113 setshare6(buf,share,1);
114 for i:=1 step 1 until 4 do
115 buf.iaf(i):=user_id(i);
116 buf.iaf(5):=password shift (-24);
117 buf.iaf(6):=password extract 24;
118 if monitor(16,buf,1,share)=0 then
119 error(2);
120 if monitor(18,buf,1,share)<>1 then
121 error(3);
122 result:=share(1);
123 if result<>8 then
124 send:=true;
125 end;
126 end;
127
127 procedure del_user;
128 <*----------------------*>
129 <* Slet en user indgang *>
130 <*----------------------*>
131 begin
132 integer array u_id(1:4);
133 integer sep,i,result;
134
134 sep:=system(4,param,u_id.raf);
135 if sep=(8 shift 12 + 10) then
136 begin
137 param:=param+1;
138 for i:=1 step 1 until 4 do
139 buf.iaf(6+i):=u_id(i);
140 send_modify_mess(20,1,3,result);
141 write(out,<:user.:>,u_id.laf,<: :>);
142 if result<>0 then
143 begin
144 if result=13 then
145 error(3)
146 else
147 error(result);
148 end
149 else
150 write(out,<:deleted<10>:>);
151 end
152 else
153 error(6);
154 end;
155
155 procedure del_term;
156 <*--------------------------*>
157 <* Slet en terminal indgang *>
158 <*--------------------------*>
159 begin
160 long array t_id(1:2);
161 integer sep,i,j,ch,result;
162 long array field llaf;
163
163 llaf:=12;
164 sep:=system(4,param,t_id.raf);
165 if sep=(8 shift 12 + 10) then
166 begin
167 param:=param+1;
168 j:=i:=1;
169 get_char(t_id,i,conv,ch);
170 if ch='t' then
171 get_char(t_id,i,conv,ch);
172 buf.llaf(2):=0;
173 while i<13 do
174 begin
175 put_char(buf.llaf,j,conv,ch);
176 get_char(t_id,i,conv,ch);
177 end;
178 send_modify_mess(20,2,3,result);
179 write(out,<:terminal.:>,buf.llaf,<: :>);
180 if result<>0 then
181 begin
182 if result=13 then
183 error(3)
184 else
185 error(result);
186 end
187 else
188 write(out,<:deleted<10>:>);
189 end
190 else
191 error(6);
192 end;
193
193 procedure del_type;
194 <*----------------------*>
195 <* Slet en type indgang *>
196 <*----------------------*>
197 begin
198 real array type(1:2);
199 integer sep,i,result;
200
200 sep:=system(4,param,type);
201 if sep=(8 shift 12 + 4) then
202 begin
203 param:=param+1;
204 buf.iaf(7):=type(1);
205 send_modify_mess(14,3,3,result);
206 write(out,<:type.:>,<<d>,buf.iaf(7),<: :>);
207 if result<>0 then
208 begin
209 if result=13 then
210 error(3)
211 else
212 error(result);
213 end
214 else
215 write(out,<:deleted<10>:>);
216 end
217 else
218 error(6);
219 end;
220
220 procedure delete;
221 <*-----------------------------------------------*>
222 <* Bestem hvilken indgange der skal slettes *>
223 <*-----------------------------------------------*>
224 begin
225 real array name(1:2);
226
226 while system(4,param,name)<>0 do
227 begin
228 param:=param+1;
229 if name.laf(1)= long <:user:> then
230 del_user
231 else
232 if name.laf(1)= long <:termi:> add 'n' then
233 del_term
234 else
235 if name.laf(1)= long <:type:> then
236 del_type
237 else
238 error(6);
239 end;
240 end;
241
241 <* Hoved program *>
242 trapmode:=1 shift 10;
243 raf:=laf:=iaf:=0;
244 for i:=0 step 1 until 255 do
245 conv(i):=i;
246 if system(4,1,prog_name.raf)=(6 shift 12 + 10) then
247 param:=2
248 else
249 begin
250 system(4,0,prog_name.raf);
251 param:=1;
252 end;
253 get_userid;
254 set_buf_zone;
255 delete;
256 stop:
257 end;\f
algol end 49
*head ▶7f◀1
\f
tasgen 1987.05.14 11.41
*algol stctxt list.yes
stctxt d.861223.1340
1 begin
2 <********************************************************************>
3 <* Utility SETTASCAT til indsættelse og opdatering af indgange *>
4 <* *>
5 <* Kald: settascat <in-spec.> *>
6 <* *>
7 <* <in-spec.> ::= current input or file *>
8 <* *>
9 <* Compiler call: settascat=algol stctxt connect.yes *>
10 <* *>
11 <********************************************************************>
12
12 <**************************************************************>
13 <* Revision history *>
14 <* *>
15 <* 86.12.01 settascat release 1.0 *>
16 <**************************************************************>
17
17 <* Globale variable *>
18
18 zone buf(128,1,std_error); <* Zone til message m.m. *>
19 integer array user_id(1:4); <* Bruger id fra terminal *>
20 long password; <* Password fra terminal *>
21 integer array prog_name(1:4); <* Program navn *>
22 integer array conv(0:255); <* Tegn konverterings tabel *>
23 integer param; <* fp parameter tæller *>
24 integer line_nr; <* Input linie nummer *>
25 integer array mcl_bases(1:2); <* System mcl baser *>
26 integer num_keys; <* Antal keywords *>
27 long array keywords(0:60); <* Keywords array *>
28
28 integer array field iaf; <* Work *>
29 real array field raf; <* Work *>
30 boolean array field baf; <* Work *>
31 long array field laf; <* Work *>
32 integer i; <* Work *>
33
33 <* Procedure til afhjælpelse af fejl i externe procedure *>
34
34 integer procedure put_ch(dest,pos,char,rep);
35 long array dest;
36 integer pos,char,rep;
37 begin
38 trap(local);
39 put_ch:=putchar(dest,pos,char,rep);
40 if false then
41 local: put_ch:=-1;
42 end;
43
43 integer procedure put_txt(dest,pos,text,length);
44 long array dest,text;
45 integer pos,length;
46 begin
47 trap(local);
48 put_txt:=puttext(dest,pos,text,length);
49 if false then
50 local: put_txt:=-1;
51 end;
52
52 <* Globale procedure *>
53
53 procedure init_keywords;
54 <*-------------------------------------------*>
55 <* initialiser keywords *>
56 <*-------------------------------------------*>
57 begin
58 integer i;
59
59 num_keys:=50;
60 for i:=1 step 1 until num_keys do
61 begin
62 keywords(i):=0;
63 keywords(i):= long (case i of
64 <* 1 *> (<:end:>,<:size:>,<:user:>,<:passw:>,<:cpass:>,
65 <* 6 *> <:monda:>,<:tuesd:>,<:wedne:>,<:thurs:>,<:frida:>,
66 <* 11 *> <:satur:>,<:sunda:>,<:block:>,<:sessi:>,<:privi:>,
67 <* 16 *> <:mclna:>,<:base:>,<:group:>,<:mclte:>,<:freet:>,
68 <* 21 *> <:termi:>,<:termt:>,<:termg:>,<:bypas:>,<:type:>,
69 <* 26 *> <:scree:>,<:colum:>,<:lines:>,<:sbup:>,<:sbdow:>,
70 <* 31 *> <:sblef:>,<:sbrig:>,<:sbhom:>,<:sbdel:>,<:ceod:>,
71 <* 36 *> <:ceol:>,<:invon:>,<:invof:>,<:hlon:>,<:hloff:>,
72 <* 41 *> <:delet:>,<:inser:>,<:curso:>,<:up:>,<:down:>,
73 <* 46 *> <:left:>,<:right:>,<:home:>,<:xxxxx:>,<:init:>));
74 end;
75 end;
76
76 integer procedure find_keyword_value(keyword);
77 <*----------------------------------------------------------------*>
78 <* Find 'token' værdien for det angivne keyword *>
79 <* *>
80 <* keyword (call) : Long indeholdende op til 5 tegn af keyword *>
81 <* Return : Værdien for det angivne keyword eller *>
82 <* 0 hvis keyword er ukendt *>
83 <*----------------------------------------------------------------*>
84 long keyword;
85 begin
86 integer i;
87
87 i:=num_keys+1;
88 keyword:=(keyword shift (-8)) shift 8;
89 for i:=i-1 while not (keyword=keywords(i)) and (i<>0) do; <* nothing *>
90 find_keyword_value:=i;
91 if i=0 and keyword<>0 then
92 write_mess(8,false);
93 end;
94
94 procedure next_line;
95 <*-------------------------------------------------------*>
96 <* Læs til starten af næste linie i input *>
97 <* Linier der starter med ; eller er blanke overspringes *>
98 <* Linie tæller optælles med 1 for hver linie *>
99 <* *>
100 <*-------------------------------------------------------*>
101 begin
102 integer i;
103
103 repeatchar(in);
104 readchar(in,i);
105 while (i<>'nl') and (i<>'em') do
106 readchar(in,i);
107 line_nr:=line_nr+1;
108 readchar(in,i);
109 if i<>'em' then
110 begin
111 while i=' ' do
112 readchar(in,i);
113 if i='nl' or i='em' or i=';' then
114 begin
115 next_line;
116 readchar(in,i);
117 end;
118 end;
119 repeatchar(in);
120 end;
121
121 integer procedure read_start_key;
122 <*-------------------------------------------------------------------*>
123 <* Find værdien af nøgleordet i starten af tekst linien i input *>
124 <* *>
125 <* Return : -1 = Sidste linie i fil er læst *>
126 <* 0 = Nøgleord er ikke fundet *>
127 <* >0 = Nøgleordets værdi *>
128 <*-------------------------------------------------------------------*>
129 begin
130 long array key(1:5);
131 integer i;
132
132 readchar(in,i);
133 if i<>'em' then
134 begin
135 while i=' ' do
136 readchar(in,i);
137 if i='nl' or i='em' or i=';' then
138 begin
139 next_line;
140 readchar(in,i);
141 end;
142 end;
143 repeatchar(in);
144 read_start_key:=if readstring(in,key,1)>0 then
145 find_keyword_value(key(1))
146 else
147 -1;
148 repeatchar(in);
149 end;
150
150 integer procedure read_text(text,max);
151 <*---------------------------------------------------------------------*>
152 <* Læs tekst fra input til text, til slutning af linie eller til *>
153 <* maximalt antal tegn læst. Indledende blanktegn overspringes. *>
154 <* *>
155 <* text (ret) : Den læste tekst *>
156 <* max (call) : Det maximale antal tegn der læses *>
157 <* Return : Antal tegn læst til text *>
158 <* *>
159 <*---------------------------------------------------------------------*>
160 integer max;
161 long array text;
162 begin
163 integer ch,pos;
164 boolean first;
165
165 pos:=1;
166 first:=true;
167 text(1):=0;
168 repeatchar(in);
169 readchar(in,ch);
170 if (ch<>'nl') and (ch<>'em') then
171 begin
172 readchar(in,ch);
173 while ch<>'nl' and ch<>'em' and pos<=max do
174 begin
175 if first and (ch<>' ') then
176 first:=false;
177 if -,first then
178 put_ch(text,pos,ch,1);
179 readchar(in,ch);
180 end;
181 end;
182 read_text:=pos-1;
183 if pos<=max then
184 put_ch(text,pos,0,1);
185 repeatchar(in);
186 end;
187
187 boolean procedure read_nr(nr);
188 <*-----------------------------------------------------------------*>
189 <* Læs et heltal fra input. Er der ikke flere tal på linien *>
190 <* returneres -1 ellers det læste tal. Er der angivet ulovligt *>
191 <* tal (eller andet end tal) sættes read_nr til false *>
192 <* *>
193 <* nr (ret) : Læst tal eller -1 hvis ikke flere tal *>
194 <* Return : True = ok False = illegalt tal *>
195 <*-----------------------------------------------------------------*>
196 integer nr;
197 begin
198 integer ch,class;
199
199 read_nr:=true;
200 repeat
201 class:=readchar(in,ch);
202 until class<>7 or ch=';' ;
203 if ch=';' or class=8 then
204 nr:=-1
205 else
206 if class<2 or class>3 then
207 begin
208 nr:=-1;
209 read_nr:=false;
210 end
211 else
212 begin
213 repeatchar(in);
214 read(in,nr);
215 end;
216 repeatchar(in);
217 end;
218
218 boolean procedure read_name(name,ok);
219 <*---------------------------------------------------------------------*>
220 <* Læs et navn fra input til name. Resterende tegn nulstilles *>
221 <* Indledende blanktegn overspringes. Der stoppes ved kommentar *>
222 <* *>
223 <* name (ret) : Det læste navn i integer array name(1:4) *>
224 <* ok (ret) : True hvis navnet starter med bogstav *>
225 <*---------------------------------------------------------------------*>
226 integer array name;
227 boolean ok;
228 begin
229 integer ch,pos;
230
230 ok:=false;
231 for pos:=1,2,3,4 do
232 name(pos):=0;
233 pos:=1;
234 repeatchar(in);
235 readchar(in,ch);
236 while ch=' ' do
237 readchar(in,ch);
238 if ch>='a' and ch<='å' then
239 ok:=true;
240 while ((ch>='0'and ch<='9') or (ch>='a' and ch<='å')) and pos<=11 do
241 begin
242 put_ch(name.laf,pos,ch,1);
243 readchar(in,ch);
244 end;
245 repeatchar(in);
246 read_name:=not name(1)=0;
247 end;
248
248 procedure clear_high(i);
249 <*---------------------------*>
250 <* Nulstil 12 high bit i ord *>
251 <*---------------------------*>
252 integer i;
253 begin
254 i:=(i shift 12) shift (-12);
255 end;
256
256 procedure clear_low(i);
257 <*---------------------------*>
258 <* Nulstil 12 low bit i ord *>
259 <*---------------------------*>
260 integer i;
261 begin
262 i:=(i shift (-12)) shift 12;
263 end;
264
264 procedure set_entry;
265 <*------------------------------------------------------*>
266 <* Indsæt værdier læst fra input i indgange i kataloget *>
267 <*------------------------------------------------------*>
268 begin
269 integer key,result,i,first,last,type;
270 integer array id(1:4);
271 integer array field entry;
272 boolean exist,ok;
273 long array password(1:8);
274
274 line_nr:=1;
275 key:=read_start_key;
276 while key=0 or key=2 do
277 begin
278 if key=2 then
279 begin
280 write(out,<:Size field ignored<10>:>);
281 setposition(out,0,0);
282 end;
283 next_line;
284 key:=read_start_key;
285 end;
286 while (key<>1 <* end *>) and (key<>-1) do
287 begin
288 if key=3 then
289 begin <* user entry *>
290 if not read_name(id,ok) then
291 write_mess(12,false);
292 if not ok then
293 write_mess(12,false);
294 for i:=1,2,3,4 do
295 buf.iaf(i+6):=id(i);
296 send_modify_mess(132,1,0,result);
297 if result=0 or result=2 then
298 begin <* ok *>
299 entry:=10;
300 exist:=true;
301 write(out,<:User :>,id.laf,<: :>);
302 if result=2 then
303 begin <* ny bruger *>
304 <* init entry *>
305 exist:=false;
306 for i:=6 step 1 until 61 do
307 buf.entry(i):=0;
308 buf.entry(12):=1 shift 12; <* Max sessions *>
309 buf.entry(23):=2 shift 12; <* mcl def. text empty *>
310 buf.entry(19):=1 shift 23; <* term. group 0 *>
311 end;
312 next_line;
313 key:=read_start_key;
314 while (key>=4) and (key<=20) do
315 begin
316 <* indsæt i entry *>
317 if (key>=6) and (key<=12) then
318 begin <* læs first og last for login tid *>
319 if not(read_nr(first) and read_nr(last)) then
320 write_mess(11,false);
321 if first<0 or first>24 or last<0 or last>24 then
322 write_mess(11,false);
323 type:=if first=0 and last=24 then
324 3
325 else
326 if first=last then
327 0
328 else
329 if first<last then
330 1
331 else
332 2;
333 end;
334 begin
335 case key-3 of
336 begin
337 begin <* password *>
338 for i:=1 step 1 until 8 do
339 password(i):=0;
340 buf.entry(6):=0;
341 buf.entry(7):=0;
342 if read_text(password,48)>0 then
343 begin <* kod password *>
344 for last:=1 step 1 until 31 do
345 begin
346 key:=password.baf(last) extract 12;
347 for i:=last+1 step 1 until 32 do
348 password.baf(i):=false add
349 ((password.baf(i) extract 12) + key);
350 end;
351 for i:=1 step 1 until 16 do
352 begin
353 buf.entry(6):=buf.entry(6)+
354 password.iaf(i);
355 buf.entry(7):=buf.entry(7)+
356 buf.entry(6);
357 end;
358 end;
359 end;
360 begin <* kodet password *>
361 read(in,password(1));
362 buf.entry(6):=password(1) shift (-24);
363 buf.entry(7):=password(1) extract 24;
364 end;
365 begin <* monday *>
366 clear_high(buf.entry(8));
367 buf.entry(8):=buf.entry(8)+
368 ((first shift 7)+(last shift 2) + type) shift 12;
369 end;
370 begin <* tuesday *>
371 clear_low(buf.entry(8));
372 buf.entry(8):=buf.entry(8)+
373 ((first shift 7)+(last shift 2) + type);
374 end;
375 begin <* wednesday *>
376 clear_high(buf.entry(9));
377 buf.entry(9):=buf.entry(9)+
378 ((first shift 7)+(last shift 2) + type) shift 12;
379 end;
380 begin <* thursday *>
381 clear_low(buf.entry(9));
382 buf.entry(9):=buf.entry(9)+
383 ((first shift 7)+(last shift 2) + type);
384 end;
385 begin <* friday *>
386 clear_high(buf.entry(10));
387 buf.entry(10):=buf.entry(10)+
388 ((first shift 7)+(last shift 2) + type) shift 12;
389 end;
390 begin <* saturday *>
391 clear_low(buf.entry(10));
392 buf.entry(10):=buf.entry(10)+
393 ((first shift 7)+(last shift 2) + type);
394 end;
395 begin <* sunday *>
396 clear_high(buf.entry(11));
397 buf.entry(11):=buf.entry(11)+
398 ((first shift 7)+(last shift 2) + type) shift 12;
399 end;
400 begin <* block *>
401 if not read_nr(i) or i<0 then
402 write_mess(11,false);
403 clear_low(buf.entry(11));
404 buf.entry(11):=buf.entry(11)+i;
405 end;
406 begin <* sessions *>
407 clear_high(buf.entry(12));
408 if not read_nr(i) or i>9 or i<1 then
409 write_mess(11,false);
410 buf.entry(12):=buf.entry(12)+(i shift 12);
411 end;
412 begin <* privilegier *>
413 type:=0;
414 clear_low(buf.entry(12));
415 if not read_nr(i) then
416 write_mess(11,false);
417 while (i>=0) do
418 begin
419 if i>11 then
420 write_mess(11,false);
421 type:=type+(1 shift (11-i));
422 if not read_nr(i) then
423 write_mess(11,false);
424 end;
425 buf.entry(12):=buf.entry(12)+type;
426 end;
427 begin <* mcl name *>
428 if not read_name(id,ok) then
429 write_mess(12,false);
430 if not ok then
431 write_mess(12,false);
432 for i:=1,2,3,4 do
433 buf.entry(i+12):=id(i);
434 end;
435 begin <* mcl bases *>
436 if not(read_nr(first) and read_nr(last)) then
437 write_mess(11,false);
438 if first>last then
439 write_mess(11,false);
440 buf.entry(17):=first;
441 buf.entry(18):=last;
442 end;
443 begin <* groups *>
444 for i:=1 step 1 until 4 do
445 id(i):=0;
446 if not read_nr(i) then
447 write_mess(11,false);
448 while i>=0 do
449 begin
450 if i>95 then
451 write_mess(11,false);
452 first:=(i//24)+1;
453 last:=23-(i mod 24);
454 if -,(false add (id(first) shift (-last))) then
455 id(first):=id(first)+(1 shift last);
456 if not read_nr(i) then
457 write_mess(11,false);
458 end;
459 for i:=1 step 1 until 4 do
460 buf.entry(18+i):=id(i);
461 end;
462 begin <* mcl text *>
463 laf:=46;
464 i:=read_text(buf.entry.laf,80);
465 buf.entry(23):=
466 ((((i+2)//3*2)+2) shift 12) + i;
467 laf:=0;
468 end;
469 begin <* free text *>
470 laf:=100;
471 read_text(buf.entry.laf,30);
472 laf:=0;
473 end;
474 end;
475 end;
476 next_line;
477 key:=read_start_key;
478 end;
479 if exist then
480 send_modify_mess(132,1,1,result)
481 else
482 send_modify_mess(132,1,2,result);
483 if result<>0 then
484 begin
485 if result=1 then
486 write_mess(1,true)
487 else
488 write_mess(result,false);
489 end
490 else
491 if exist then
492 write_mess(3,true)
493 else
494 write_mess(2,true);
495 end
496 else
497 write_mess(result,false);
498 end
499 else
500 if key=21 then
501 begin <* terminal entry *>
502 if not read_name(id,ok) then
503 write_mess(12,false);
504 for i:=1,2,3,4 do
505 buf.iaf(i+6):=id(i);
506 send_modify_mess(46,2,0,result);
507 if result=0 or result=2 then
508 begin
509 exist:=true;
510 entry:=10;
511 write(out,<:Terminal :>,id.laf,<: :>);
512 if result=2 then
513 begin
514 <* init entry *>
515 exist:=false;
516 for i:=7 step 1 until 18 do
517 buf.entry(i):=0;
518 buf.entry(6):=1 shift 12; <* terminal type *>
519 end;
520 next_line;
521 key:=read_start_key;
522 while (key>=22 and key<=24) or key=13 or key=20 do
523 begin
524 <* indsæt i entry *>
525 if key=22 then
526 begin <* Terminal type *>
527 if not read_nr(i) or i<0 or i>2047 then
528 write_mess(11,false);
529 clear_high(buf.entry(6));
530 buf.entry(6):=buf.entry(6)+
531 i shift 12;
532 end;
533 if key=23 then
534 begin <* terminal group *>
535 if not read_nr(i) or i<0 or i>95 then
536 write_mess(11,false);
537 clear_low(buf.entry(7));
538 buf.entry(7):=buf.entry(7)+i;
539 end;
540 if key=20 then
541 begin <* free text *>
542 laf:=14;
543 read_text(buf.entry.laf,30);
544 laf:=0;
545 end;
546 if key=13 then
547 begin <* block *>
548 if not read_nr(i) or i<0 or i>4095 then
549 write_mess(11,false);
550 clear_low(buf.entry(6));
551 buf.entry(6):=buf.entry(6)+i;
552 end;
553 if key=24 then
554 begin <* bypass *>
555 clear_high(buf.entry(7));
556 if not read_nr(i) or i<>0 then
557 buf.entry(7):=buf.entry(7)+(1 shift 12);
558 end;
559 next_line;
560 key:=read_start_key;
561 end;
562 if exist then
563 send_modify_mess(46,2,1,result)
564 else
565 send_modify_mess(46,2,2,result);
566 if result<>0 then
567 begin
568 if result=1 then
569 write_mess(1,true)
570 else
571 write_mess(result,false);
572 end
573 else
574 if exist then
575 write_mess(3,true)
576 else
577 write_mess(2,true);
578 end
579 else
580 write_mess(result,false);
581 end
582 else
583 if key=25 then
584 begin <* type entry *>
585 if not read_nr(type) or type<1 or key>2047 then
586 write_mess(11,false);
587 buf.iaf(7):=type;
588 send_modify_mess(140,3,0,result);
589 if result=0 or result=2 then
590 begin
591 exist:=true;
592 entry:=12;
593 write(out,<:Type :>,<<dd>,type,<: :>);
594 if result=2 then
595 begin
596 <* init entry *>
597 exist:=false;
598 for i:=2 step 1 until 64 do
599 buf.entry(i):=0;
600 buf.entry(1):=type; <* terminal type *>
601 buf.entry(3):=(80 shift 12)+24;
602 end;
603 next_line;
604 key:=read_start_key;
605 while ((key>=26) and (key<=50)) or (key=20) do
606 begin
607 <* indsæt i entry *>
608 if key=26 then
609 begin <* screen type *>
610 type:=0;
611 if not read_nr(i) then
612 write_mess(11,false);
613 while (i>=0) do
614 begin
615 if i>23 then
616 write_mess(11,false);
617 type:=type+(1 shift (23-i));
618 if not read_nr(i) then
619 write_mess(11,false);
620 end;
621 buf.entry(2):=type;
622 end;
623 if (key>=27) and (key<=34) then
624 begin <* 'send by' værdier *>
625 boolean array field baf;
626 baf:=0;
627 if not read_nr(i) or i>255 or i<0 then
628 write_mess(11,false);
629 buf.entry.baf(key-22):=if i>0 then
630 false add i
631 else
632 false;
633 end;
634 if (key>=44) and (key<=49) then
635 begin <* et tegns værdier *>
636 boolean array field baf;
637 baf:=0;
638 if not read_nr(i) or i>255 or i<0 then
639 write_mess(11,false);
640 buf.entry.baf(key+7):=if i>0 then
641 false add i
642 else
643 false;
644 end;
645 if (key>=35) and (key<=42) then
646 begin <* 6 tegns sekevnser *>
647 if not read_nr(i) or i>255 or i<0 then
648 write_mess(11,false);
649 first:=1;
650 laf:=case (key-34) of
651 (12,16,20,24,28,32,36,40);
652 buf.entry.laf(1):=0;
653 while (i<>-1) and (first<=6) do
654 begin
655 put_ch(buf.entry.laf,first,i,1);
656 if first<=6 then
657 begin
658 if not read_nr(i) or i>255 or i<-1 then
659 write_mess(11,false);
660 end;
661 end;
662 laf:=0;
663 end;
664 if key=43 then
665 begin <* cursor sekvens *>
666 if not read_nr(i) or i>255 or i<0 then
667 write_mess(11,false);
668 first:=1;
669 laf:=44;
670 buf.entry.laf(1):=0;
671 while (i<>-1) and (first<=9) do
672 begin
673 put_ch(buf.entry.laf,first,i,1);
674 if first<=9 then
675 begin
676 if not read_nr(i) or i>255 or i<-1 then
677 write_mess(11,false);
678 end;
679 end;
680 laf:=0;
681 end;
682 if key=50 then
683 begin <* initialiserings sekvens *>
684 laf:=56;
685 put_ch(buf.entry.laf,1,0,75);
686 if not read_nr(i) or i>255 or i<0 then
687 write_mess(11,false);
688 first:=1;
689 while (i<>-1) and (first<=75) do
690 begin
691 put_ch(buf.entry.laf,first,i,1);
692 if first<=75 then
693 begin
694 if not read_nr(i) or i>255 or i<-1 then
695 write_mess(11,false);
696 end;
697 end;
698 laf:=0;
699 end;
700 if key=20 then
701 begin <* free text *>
702 laf:=106;
703 read_text(buf.entry.laf,30);
704 laf:=0;
705 end;
706 next_line;
707 key:=read_start_key;
708 end;
709 if exist then
710 send_modify_mess(140,3,1,result)
711 else
712 send_modify_mess(140,3,2,result);
713 if result<>0 then
714 begin
715 if result=1 then
716 write_mess(1,true)
717 else
718 write_mess(result,false);
719 end
720 else
721 if exist then
722 write_mess(3,true)
723 else
724 write_mess(2,true);
725 end
726 else
727 write_mess(result,false);
728 end
729 else
730 write_mess(8,false);
731 end;
732 end;
733
733 procedure get_userid;
734 <*-------------------------------------------------------------------*>
735 <* Set user id og password i de globale variable user_id og password *>
736 <* Id og password hentes fra terminalen tilknyttet prim. output *>
737 <*-------------------------------------------------------------------*>
738 begin
739 long array term_name(1:2);
740 integer i;
741 integer array ia(1:20);
742
742 system(7,0,term_name);
743 open(buf,0,term_name,0);
744 close(buf,false);
745 getzone6(buf,ia);
746 i:=ia(19);
747 getshare6(buf,ia,1);
748 ia(4):=131 shift 12;
749 ia(5):=i+1;
750 ia(6):=i+11;
751 ia(7):=0;
752 setshare6(buf,ia,1);
753 if monitor(16,buf,1,ia)=0 then
754 write_mess(5,false);
755 if monitor(18,buf,1,ia)<>1 then
756 write_mess(10,false);
757 if ia(1)<>0 then
758 write_mess(10,false);
759 for i:=1,2,3,4 do
760 user_id(i):=buf.iaf(i);
761 password:=buf.laf(3);
762 end;
763
763 procedure write_mess(nr,cont);
764 <*-------------------------------------------*>
765 <* Udskriv meddelelse på current output *>
766 <*-------------------------------------------*>
767 integer nr;
768 boolean cont;
769 begin
770 if not cont then
771 write(out,<: error<10>***:>,prog_name.laf,<: :>);
772 if nr=13 then
773 nr:=9;
774 if nr>13 then
775 write(out,<:internal :>,<<dd>,nr)
776 else
777 write(out,case nr of (
778 <:in use:>,<:inserted:>,<:updated:>,<:no privilege:>,
779 <:claims:>,<:catalog full:>,<:update conflict:>,
780 <:unknown field name:>,<:not allowed:>,<:no system:>,
781 <:illegal number:>,<:illegal name:>));
782 if nr=11 or nr=12 or nr=8 or nr=1 or nr=6 or nr=7 then
783 write(out,<: at line :>,<<dd>,line_nr);
784 write(out,<:<10>:>);
785 setposition(out,0,0);
786 if (not cont) or nr>13 then
787 goto stop;
788 end;
789
789 procedure set_buf_zone;
790 <*-------------------------------------------*>
791 <* Sæt zonen buf klar til message til tas *>
792 <*-------------------------------------------*>
793 begin
794 open(buf,0,<:tas:>,0);
795 close(buf,false);
796 end;
797
797 procedure send_modify_mess(size,mode,func,result);
798 <*--------------------------------------------------------------*>
799 <* Send modify message til tas. Repeter hvis process stoppes *>
800 <* Message sendes via zonen buf *>
801 <* *>
802 <* size (call) : Antal hw der skal sendes/modtages i buf *>
803 <* mode (call) : 1=user, 2=terminal, 3=type *>
804 <* func (call) : 0=get, 1=modify, 2=set new, 3=delete *>
805 <* result (ret) : Resultat fra message, 0=OK *>
806 <*--------------------------------------------------------------*>
807 integer size,mode,func,result;
808 begin
809 integer array share(1:12),zone_ia(1:20);
810 boolean send;
811 integer i;
812
812 send:=false;
813 while not send do
814 begin
815 getshare6(buf,share,1);
816 getzone6(buf,zone_ia);
817 share(1):=0;
818 share(4):=(11 shift 12)+mode;
819 share(5):=zone_ia(19)+1;
820 share(6):=share(5)+size-2;
821 share(7):=func;
822 setshare6(buf,share,1);
823 for i:=1 step 1 until 4 do
824 buf.iaf(i):=user_id(i);
825 buf.iaf(5):=password shift (-24);
826 buf.iaf(6):=password extract 24;
827 if monitor(16,buf,1,share)=0 then
828 write_mess(5,false);
829 if monitor(18,buf,1,share)<>1 then
830 write_mess(10,false);
831 result:=share(1);
832 if result<>8 then
833 send:=true;
834 end;
835 end;
836
836 <* Hoved program *>
837 trapmode:=1 shift 10;
838 raf:=laf:=iaf:=baf:=0;
839 line_nr:=0;
840 mcl_bases(1):=mcl_bases(2):=0;
841 for i:=0 step 1 until 255 do
842 conv(i):=i;
843 if system(4,1,prog_name.raf)<>(6 shift 12 + 10) then
844 system(4,0,prog_name.raf);
845 init_keywords;
846 get_userid;
847 set_buf_zone;
848 set_entry;
849 stop:
850 end;\f
algol end 78
*head ▶7f◀1
\f
tasgen 1987.05.14 11.41
*algol ltctxt connect.no list.yes
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 73
*o c
▶EOF◀