|
|
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: 12288 (0x3000)
Types: TextFile
Names: »mvmcllist «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦39138f30b⟧
└─⟦this⟧ »mvmcllist «
*movemcl=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 48
*o c
▶EOF◀