|
|
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: 122112 (0x1dd00)
Types: TextFile
Names: »htradio «
└─⟦cde9d517b⟧ Bits:30007477 RC8000 Backup tape fra HT's bus-radio system
└─⟦6a563b143⟧
└─⟦this⟧ »htradio «
radio.
:1: radio: parametererklæringer
\f
message procedure radio_parametererklæringer side 1 - 810524/hko;
integer
radio_giveup,
opkaldskø_postlængde,
kanal_beskr_længde,
radio_op_længde,
radio_pulje_størrelse;
:2: radio: parameterinitialisering
\f
message procedure radio_parameterinitialisering side 1 - 810601/hko;
radio_giveup:= 1 shift 21 + 1 shift 9;
opkaldskø_postlængde:= 12;
kanal_beskr_længde:= 16;
radio_op_længde:= 30*2;
radio_pulje_størrelse:=1 +max_antal_operatører;
:3: radio: claiming
\f
message procedure radio_claiming side 1 - 810526/hko;
max_coru:= max_coru
+1 <* hovedmodul radio *>
+1 <* opkaldskø_meddelelse *>
+1 <* radio_adm *>
+max_antal_operatører <* radio *>
+2 <* radio_input( fr/rf ) *>
+2; <* radio ind/-ud*>
max_semch:= max_semch
+1 <* cs_rad *>
+max_antal_operatører <* cs_radio *>
+1 <* cs_radio_pulje *>
+1 <* cs_radio_kø *>
+1 <* cs_radio_medd *>
+1 <* cs_radio_adm *>
+2 <* cs_radio_input(fr/rf) *>
+1 <* cs_rad_ind_input *>
+1 <* cs_rad_ud_input *>
+2 ; <* cs_radio_ind/-ud *>
max_sem:=
+1 <* bs_mobil_opkald *>
+1 <* bs_opkaldskø_adgang *>
+max_antal_kanaler <* ss_radio_aktiver *>
+max_antal_kanaler <* ss_samtale_nedlagt *>
+max_antal_operatører <* bs_operatør_udkoblet *>
+max_sem;
max_op:=
+ radio_pulje_størrelse <* radio_pulje_operationer *>
+ 1 <* radio_medd *>
+ 1 <* radio_adm *>
+ max_antal_operatører <* operationer for radio *>
+ 2 <* radio_input *>
+ max_op;
max_netto_op:=
+ radio_pulje_størrelse * 60 <* radio_pulje_operationer *>
+ data + 6 <* radio_medd *>
+ max_antal_operatører <* operationer for radio *>
* (data + radio_op_længde)
+ data + radio_op_længde <* operation for radio_adm *>
+ 2 * (data + 64) <* operationer for radio_input *>
+ max_netto_op;
:4: radio erklæringer
\f
message procedure radio_erklæringer side 1 - 820304/hko;
zone z_fr_in(14,1,rad_in_fejl),
z_rf_in(14,1,rad_in_fejl),
z_fr_out(14,1,rad_out_fejl),
z_rf_out(14,1,rad_out_fejl);
integer array
radiofejl,
ss_samtale_nedlagt,
ss_radio_aktiver(1:max_antal_kanaler),
bs_operatør_udkoblet,
cs_radio(1:max_antal_operatører),
cs_radio_input(1:2),
radio_garagetabel(0:max_antal_garager),
radio_linietabel(1:max_linienr//6+1),
radio_områdetabel(0:max_antal_områder),
opkaldskø(opkaldskø_postlængde//2+1:
(max_antal_mobilopkald+1)*opkaldskø_postlængde//2),
kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2);
integer field
kanal_tilstand,
kanal_id1,
kanal_id2,
kanal_spec,
kanal_mon_maske,
kanal_alarm,
kanal_alt_id1,
kanal_alt_id2;
integer
cs_rad,
cs_radio_medd,
cs_radio_adm,
cs_radio_ind,
cs_radio_ud,
cs_rad_ind_input,
cs_rad_ud_input,
cs_radio_pulje,
cs_radio_kø,
bs_mobil_opkald,
bs_opkaldskø_adgang,
opkaldskø_ledige,
nødopkald_brugt,
første_frie_opkald,
første_opkald,
sidste_opkald,
første_nødopkald,
sidste_nødopkald,
samtalekø,
hookoff_maske,
kanalflag,
optaget_flag,
opkalds_flag;
boolean
mobil_opkald_aktiveret;
\f
message procedure læs_hex_ciffer side 1 - 810428/hko;
integer
procedure læs_hex_ciffer(tabel,linie,op);
value linie;
integer array tabel;
integer linie,op;
begin
integer i,j;
i:=(if linie>=0 then linie+6 else linie)//6;
j:=((i-1)*6-linie)*4;
læs_hex_ciffer:=op:=tabel(i) shift j extract 4;
end læs_hex_ciffer;
message procedure sæt_hex_ciffer side 1 - 810505/hko;
integer
procedure sæt_hex_ciffer(tabel,linie,op);
value linie;
integer array tabel;
integer linie,op;
begin
integer i,j;
i:=(if linie>=0 then linie+6 else linie)//6;
j:=(linie-(i-1)*6)*4;
sæt_hex_ciffer:= tabel(i) shift (-j) extract 4;
tabel(i):=tabel(i) shift (-4-j) shift 4 add (op extract 4)
shift j add (tabel(i) extract j);
end sæt_hex_ciffer;
message procedure hex_to_dec side 1 - 900108/cl;
integer procedure hex_to_dec(hex);
value hex;
integer hex;
begin
hex_to_dec:= if 'A'<=hex and hex<='F' then (hex-'A'+10)
else (hex-'0');
end;
message procedure dec_to_hex side 1 - 900108/cl;
integer procedure dec_to_hex(dec);
value dec;
integer dec;
begin
dec_to_hex:= if 0<=dec and dec<=9 then ('0'+dec)
else ('A'+dec-10);
end;
message procedure rad_out_fejl side 1 - 820304/hko;
procedure rad_out_fejl(z,s,b);
value s;
zone z;
integer s,b;
begin
integer array field iaf;
integer pos,tegn,max,i;
integer array ia(1:20);
long array field laf;
disable begin
laf:= iaf:= 2;
tegn:= 1;
getzone6(z,ia);
max:= ia(16)//2*3;
if s = 1 shift 21 + 2 then
begin
z(1):= real<:<'em'>:>;
b:= 2;
end
else
begin
pos:= 0;
for i:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (i-1)*kanalbeskr_længde;
if sæt_hex_ciffer(kanaltab.iaf,4,15)<>15 then pos:= pos+1;
if pos>0 then
begin
kanal_flag:= -1 extract max_antal_operatører shift 1;
signalbin(bs_mobilopkald);
fejlreaktion(17<*y.e.status*>,s,string ia.laf(increase(tegn)),
1 shift 12<*binært*> +1<*fortsæt*>);
end;
end;
end;
end;
end;
\f
message procedure rad_in_fejl side 1 - 810601/hko;
procedure rad_in_fejl(z,s,b);
value s;
zone z;
integer s,b;
begin
integer array field iaf;
integer pos,tegn,max,i;
integer array ia(1:20);
long array field laf;
disable begin
laf:= iaf:= 2;
i:= 1;
getzone6(z,ia);
max:= ia(16)//2*3;
if s shift (-21) extract 1 = 0
and s shift(-19) extract 1 = 0 then
begin
if b = 0 then
begin
z(1):= real<:!:>;
b:= 2;
end;
end;
\f
message procedure rad_in_fejl side 2 - 820304/hko;
if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then
begin
fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)),
1 shift 12<*binær*> +1<*fortsæt*>);
end
else
if s shift (-19) extract 1 = 1 then
begin
z(1):= real<:!<'nl'>:>;
b:= 2;
end
else
if s = 1 shift 21 +2 or s shift(-19) extract 1 =1 then
begin
<*
if b = 0 then
begin
*>
z(1):= real <:<'em'>:>;
b:= 2;
<*
end
else
begin
tegn:= -1;
iaf:= 0;
pos:= b//2*3-2;
while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn);
skriv_tegn(z.iaf,pos,'?');
if pos<=max then
afslut_text(z.iaf,pos);
b:= (pos-1)//3*2;
end;
*>
end;<* s=1 shift 21+2 *>
end;
end rad_in_fejl;
\f
message procedure skriv_kanal_tab side 1 - 820304/hko;
procedure skriv_kanal_tab(z);
zone z;
begin
integer array field ref;
integer i,j,t,op,id1,id2;
write(z,"ff",1,"nl",1,<:
******** kanal-beskrivelser *******
m m n
o o ø
nr operatør tilst - n b d - type id1 id2 ttmm/ant -ej.op:>,
"nl",1);
for i:=1 step 1 until max_antal_kanaler do
begin
ref:=(i-1)*kanal_beskr_længde;
t:=kanal_tab.ref(1);
id1:=kanal_tab.ref(2);
id2:=kanal_tab.ref(3);
write(z,"nl",1,"sp",4,
<<-d>,i,<<-ddddd>,t shift(-20),t shift(-16) extract 4,
t shift(-6) extract 10,"sp",3);
for j:=5 step -1 until 2 do
write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1);
write(z,"sp",1,case t extract 2 +1 of
(<: - :>,<:OPK :>,<:MEDD:>,<:GNM :>),
"sp",4);
skriv_id(z,id1,9);
skriv_id(z,id2,9);
t:=kanal_tab.ref(4);
write(z,"sp",1,<<-dddd>,t,t shift(-16),-(t extract 8));
end;
write(z,"nl",2,<:kanalflag::>);
outintbits(z,kanalflag);
write(z,"nl",2);
end skriv_kanal_tab;
\f
message procedure skriv_opkaldskø side 1 - 820301/hko;
procedure skriv_opkaldskø(z);
zone z;
begin
integer i,bogst,løb,j;
integer array field ref;
write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2,
<: ref næste foreg X bus linie/løb tid - op type :>,"nl",1);
for i:= 1 step 1 until max_antal_mobilopkald do
begin
ref:= i*opkaldskø_postlængde;
j:= opkaldskø.ref(1);
write(z,<< ddd>,ref,<< ddddd>,j extract 12,j shift (-12));
j:= opkaldskø.ref(2);
write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1);
skriv_id(z,j extract 23,9);
j:= opkaldskø.ref(3);
skriv_id(z,j,7);
j:= opkaldskø.ref(4);
write(z,<< zd.dd>,(j shift (-12))/100.0,
<< zd>,j shift (-8) extract 4,j shift (-4) extract 4);
j:= j extract 4;
if j = 1 or j = 2 then
write(z,if j=1 then <: normal:> else <: nød :>)
else write(z,<<dddd>,j,"sp",3);
outchar(z,'nl');
end;
write(z,"nl",1,<<z>,
<:første_frie_opkald=:>,første_frie_opkald,"nl",1,
<:første_opkald=:>,første_opkald,"nl",1,
<:sidste_opkald=:>,sidste_opkald,"nl",1,
<:første_nødopkald=:>,første_nødopkald,"nl",1,
<:sidste_nødopkald=:>,sidste_nødopkald,"nl",1,
<:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1,
<:nødopkald_brugt= :>,nødopkald_brugt,"nl",1,
"nl",1,<:opkaldsflag::>);
outintbits(z,opkalds_flag);
write(z,"nl",2);
end skriv_opkaldskø;
\f
message procedure skriv_radio_linie_tabel side 1 - 820301/hko;
procedure skriv_radio_linie_tabel(z);
zone z;
begin
integer i,j,k;
write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2);
k:= 0;
for i:= 1 step 1 until max_linienr do
begin
læs_hex_ciffer(radio_linie_tabel,i,j);
if j > 0 then
begin
k:= k +1;
write(z,<<dddd>,i,":",1,<<z_>,j,"sp",if k mod 5=0 then 0 else 4,
"nl",if k mod 5=0 then 1 else 0);
end;
end;
write(z,"nl",if k mod 5=0 then 1 else 2);
end skriv_radio_linie_tabel;
procedure skriv_radio_garagetabel(z);
zone z;
begin
integer i;
write(z,"nl",2,"*",5,<: garagefordeling for operatører :>,"*",5,"nl",2);
for i:= 1 step 1 until max_antal_garager do
begin
laf:= (i-1)*4;
if radio_garagetabel(i)<>0 then
write(z,<<dd>,i,<:. :>,garagenavn.laf,<:: :>,
radio_garagetabel(i),"nl",1);
end;
end skriv_radio_garagetabel;
procedure skriv_radio_områdetabel(z);
zone z;
begin
integer i;
write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2);
for i:= 1 step 1 until max_antal_områder do
begin
laf:= (i-1)*4;
if radio_områdetabel(i)<>0 then
write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>,
radio_områdetabel(i),"nl",1);
end;
end skriv_radio_områdetabel;
\f
message procedure h_radio side 1 - 810520/hko;
<* hovedmodulkorutine for radiokanaler *>
procedure h_radio;
begin
integer array field op_ref;
integer k,dest_sem;
procedure skriv_hradio(z,omfang);
value omfang;
zone z;
integer omfang;
begin integer i;
disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>);
write(z,"sp",26-i);
if omfang >0 then
disable begin integer x;
trap(slut);
write(z,"nl",1,
<: op_ref: :>,op_ref,"nl",1,
<: k: :>,k,"nl",1,
<: dest_sem: :>,dest_sem,"nl",1,
<::>);
skriv_coru(z,coru_no(400));
slut:
end;
end skriv_hradio;
trap(hrad_trap);
stack_claim(if cm_test then 198 else 146);
<*+2*> if testbit32 and overvåget or testbit28 then
skriv_hradio(out,0);
<*-2*>
\f
message procedure h_radio side 2 - 820304/hko;
repeat
wait_ch(cs_rad,op_ref,true,-1);
<*+2*>if testbit33 and overvåget then
disable begin
skriv_h_radio(out,0);
write(out,<: operation modtaget:>);
skriv_op(out,op_ref);
end;
<*-2*>
<*+4*>
if (d.op_ref.optype and
(gen_optype or rad_optype or vt_optype)) extract 12 =0
then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1);
<*-4*>
k:=d.op_ref.op_kode extract 12;
dest_sem:=
if k > 0 and k < 7
or k=11 or k=12 or k=19
or k = 70 or (72<=k and k<=74) or k = 77
<*IN,O/EK,O/IN,R/EK,R/FO,L/FO,G/ST/EK,K/IN,K/RA,I/FO,O*>
then cs_radio_adm
else if k=41 <* radiokommando fra operatør *>
then cs_radio(d.opref.data(1)) else -1;
<*+4*>
if dest_sem<1 then
begin
if dest_sem<0 then
fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1);
d.op_ref.resultat:= if dest_sem=0 then 45 else 31;
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
end
else
<*-4*>
begin <* operationskode ok *>
signal_ch(dest_sem,op_ref,d.op_ref.optype);
end;
until false;
hrad_trap:
disable skriv_hradio(zbillede,1);
end h_radio;
\f
message procedure radio side 1 - 820301/hko;
procedure radio(operatør,op);
value operatør,op;
integer operatør,op;
begin
integer array field opref, rad_op, vt_op, opref1, iaf, iaf1;
integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3,
sig,omr,type,bus,ll,ttmm,vogn,garage;
integer array felt,værdi(1:8);
boolean byt,nød,frigiv_samtale;
real kl;
real field rf;
procedure skriv_radio(z,omfang);
value omfang;
zone z;
integer omfang;
begin integer i1;
disable i1:= write(z,"nl",1,<:+++ radio:>);
write(z,"sp",26-i1);
if omfang > 0 then
disable begin real x;
trap(slut);
\f
message procedure radio side 1a- 820301/hko;
write(z,"nl",1,
<: op_ref: :>,op_ref,"nl",1,
<: opref1: :>,opref1,"nl",1,
<: iaf: :>,iaf,"nl",1,
<: iaf1: :>,iaf1,"nl",1,
<: vt-op: :>,vt_op,"nl",1,
<: rad-op: :>,rad_op,"nl",1,
<: rf: :>,rf,"nl",1,
<: nr: :>,nr,"nl",1,
<: i: :>,i,"nl",1,
<: j: :>,j,"nl",1,
<: k: :>,k,"nl",1,
<: operatør: :>,operatør,"nl",1,
<: tilst: :>,tilst,"nl",1,
<: res: :>,res,"nl",1,
<: opgave: :>,opgave,"nl",1,
<: type: :>,type,"nl",1,
<: bus: :>,bus,"nl",1,
<: ll: :>,ll,"nl",1,
<: ttmm: :>,ttmm,"nl",1,
<: vogn: :>,vogn,"nl",1,
<: tekn-inf: :>,tekn_inf,"nl",1,
<: vtop2: :>,vtop2,"nl",1,
<: vtop3: :>,vtop3,"nl",1,
<: sig: :>,sig,"nl",1,
<: omr: :>,omr,"nl",1,
<: garage: :>,garage,"nl",1,
<<-dddddd'-dd>,
<: kl: :>,kl,systime(4,kl,x),x,"nl",1,
<:samtalekø=:>);
out_int_bits(z,samtalekø);
skriv_coru(z,coru_no(410+operatør));
slut:
end;<*disable*>
end skriv_radio;
\f
message procedure udtag_opkald side 1 - 820301/hko;
integer
procedure udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
value vogn, operatør;
integer vogn,type,operatør,bus,garage,omr,sig,ll,ttmm;
begin
integer res,tilst,nr,i,j,t,o,b,l,tm;
integer array field vt_op,ref,næste,forrige;
l:= b:= tm:= t:= 0;
garage:= sig:= 0;
res:= -1;
<*V*> wait(bs_opkaldskø_adgang);
ref:= første_nødopkald;
if ref <> 0 then
t:= 2
else
begin
ref:= første_opkald;
t:= if ref = 0 then 0 else 1;
end;
if t = 0 then res:= +19 <*kø er tom*> else
if vogn=0 and omr=0 then
begin
while ref <> 0 and res = -1 do
begin
nr:= opkaldskø.ref(4) shift (-4) extract 4;
if nr*(operatør_maske shift(-nr) extract 1) = 0 or nr = operatør then
res:= 0
else
begin
ref:= opkaldskø.ref(1) extract 12;
if ref = 0 and t = 2 then
begin
ref:= første_opkald;
t:= if ref = 0 then 0 else 1;
end else if ref = 0 then t:= 0;
end;
end; <*while*>
\f
message procedure udtag_opkald side 2 - 820304/hko;
if ref <> 0 then
begin
b:= opkaldskø.ref(2);
<*+4*> if b < 0 then
fejlreaktion(19<*mobilopkald*>,bus extract 14,
<:nødopkald(besvaret/ej meldt):>,1);
<*-4*>
garage:=b shift(-14) extract 8;
b:= b extract 14;
l:= opkaldskø.ref(3);
tm:= opkaldskø.ref(4);
o:= tm shift(-4) extract 4;
tm:= tm shift(-12);
omr:= opkaldskø.ref(5) extract 8;
sig:= opkaldskø.ref(5) shift (-20);
end
else res:=19; <* kø er tom *>
end <*vogn=0 and omr=0 *>
else
begin
<* vogn<>0 or omr<>0 *>
i:= 0; tilst:= -1;
if vogn shift(-22) = 1 then
begin
i:= find_busnr(vogn,nr,garage,tilst);
l:= vogn;
end
else
if vogn<>0 and (omr=0 or omr>2) then
begin
o:= 0;
i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
if i=(-2) then
begin
o:= omr;
i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
end;
nr:= vogn extract 14;
end
else nr:= vogn extract 14;
if i<0 then ref:= 0;
while ref <> 0 and res = -1 do
begin
i:= opkaldskø.ref(2) extract 14;
j:= opkaldskø.ref(4) shift(-4) extract 4; <*operatør*>
if <*(j*operatørmaske shift(-nr) extract 1 = 0
or j = operatør) and*>
nr = i and
(omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0
else
begin
ref:= opkaldskø.ref(1) extract 12;
if ref = 0 and t = 2 then
begin
ref:= første_opkald;
t:= if ref = 0 then 0 else 1;
end else if ref = 0 then t:= 0;
end;
end; <*while*>
\f
message procedure udtag_opkald side 3 - 810603/hko;
if ref <> 0 then
begin
b:= nr;
tm:= opkaldskø.ref(4);
o:= tm shift(-4) extract 4;
tm:= tm shift(-12);
omr:= opkaldskø.ref(5) extract 4;
sig:= opkaldskø.ref(5) shift (-20);
<*+4*> if tilst <> -1 then
fejlreaktion(3<*prg.fejl*>,tilst,
<:vogntabel_tilstand for vogn i kø:>,0);
<*-4*>
end;
end;
if ref <> 0 then
begin
næste:= opkaldskø.ref(1);
forrige:= næste shift(-12);
næste:= næste extract 12;
if forrige <> 0 then
opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12
+ næste
else if t = 1 then første_opkald:= næste
else <*if t = 2 then*> første_nødopkald:= næste;
if næste <> 0 then
opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
+ forrige shift 12
else if t = 1 then sidste_opkald:= forrige
else <* if t = 2 then*> sidste_nødopkald:= forrige;
opkaldskø.ref(1):=første_frie_opkald;
første_frie_opkald:=ref;
opkaldskø_ledige:=opkaldskø_ledige + 1;
if t=2 then nødopkald_brugt:=nødopkald_brugt - 1;
if -,læsbit_i(operatør_maske,o) or o = 0 then
opkaldsflag:= -1 extract max_antal_operatører shift 1
else
begin
sætbit_i(opkaldsflag,operatør,1);
sætbit_i(opkaldsflag,o,1);
end;
signal_bin(bs_mobil_opkald);
end;
\f
message procedure udtag_opkald side 4 - 810531/hko;
signal_bin(bs_opkaldskø_adgang);
bus:= b;
type:= t;
ll:= l;
ttmm:= tm;
udtag_opkald:= res;
end udtag opkald;
\f
message procedure frigiv_kanal side 1 - 810603/hko;
procedure frigiv_kanal(nr);
value nr;
integer nr;
begin
integer id1, id2, omr, i;
integer array field iaf, vt_op;
iaf:= (nr-1)*kanal_beskrlængde;
id1:= kanal_tab.iaf.kanal_id1;
id2:= kanal_tab.iaf.kanal_id2;
omr:= kanal_til_omr(nr);
if id1 <> 0 then
wait(ss_samtale_nedlagt(nr));
if id1 shift (-22) < 3 and omr > 2 then
begin
<*V*> waitch(cs_vt_adgang,vt_op,true,-1);
start_operation(vt_op,410+operatør,cs_radio(operatør),
if id1 shift (-22) = 2 then 18 else 17);
d.vt_op.data(1):= id1;
d.vt_op.data(2):= omr;
signalch(cs_vt,vt_op,vt_optype or genoptype);
<*V*> waitch(cs_radio(operatør),vt_op,vt_optype,-1);
signalch(cs_vt_adgang,vt_op,true);
end;
if id2 <> 0 and id2 shift(-20) <> 12 then
wait(ss_samtale_nedlagt(nr));
if id2 shift (-22) < 3 and omr > 2 then
begin
<*V*> waitch(cs_vt_adgang,vt_op,true,-1);
start_operation(vt_op,410+operatør,cs_radio(operatør),
if id2 shift (-22) = 2 then 18 else 17);
d.vt_op.data(1):= id2;
d.vt_op.data(2):= omr;
signalch(cs_vt,vt_op,vt_optype or genoptype);
<*V*> waitch(cs_radio(operatør),vt_op,vt_optype,-1);
signalch(cs_vt_adgang,vt_op,true);
end;
kanaltab.iaf.kanal_id1:= kanaltab.iaf.kanal_id2:=
kanaltab.iaf.kanal_alt_id1:= kanaltab.iaf.kanal_alt_id2:= 0;
kanal_tab.iaf.kanaltilstand:= kanal_tab.iaf.kanaltilstand
shift (-12) extract 8 shift 12;
repeat
inspect(ss_samtale_nedlagt(nr),i);
if i>0 then wait(ss_samtale_nedlagt(nr));
until i=0;
end frigiv_kanal;
\f
message procedure hookoff side 1 - 880901/cl;
integer procedure hookoff(operatør,op,retursem,flash);
value operatør,op,retursem,flash;
integer operatør,op,retursem;
boolean flash;
begin
integer array field opref;
opref:= op;
start_operation(opref,410+operatør,retursem,'A' shift 12 + 60);
d.opref.data(1):= operatør;
d.opref.data(2):= if flash then 2 else 1;
signalch(cs_radio_ud,opref,rad_optype);
<*V*> waitch(retursem,opref,rad_optype,-1);
hookoff:= d.opref.resultat;
end;
\f
message procedure hookon side 1 - 880901/cl;
integer procedure hookon(operatør,op,retursem);
value operatør,op,retursem;
integer operatør,op,retursem;
begin
integer i,res;
integer array field opref;
if læsbiti(hookoff_maske,operatør) then
begin
inspect(bs_operatør_udkoblet(operatør),i);
if i<=0 then
begin
opref:= op;
start_operation(opref,410+operatør,retursem,'D' shift 12 + 60);
d.opref.data(1):= operatør;
signalch(cs_radio_ud,opref,rad_optype);
<*V*> waitch(retursem,opref,rad_optype,-1);
res:= d.opref.resultat;
end
else
res:= 0;
if res=0 then wait(bs_operatør_udkoblet(operatør));
end
else
res:= 0;
sætbiti(hookoff_maske,operatør,0);
hookon:= res;
end;
\f
message procedure radio side 2 - 820304/hko;
rad_op:= op;
trap(radio_trap);
stack_claim((if cm_test then 200 else 150) +50);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio(out,0);
<*-2*>
repeat
waitch(cs_radio(operatør),opref,true,-1);
<*+2*>
if testbit33 and overvåget then
disable begin
skriv_radio(out,0);
write(out,<: operation modtaget på cs:>,<<d>,cs_radio(operatør));
skriv_op(out,opref);
end;
<*-2*>
k:= d.op_ref.opkode extract 12;
opgave:= d.opref.opkode shift (-12);
operatør:= d.op_ref.data(1);
<*+4*> if (d.op_ref.optype and (gen_optype or io_optype or op_optype))
extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
<:radio:>,0);
<*-4*>
\f
message procedure radio side 3 - 880930/cl;
if k=41 <*radiokommando fra operatør*> then
begin
vogn:= d.opref.data(2);
res:= -1;
for i:= 7 step 1 until 12 do d.opref.data(i):= 0;
sig:= 0; omr:= d.opref.data(3) extract 8;
if opgave=1 or opgave=9 then
begin <* opkald til enkelt vogn (CHF) *>
res:= udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
if res=19 and (vogn<>0 or d.opref.data(3)=2) then res:= -1;
<* ok at kø er tom når vogn er angivet eller VHF *>
d.opref.data(11):= if res=0 then
(if ll<>0 then ll else bus) else vogn;
if type=2 <*nød*> then
begin
waitch(cs_radio_pulje,opref1,true,-1);
start_operation(opref1,410+operatør,cs_radio_pulje,46);
d.opref1.data(1):= if ll<>0 then ll else bus;
systime(5,0,kl);
d.opref1.data(2):= entier(kl/100.0);
d.opref1.data(3):= omr;
signalch(cs_io,opref1,gen_optype or rad_optype);
end
end; <* enkeltvogn (CHF) *>
<* check enkeltvogn for ledig *>
if res<=0 and omr=2<*VHF*> and bus=0 and
(opgave=1 or opgave=9) then
begin
for i:= 1 step 1 until max_antal_kanaler do
if kanal_til_omr(i)=2 then nr:= i;
iaf:= (nr-1)*kanalbeskrlængde;
if kanaltab.iaf(1) extract 2<>0 and
kanaltab.iaf.kanal_id1 extract 20 = 10000
then res:= 52;
end;
if res < 0 and (d.opref.data(3) > 2 <* ej TLF, VHF *> or
d.opref.data(3)=0 <*std. omr*>) and
(opgave <= 2 <* OP elller ME *> or opgave = 9 <* OP,L *>)
then
begin
type:= ttmm:= 0; omr:= 0; sig:= 0;
if vogn shift (-22) = 1 then
begin
find_busnr(vogn,bus,garage,res);
ll:= vogn;
end
else
if vogn shift (-22) = 0 then
begin
søg_omr_bus(vogn,ll,garage,omr,sig,res);
bus:= vogn;
end
else
fejlreaktion(31,vogn,<:vognident i enkeltvognsopk.:>,0);
res:= if res=(-1) then 18 <* i kø *> else
(if res<>0 then 14 <*opt*> else 0);
end
else
if res<0 and (d.opref.data(3)=1 or d.opref.data(3)=2) and
opgave <= 2 then
begin
bus:= vogn; garage:= type:= ttmm:= 0;
res:= 0; omr:= 0; sig:= 0;
end
else
if opgave>1 and opgave<>9 then
type:= ttmm:= res:= 0;
\f
message procedure radio side 4 - 880930/cl;
if res=0 and (opgave<=4 or opgave=9) and
(omr<1 or 2<omr) and
(d.opref.data(3)>2 or d.opref.data(3)=0) then
begin <* reserver i vogntabel *>
waitch(cs_vt_adgang,vt_op,true,-1);
start_operation(vt_op,410+operatør,cs_radio(operatør),
if opgave <=2 or opgave=9 then 15 else 16);
d.vt_op.data(1):= if opgave<=2 or opgave=9 then
(if vogn=0 then garage shift 14 + bus else
if ll<>0 then ll else garage shift 14 + bus)
else vogn <*gruppeid*>;
d.vt_op.data(4):= if d.opref.data(3)<>0 then
d.opref.data(3) extract 8
else omr extract 8;
signalch(cs_vt,vt_op,gen_optype or rad_optype);
<*V*> waitch(cs_radio(operatør),vt_op,rad_optype,-1);
res:= d.vt_op.resultat;
if res=3 then res:= 0;
vtop2:= d.vt_op.data(2);
vtop3:= d.vt_op.data(3);
tekn_inf:= d.vt_op.data(4);
signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
end;
if res<>0 then
begin
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
if opgave <= 9 then
begin <* opkald *>
res:= hookoff(operatør,rad_op,cs_radio(operatør),
opgave<>9 and d.opref.data(6)<>0);
if res<>0 then
goto returner_op;
if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *>
begin
start_operation(rad_op,410+operatør,cs_radio(operatør),
'H' shift 12 + 60);
d.rad_op.data(1):= operatør;
d.rad_op.data(2):= 'D';
d.rad_op.data(3):= 6; <* rear *>
d.rad_op.data(4):= 1; <* rear no *>
d.rad_op.data(5):= 0; <* disconnect *>
signalch(cs_radio_ud,rad_op,rad_optype);
<*V*> waitch(cs_radio(operatør),rad_op,rad_optype,-1);
if d.rad_op.resultat<>0 then
begin
res:= d.rad_op.resultat;
goto returner_op;
end;
<*
while optaget_flag shift (-1) <> 0 do
delay(1);
*>
end;
\f
message procedure radio side 5 - 880930/cl;
start_operation(rad_op,410+operatør,cs_radio(operatør),
'B' shift 12 + 60);
d.rad_op.data(1):= operatør;
d.rad_op.data(2):= 'D';
d.rad_op.data(3):= if opgave=9 then 3 else
(2 - (opgave extract 1)); <* højttalerkode *>
if 5<=opgave and opgave <=8 then <* ALLE KALD *>
begin
j:= 0;
for i:= 2 step 1 until max_antal_områder do
begin
if opgave > 6 or
(d.opref.data(3) shift (-20) = 15 and
læsbiti(d.opref.data(3),i)) or
(d.opref.data(3) shift (-20) = 14 and
d.opref.data(3) extract 20 = i)
then
begin
for k:= 1 step 1 until (if i=3 then 2 else 1) do
begin
j:= j+1;
d.rad_op.data(10+(j-1)*2):=
område_id(i,2) shift 12 + <* tkt, tkn *>
(if i=2<*VHF*> then 4 else k)
shift 8 + <* signal type *>
1; <* antal tno *>
d.rad_op.data(11+(j-1)*2):= 0; <* tno alle *>
end;
end;
end;
d.rad_op.data(4):= j;
d.rad_op.data(5):= 0;
end
else
if opgave>2 and opgave <= 4 then <* gruppekald *>
begin
d.rad_op.data(4):= vtop2;
d.rad_op.data(5):= vtop3;
end
else
begin <* enkeltvogn *>
if omr=0 then
begin
sig:= tekn_inf shift (-23);
omr:= if d.opref.data(3)<>0 then d.opref.data(3)
else tekn_inf extract 8;
end
else
if d.opref.data(3)<>0 then omr:= d.opref.data(3);
<* lytte-kald til nød i TCT, VHF og TLF *>
<* tvinges til alm. opkald *>
if (opgave=9) and (type=2) and (omr<=3) then
begin
d.opref.opkode:= 1 shift 12 + d.opref.opkode extract 12;
opgave:= 1;
d.radop.data(3):= 1;
end;
if omr=2 <*VHF*> then sig:= 4 else
if omr=1 <*TLF*> then sig:= 7 else
<*UHF*> sig:= sig+1;
d.rad_op.data(4):= 1;
d.rad_op.data(5):= 0;
d.rad_op.data(10):=
(område_id(omr,2) extract 12) shift 12 +
sig shift 8 +
1;
d.rad_op.data(11):= bus;
end;
\f
message procedure radio side 6 - 880930/cl;
signalch(cs_radio_ud,rad_op,rad_optype);
<*V*> waitch(cs_radio(operatør),rad_op,rad_optype,-1);
res:= d.rad_op.resultat;
d.rad_op.data(6):= 0;
for i:= 1 step 1 until max_antal_områder do
if læsbiti(d.rad_op.data(7),i) then
increase(d.rad_op.data(6));
returner_op:
if d.rad_op.data(6)=1 then
begin
for i:= 1 step 1 until max_antal_områder do
if d.rad_op.data(7) extract 20 = 1 shift i then
d.opref.data(12):= 14 shift 20 + i;
end
else
d.opref.data(12):= 15 shift 20 + d.rad_op.data(7) extract 20;
d.opref.data(7):= type;
d.opref.data(8):= garage shift 14 + bus;
d.opref.data(9):= ll;
if res=0 then
begin
d.opref.resultat:= 3;
d.opref.data(5):= d.opref.data(6);
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if læsbiti(d.rad_op.data(9),i) then j:= j+1;
if j>1 then
d.opref.data(6):= 3 shift 22 + 1 shift 20 + d.rad_op.data(9)
else
begin
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if læsbiti(d.rad_op.data(9),i) then j:= i;
d.opref.data(6):= 3 shift 22 + j;
end;
d.opref.data(7):= type;
d.opref.data(8):= garage shift 14 + bus;
d.opref.data(9):= ll;
d.opref.data(10):= d.opref.data(6);
for i:= 1 step 1 until max_antal_kanaler do
begin
if læsbiti(d.rad_op.data(9),i) then
begin
if kanal_id(i) shift (-5) extract 5 = 2 then
j:= pabx_id( kanal_id(i) extract 5 )
else
j:= radio_id( kanal_id(i) extract 5 );
if j>0 and type=0 then tæl_opkald(j,1);
iaf:= (i-1)*kanalbeskrlængde;
sæt_hex_ciffer(kanal_tab.iaf,5,operatør);
kanaltab.iaf.kanal_id2:= kanaltab.iaf.kanal_id1;
kanaltab.iaf.kanal_alt_id2:= kanaltab.iaf.kanal_alt_id1;
kanaltab.iaf.kanal_id1:=
if opgave<=2 or opgave=9 then
d.opref.data(if d.opref.data(9)<>0 then 9 else 8)
else
d.opref.data(2);
kanaltab.iaf.kanal_alt_id1:=
if opgave<=2 or opgave=9 then
d.opref.data(if d.opref.data(9)<>0 then 8 else 9)
else
0;
if kanaltab.iaf(2)=0 then kanaltab.iaf(2):= 10000;
kanaltab.iaf(4):= if opgave <= 2 or opgave = 9 then
ttmm else 0;
end;
end;
if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then
sætbiti(kanalflag,operatør,1);
\f
message procedure radio side 7 - 880930/cl;
end
else
begin
d.opref.resultat:= res;
if d.opref.data(6)=0 then
res:= hookon(operatør,rad_op,cs_radio(operatør));
<* frigiv fra vogntabel hvis reserveret *>
if (opgave<=4 or opgave=9) and
(d.opref.data(3)=0 or d.opref.data(3)>2) then
begin
waitch(cs_vt_adgang,vt_op,true,-1);
startoperation(vt_op,410+operatør,cs_radio(operatør),
if opgave<=2 or opgave=9 then 17 else 18);
d.vt_op.data(1):= if opgave<=2 or opgave=9 then
(if vogn=0 then garage shift 14 + bus else
if ll<>0 then ll else garage shift 14 + bus)
else vogn;
d.vt_op.data(4):= omr;
signalch(cs_vt,vt_op,gen_optype or vt_optype);
waitch(cs_radio(operatør),vt_op,vt_optype,-1);
signalch(cs_vt_adgang,vt_op,true);
end;
end;
signalch(d.opref.retur,opref,d.opref.optype);
\f
message procedure radio side 8 - 880930/cl;
end <* opkald *>
else
if opgave = 10 <* MONITER *> then
begin
nr:= d.opref.data(2);
if nr shift (-20) <> 12 then
fejlreaktion(3,nr,<: moniter, kanalnr:>,0);
nr:= nr extract 20;
iaf:= (nr-1)*kanalbeskrlængde;
inspect(ss_samtale_nedlagt(nr),i);
k:= if kanaltab.iaf(3) shift (-20) = 12 then
kanaltab.iaf(3) extract 20
else
if kanaltab.iaf(3)<>0 then nr else 0;
if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
if kanaltab.iaf(1) shift (-20) = operatør and
(i<>0 or j<>0) then
begin
res:= 0;
d.opref.data(5):= 12 shift 20 + k;
d.opref.data(6):= 12 shift 20 + nr;
sætbit_i(kanalflag,operatør,1);
goto radio_nedlæg;
end
else
if i<>0 or j<>0 then
res:= 49
else
if kanaltab.iaf(1) extract 2 = 0 then
res:= 49 <* ingen samtale igang *>
else
begin
res:= hookoff(operatør,rad_op,cs_radio(operatør),false);
if res=0 then
begin
start_operation(rad_op,410+operatør,cs_radio(operatør),
'B' shift 12 + 60);
d.rad_op.data(1):= operatør;
d.rad_op.data(2):= 'V';
d.rad_op.data(3):= 0;
d.rad_op.data(4):= 1;
d.rad_op.data(5):= 0;
d.rad_op.data(10):=
(kanal_id(nr) shift (-5) shift 18) +
(kanal_id(nr) extract 5 shift 12) + 0;
signalch(cs_radio_ud,rad_op,rad_optype);
<*V*> waitch(cs_radio(operatør),rad_op,rad_optype,-1);
res:= d.rad_op.resultat;
if res=0 then
begin
d.opref.data(5):= 0;
d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr;
d.opref.data(7):= kanal_tab.iaf(1) extract 12;
res:= 3;
end;
end;
end;
\f
message procedure radio side 9 - 880930/cl;
if res=3 then
begin
if kanal_tab.iaf(1) shift (-20) = operatør then
sætbiti(kanal_tab.iaf(1),5,1) <* monbit *>
else
sætbiti(kanal_tab.iaf(5),operatør,1);
d.opref.data(6):= 12 shift 20 + nr;
i:= kanal_tab.iaf(3);
if i<>0 then
begin
if i shift (-20) = 12 then
begin <* ident2 henviser til anden kanal *>
iaf1:= ((i extract 20)-1)*kanalbeskrlængde;
if kanal_tab.iaf1(1) shift (-20) = operatør then
sætbiti(kanal_tab.iaf(1),5,1)
else
sætbiti(kanal_tab.iaf(5),operatør,1);
d.opref.data(5):= 12 shift 20 + i;
end
else
d.opref.data(5):= 12 shift 20 + nr;
end
else
d.opref.data(5):= 0;
end;
if res<>3 then
begin
res:= 0;
sætbit_i(kanalflag,operatør,1);
goto radio_nedlæg;
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
\f
message procedure radio side 10 - 880930/cl;
end <* MONITERING *>
else
if opgave = 11 then <* GENNEMSTILLING *>
begin
nr:= d.opref.data(6) extract 20;
k:= if d.opref.data(5) shift (-20) = 12 then
d.opref.data(5) extract 20
else
0;
inspect(ss_samtale_nedlagt(nr),i);
if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
if i<>0 and j<>0 then
begin
res:= hookon(operatør,rad_op,cs_radio(operatør));
goto radio_nedlæg;
end;
iaf:= (nr-1)*kanal_beskr_længde;
if kanal_tab.iaf(1) shift (-20) = operatør then
begin
if læsbiti(kanal_tab.iaf(1),5) and
kanal_tab.iaf(1) extract 2 = 3
then
res:= hookoff(operatør,rad_op,cs_radio(operatør),true)
else
if kanal_tab.iaf(1) extract 2 = 1 and
d.opref.data(5)<>0
then
res:= 0
else
res:= 21; <* ingen at gennemstille til *>
end
else
res:= 50; <* kanalnr *>
if res=0 then
res:= hookon(operatør,rad_op,cs_radio(operatør));
if res=0 then
begin
sætbiti(kanal_tab.iaf(1),5,0);
kanal_tab.iaf(1):= kanal_tab.iaf(1) shift (-2) shift 2 + 3;
d.opref.data(6):= 0;
if kanaltab.iaf(3)=0 then
kanaltab.iaf(3):= d.opref.data(5);
if kanal_tab.iaf(3) shift (-22) = 3 then
begin <* gennemstillet til anden kanal *>
iaf1:= ((kanal_tab.iaf(3) extract 20) - 1)*kanalbeskrlængde;
sætbiti(kanal_tab.iaf1(1),5,0);
kanal_tab.iaf1(1):= kanal_tab.iaf1(1) shift (-2) shift 2 + 3;
if kanaltab.iaf1(3)=0 then
kanaltab.iaf1(3):= 12 shift 20 + nr;
end;
d.opref.data(5):= 0;
res:= 3;
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
\f
message procedure radio side 11 - 880930/cl;
end
else
if opgave = 12 then <* NEDLÆG *>
begin
res:= hookon(operatør,rad_op,cs_radio(operatør));
radio_nedlæg:
if res=0 then
begin
for k:= 5, 6 do
begin
if d.opref.data(k) shift (-20) = 12 then
begin
i:= d.opref.data(k) extract 20;
iaf:= (i-1)*kanalbeskrlængde;
if kanaltab.iaf(1) shift (-20) = operatør then
frigiv_kanal(d.opref.data(k) extract 20)
else
sætbiti(kanaltab.iaf(5),operatør,0);
end
else
if d.opref.data(k) shift (-20) = 13 then
begin
for i:= 1 step 1 until max_antal_kanaler do
if læsbiti(d.opref.data(k),i) then
begin
iaf:= (i-1)*kanalbeskrlængde;
if kanaltab.iaf(1) shift (-20) = operatør then
frigiv_kanal(i)
else
sætbiti(kanaltab.iaf(5),operatør,0);
end;
sætbiti(kanalflag,operatør,1);
end;
end;
d.opref.data(5):= 0;
d.opref.data(6):= 0;
d.opref.data(9):= 0;
res:= if opgave=12 then 3 else 49;
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
if opgave=13 then <* R *>
begin
startoperation(rad_op,410+operatør,cs_radio(operatør),
'H' shift 12 + 60);
d.rad_op.data(1):= operatør;
d.rad_op.data(2):= 'M';
d.rad_op.data(3):= 0; <*tkt*>
d.rad_op.data(4):= 0; <*tkn*>
d.rad_op.data(5):= 1 - (d.opref.data(2) extract 1);
signalch(cs_radio_ud,rad_op,rad_optype);
<*V*> waitch(cs_radio(operatør),rad_op,rad_optype,-1);
res:= d.rad_op.resultat;
d.opref.resultat:= if res=0 then 3 else res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
if opgave=14 <* VENTEPOS *> then
begin
res:= 0;
while (res<=3 and d.opref.data(2)>0) do
begin
nr:= d.opref.data(6) extract 20;
k:= if d.opref.data(5) shift (-20) = 12 then
d.opref.data(5) extract 20
else
0;
inspect(ss_samtale_nedlagt(nr),i);
if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:= 0;
if i<>0 or j<>0 then
begin
res:= hookon(operatør,radop,cs_radio(operatør));
goto radio_nedlæg;
end;
res:= hookoff(operatør,radop,cs_radio(operatør),true);
if res=0 then
begin
i:= d.opref.data(5);
d.opref.data(5):= d.opref.data(6);
d.opref.data(6):= i;
res:= 3;
end;
d.opref.data(2):= d.opref.data(2)-1;
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
begin
fejlreaktion(2,opgave,<: radioopgave fra operatør:>,1);
d.opref.resultat:= 31;
signalch(d.opref.retur,opref,d.opref.optype);
end;
end <* radiokommando fra operatør *>
else
begin
d.op_ref.resultat:= 45; <* ikke implementeret *>
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
end;
until false;
radio_trap:
disable skriv_radio(zbillede,1);
end radio;
\f
message procedure radio_ind side 1 - 810521/hko;
procedure radio_ind(op);
value op;
integer op;
begin
integer array field op_ref,ref,io_opref;
integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn,
antal_sendt, antal_spec, sum, csum, i, filref, zno;
integer array typ, val(1:6), answ, tlgr(1:32);
integer array field spec;
real field rf;
long array field laf;
procedure skriv_radio_ind(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin integer i;
disable i:=write(zud,"nl",1,<:+++ radio-ind ::>);
if omfang > 0 then
disable begin integer x; long array field tx;
tx:= 0;
write(zud,"nl",1,
<: op-ref: :>,op_ref,"nl",1,
<: ref: :>,ref,"nl",1,
<: io-opref: :>,io_opref,"nl",1,
<: ac: :>,ac,"nl",1,
<: lgd: :>,lgd,"nl",1,
<: ttyp: :>,ttyp,"nl",1,
<: ptyp: :>,ptyp,"nl",1,
<: pnum: :>,pnum,"nl",1,
<: pos: :>,pos,"nl",1,
<: tegn: :>,tegn,"nl",1,
<: bs: :>,bs,"nl",1,
<: b-pt: :>,b_pt,"nl",1,
<: b-pn: :>,b_pn,"nl",1,
<: antal-sendt: :>,antal_sendt,"nl",1,
<: antal-spec: :>,antal_spec,"nl",1,
<: sum: :>,sum,"nl",1,
<: csum: :>,csum,"nl",1,
<: i: :>,i,"nl",1,
<: filref :>,filref,"nl",1,
<: zno: :>,zno,"nl",1,
<: answ: :>,answ.tx,"nl",1,
<: tlgr: :>,tlgr.tx,"nl",1);
trap(slut);
skriv_coru(zud,coru_no(401));
slut:
end; <*disable*>
end skriv_radio_ind;
\f
message procedure indsæt_opkald side 1 - 811105/hko;
integer procedure indsæt_opkald(bus,type,omr,sig);
value bus,type,omr,sig;
integer bus,type,omr,sig;
begin
integer res,tilst,ll,operatør;
integer array field vt_op,ref,næste,forrige;
real r;
res:= -1;
begin
<*V*> waitch(cs_vt_adgang,vt_op,true,if type=2 then -1 else 10);
if vt_op <> 0 then
begin
wait(bs_opkaldskø_adgang);
if omr>2 then
begin
start_operation(vt_op,401,cs_radio_ind,14<*bus i kø*>);
d.vt_op.data(1):= bus;
d.vt_op.data(4):= omr;
tilst:= vt_op;
signal_ch(cs_vt,vt_op,gen_optype or vt_optype);
<*V*> wait_ch(cs_radio_ind,vt_op,vt_optype,-1);
<*+4*> if tilst <> vt_op then
fejlreaktion(11<*fremmed post*>,vt_op,<:radio,indsæt opkald:>,0);
<*-4*>
<*+2*> if testbit34 and overvåget then
disable begin
write(out,"nl",1,<:radio_ind,indsæt.reservation retur:>);
skriv_op(out,vt_op);
ud;
end;
end
else
begin
d.vt_op.data(1):= bus;
d.vt_op.data(2):= 0;
d.vt_op.data(3):= bus;
d.vt_op.data(4):= omr;
d.vt_op.resultat:= 0;
ref:= første_nødopkald;
if ref<>0 then tilst:= 2
else
begin
ref:= første_opkald;
tilst:= if ref=0 then 0 else 1;
end;
if tilst=0 then
d.vt_op.resultat:= 3
else
begin
while ref<>0 and d.vt_op.resultat=0 do
begin
if opkaldskø.ref(2) extract 14 = bus and
opkaldskø.ref(5) extract 8 = omr
then
d.vt_op.resultat:= 18
else
begin
ref:= opkaldskø.ref(1) extract 12;
if ref=0 and tilst=2 then
begin
ref:= første_opkald;
tilst:= if ref=0 then 0 else 1;
end
else
if ref=0 then tilst:= 0;
end;
end;
if d.vt_op.resultat=0 then d.vt_op.resultat:= 3;
end;
end;
<*-2*>
\f
message procedure indsæt_opkald side 1a- 820301/hko;
if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then
begin
ref:=første_opkald;
tilst:=-1;
while ref<>0 and tilst=-1 do
begin
if opkaldskø.ref(2) extract 14 = bus extract 14 then
begin <* udtag normalopkald *>
næste:=opkaldskø.ref(1);
forrige:=næste shift(-12);
næste:=næste extract 12;
if forrige<>0 then
opkaldskø.forrige(1):=
opkaldskø.forrige(1) shift(-12) shift 12 +næste
else
første_opkald:=næste;
if næste<>0 then
opkaldskø.næste(1):=
opkaldskø.næste(1) extract 12 + forrige shift 12
else
sidste_opkald:=forrige;
opkaldskø.ref(1):=første_frie_opkald;
første_frie_opkald:=ref;
opkaldskø_ledige:=opkaldskø_ledige +1;
tilst:=0;
end
else
ref:=opkaldskø.ref(1) extract 12;
end; <*while*>
if tilst=0 then
d.vt_op.resultat:=3;
end; <*nødopkald bus i kø*>
\f
message procedure indsæt_opkald side 2 - 820304/hko;
if d.vt_op.resultat = 3 then
begin
ll:= d.vt_op.data(2);
tilst:= d.vt_op.data(3);
læs_hex_ciffer(radio_linietabel,ll shift(-12) extract 10,
operatør);
if operatør < 0 or max_antal_operatører < operatør then
operatør:= 0;
if operatør=0 then
operatør:= radio_garagetabel(tilst shift (-14) extract 8);
if operatør=0 then
operatør:= radio_områdetabel(d.vt_op.data(4) extract 8);
if operatør*(operatør_maske shift(-operatør) extract 1) =0 then
opkaldsflag:= -1 extract max_antal_operatører shift 1
else sæt_bit_i(opkaldsflag,operatør,1);
ref:= første_frie_opkald; <* forudsættes <> 0 *>
første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*>
forrige:= (if type = 1 then sidste_opkald
else sidste_nødopkald);
opkaldskø.ref(1):= forrige shift 12;
if type = 1 then
begin
if første_opkald = 0 then første_opkald:= ref;
sidste_opkald:= ref;
end
else
begin <*type = 2*>
if første_nødopkald = 0 then første_nødopkald:= ref;
sidste_nødopkald:= ref;
end;
if forrige <> 0 then
opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12)
shift 12 +ref;
opkaldskø.ref(2):= tilst extract 22 add
(if type=2 then 1 shift 23 else 0);
opkaldskø.ref(3):= ll;
systime(5,0.0,r);
ll:= round r//100;<*ttmm*>
opkaldskø.ref(4):= ll shift 12 +operatør shift 4 +type extract 4;
opkaldskø.ref(5):= sig shift 20 + omr;
opkaldskø.ref(6):= 0;
res:= 0;
if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1;
opkaldskø_ledige:= opkaldskø_ledige -1;
<*meddel opkald til berørte operatører *>
signal_bin(bs_mobil_opkald);
tæl_opkald(omr,type+1);
end <* resultat = 3 *>
else
begin
\f
message procedure indsæt_opkald side 3 - 810601/hko;
<* d.vt_op.resultat <> 3 *>
res:= d.vt_op.resultat;
if res = 10 then
fejlreaktion(20<*mobilopkald, bus *>,bus,
<:er ikke i bustabel:>,1)
else
<*+4*> if res <> 14 and res <> 18 then
fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1);
<*-4*>
;
end;
signalbin(bs_opkaldskø_adgang);
signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
end
else
res:= -2; <*timeout for cs_vt_adgang*>
end;
indsæt_opkald:= res;
end indsæt_opkald;
\f
message procedure afvent_telegram side 1 - 880901/cl;
integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
integer array tlgr;
integer lgd,ttyp,ptyp,pnum;
begin
integer i, pos, tegn, ac, sum, csum;
pos:= 1;
lgd:= 0;
ttyp:= 'Z';
<*V*> waitch(cs_rad_ind_input,io_opref,rad_optype,-1);
ac:= d.io_opref.resultat;
tofrom(tlgr,d.io_opref.data,64);
if ac >= 0 then
begin
lgd:= 1;
while læstegn(tlgr,lgd,tegn)<>0 do ;
lgd:= lgd-2;
if lgd >= 3 then
begin
i:= 1;
ttyp:= læstegn(tlgr,i,tegn);
ptyp:= læstegn(tlgr,i,tegn) - '@';
pnum:= læstegn(tlgr,i,tegn) - '@';
end
else ac:= 6; <* for kort telegram - retransmitter *>
end;
start_operation(io_opref,401,cs_rad_ind_input,47);
signalch(cs_radio_input(1),io_opref,rad_optype);
afvent_telegram:= ac;
end;
\f
message procedure b_answ side 1 - 880901/cl;
procedure b_answ(answ,ht,spec,more,ac);
value ht, more,ac;
integer array answ, spec;
boolean more;
integer ht, ac;
begin
integer pos, i, sum, tegn;
pos:= 1;
skrivtegn(answ,pos,'B');
skrivtegn(answ,pos,if more then 'B' else ' ');
skrivtegn(answ,pos,ac+'@');
skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@');
skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@');
skrivtegn(answ,pos,'@');
skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@');
skrivtegn(answ,pos,spec(1) extract 8+'@');
for i:= 1 step 1 until spec(1) extract 8 do
if spec(1+i)=0 then skrivtegn(answ,pos,'@')
else
begin
skrivtegn(answ,pos,'D');
anbringtal(answ,pos,spec(1+i),-4);
end;
for i:= 1 step 1 until 4 do
skrivtegn(answ,pos,'@');
skrivtegn(answ,pos,ht+'@');
skrivtegn(answ,pos,'@');
i:= 1; sum:= 0;
while i < pos do
sum:= (sum + læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@');
skrivtegn(answ,pos,sum extract 4 + '@');
repeat skrivtegn(answ,pos,0) until (pos mod 6)=1;
end;
\f
message procedure ann_opkald side 1 - 881108/cl;
integer procedure ann_opkald(vogn,omr);
value vogn,omr;
integer vogn,omr;
begin
integer array field vt_op,ref,næste,forrige;
integer res, t, i, o;
waitch(cs_vt_adgang,vt_op,true,-1);
res:= -1;
wait(bs_opkaldskø_adgang);
ref:= første_nødopkald;
if ref <> 0 then
t:= 2
else
begin
ref:= første_opkald;
t:= if ref<>0 then 1 else 0;
end;
if t=0 then
res:= 19 <* kø tom *>
else
begin
while ref<>0 and res=(-1) do
begin
if vogn=opkaldskø.ref(2) extract 14 and
omr=opkaldskø.ref(5) extract 8
then
res:= 0
else
begin
ref:= opkaldskø.ref(1) extract 12;
if ref=0 and t=2 then
begin
ref:= første_opkald;
t:= if ref=0 then 0 else 1;
end;
end;
end; <*while*>
\f
message procedure ann_opkald side 2 - 881108/cl;
if ref<>0 then
begin
start_operation(vt_op,401,cs_radio_ind,17);
d.vt_op.data(1):= vogn;
d.vt_op.data(4):= omr;
signalch(cs_vt,vt_op,gen_optype or vt_optype);
waitch(cs_radio_ind,vt_op,vt_optype,-1);
o:= opkaldskø.ref(4) shift (-4) extract 4;
næste:= opkaldskø.ref(1);
forrige:= næste shift (-12);
næste:= næste extract 12;
if forrige<>0 then
opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12
+ næste
else
if t=2 then første_nødopkald:= næste
else første_opkald:= næste;
if næste<>0 then
opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
+ forrige shift 12
else
if t=2 then sidste_nødopkald:= forrige
else sidste_opkald:= forrige;
opkaldskø.ref(1):= første_frie_opkald;
første_frie_opkald:= ref;
opkaldskø_ledige:= opkaldskø_ledige + 1;
if t=2 then nødopkald_brugt:= nødopkald_brugt - 1;
if -, læsbiti(operatør_maske,o) or o=0 then
opkaldsflag:= (-1) extract max_antal_operatører shift 1
else
begin
sætbiti(opkaldsflag,o,1);
end;
signalbin(bs_mobilopkald);
end;
end;
signalbin(bs_opkaldskø_adgang);
signalch(cs_vt_adgang, vt_op, true);
ann_opkald:= res;
end;
\f
message procedure frigiv_id side 1 - 881114/cl;
integer procedure frigiv_id(id,omr);
value id,omr;
integer id,omr;
begin
integer array field vt_op;
if id shift (-22) < 3 and omr > 2 then
begin
waitch(cs_vt_adgang,vt_op,true,-1);
start_operation(vt_op,401,cs_radio_ind,
if id shift (-22) = 2 then 18 else 17);
d.vt_op.data(1):= id;
d.vt_op.data(4):= omr;
signalch(cs_vt,vt_op,vt_optype or gen_optype);
waitch(cs_radio_ind,vt_op,vt_optype,-1);
frigiv_id:= d.vt_op.resultat;
signalch(cs_vt_adgang,vt_op,true);
end;
end;
\f
message procedure radio_ind side 2 - 810524/hko;
trap(radio_ind_trap);
laf:= 0;
stack_claim((if cm_test then 200 else 150) +135+75);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio_ind(out,0);
<*-2*>
answ.laf(1):= long<:<'nl'>:>;
io_opref:= op;
start_operation(io_opref,401,cs_rad_ind_input,47);
signal_ch(cs_radio_input(1),io_opref,rad_optype);
repeat
ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
pos:= 4;
if ac = 0 then
begin
\f
message procedure radio_ind side 3 - 881107/cl;
if ttyp = 'A' then
begin
if ptyp<>4 or pnum<1 or pnum>max_antal_operatører then
ac:= 1
else
begin
typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *>
val(1):= ttyp;
typ(2):= 2 shift 12 + (data + 2); <* eq integer data(1) *>
val(2):= pnum;
typ(3):= -1;
getch(cs_radio_ind,opref,rad_optype,typ,val);
if opref>0 then
begin
if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or
læstegn(tlgr,pos,tegn)<>'A' <*PET*> or
læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or
læstegn(tlgr,pos,tegn)<>'@' <*TNO*>
then
begin
ac:= 1; d.opref.resultat:= 31; <* systemfejl *>
end
else
begin
ac:= 0;
d.opref.resultat:= 0;
sætbiti(hookoff_maske,pnum,1);
end;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
ac:= 2;
end;
pos:= 1;
skrivtegn(answ,pos,'A');
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,ac+'@');
for i:= 1 step 1 until 5 do
skrivtegn(answ,pos,'@');
skrivtegn(answ,pos,'0');
i:= 1; sum:= 0;
while i < pos do
sum:= (sum + læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
skrivtegn(answ,pos,sum extract 4 + '@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf);
ud;
end;
<*-2*>
setposition(z_fr_out,0,0);
ac:= -1;
\f
message procedure radio_ind side 4 - 881107/cl;
end <* ttyp=A *>
else
if ttyp = 'B' then
begin
if ptyp<>4 or pnum<1 or pnum>max_antal_operatører then
ac:= 1
else
begin
typ(1):= 1 shift 12 + (opkode-1); val(1):= 'B';
typ(2):= 2 shift 12 + (data+2); val(2):= pnum;
typ(3):= -1;
getch(cs_radio_ind,opref,rad_optype,typ,val);
if opref > 0 then
begin
<*+2*> if testbit37 and overvåget then
disable begin
skriv_radio_ind(out,0);
write(out,<:radio-ind B-op udtaget fra cs:>,<<d>,cs_radio_ind);
skriv_op(out,opref);
end;
<*-2*>
læstegn(tlgr,pos,bs);
if bs = 'V' then
begin
b_pt:= læstegn(tlgr,pos,tegn) - '@';
b_pn:= læstegn(tlgr,pos,tegn) - '@';
end;
if bs<>'Z' and bs<>d.opref.data(2) or bs='V' and
(b_pt<>d.opref.data(10) shift (-18) extract 6 or
b_pn<>d.opref.data(10) shift (-12) extract 6)
then
begin
ac:= 1;
d.opref.resultat:= 31; <* systemfejl *>
signalch(d.opref.retur,opref,d.opref.optype);
end
else
if bs='V' then
begin
ac:= 0;
d.opref.resultat:= 1;
d.opref.data(4):= 0;
d.opref.data(7):=
1 shift (if b_pt=2 then pabx_id(b_pn) else
radio_id(b_pn));
systime(1,0.0,d.opref.tid);
signalch(cs_radio_ind,opref,d.opref.optype);
spec:= data+18;
b_answ(answ,0,d.opref.spec,false,ac);
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
\f
message procedure radio_ind side 5 - 881107/cl;
end
else
begin
integer sig_type;
ac:= 0;
antal_spec:= d.opref.data(4);
filref:= d.opref.data(5);
spec:= d.opref.data(6);
if antal_spec>0 then
begin
antal_spec:= antal_spec-1;
if filref<>0 then
begin
læsfil(filref,1,zno);
b_pt:= fil(zno).spec(1) shift (-12);
sig_type:= fil(zno).spec(1) shift (-8) extract 4;
b_answ(answ,d.opref.data(3),fil(zno).spec,
antal_spec>0,ac);
spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2;
end
else
begin
b_pt:= d.opref.spec(1) shift (-12);
sig_type:= d.opref.spec(1) shift (-8) extract 4;
b_answ(answ,d.opref.data(3),d.opref.spec,
antal_spec>0,ac);
spec:= spec + d.opref.spec(1) extract 8*2 + 2;
end;
<* send answer *>
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
if ac<>0 then
begin
antal_spec:= 0;
ac:= -1;
end
else
begin
for i:= 1 step 1 until max_antal_områder do
if område_id(i,2)=b_pt then
begin
j:= (if b_pt=3 and sig_type=2 then 0 else i);
if sætbiti(d.opref.data(7),j,1)=0 then
d.opref.resultat:= d.opref.resultat + 1;
end;
end;
end;
\f
message procedure radio_ind side 6 - 881107/cl;
<* afvent nyt telegram *>
d.opref.data(4):= antal_spec;
d.opref.data(6):= spec;
ac:= -1;
systime(1,0.0,d.opref.tid);
<*+2*> if testbit37 and overvåget then
disable begin
skriv_radio_ind(out,0);
write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind); skriv_op(out,opref);
ud;
end;
<*-2*>
signalch(cs_radio_ind,opref,d.opref.optype);
end;
end
else ac:= 2;
end;
if ac > 0 then
begin
for i:= 1 step 1 until 6 do val(i):= 0;
b_answ(answ,0,val,false,ac);
<*+2*>
if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf);
ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
end;
\f
message procedure radio_ind side 7 - 881107/cl;
end <* ttyp = 'B' *>
else
if ttyp='C' or ttyp='J' then
begin
if ptyp<>4 or pnum<1 or pnum>max_antal_operatører then
ac:= 1
else
begin
typ(1):= 1 shift 12 + (opkode - 1); val(1):= 'B';
typ(2):= 2 shift 12 + (data + 2); val(2):= pnum;
typ(3):= -1;
getch(cs_radio_ind,opref,rad_optype,typ,val);
if opref > 0 then
begin
d.opref.resultat:= d.opref.resultat - 1;
if ttyp = 'C' then
begin
b_pt:= læstegn(tlgr,4,tegn)-'@'; <* ????? *>
b_pn:= læstegn(tlgr,5,tegn)-'@'; <* ????? *>
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if kanal_id(i)=b_pt shift 5 + b_pn then j:= i;
if kanal_til_omr(j)=3 and d.opref.resultat>0 then
d.opref.resultat:= d.opref.resultat-1;
sætbiti(optaget_flag,j,1);
sætbiti(d.opref.data(9),j,1);
end
else
begin <* INGEN FORBINDELSE *>
sætbiti(d.opref.data(8),læstegn(tlgr,4,tegn)-'@',1);
end;
ac:= 0;
if d.opref.resultat<>0 or d.opref.data(4)<>0 then
begin
systime(1,0,d.opref.tid);
signal_ch(cs_radio_ind,opref,d.opref.op_type);
end
else
begin
d.opref.resultat:= if d.opref.data(9)<>0 then 0 else
if læsbiti(d.opref.data(8),9) then 52 else
if læsbiti(d.opref.data(8),10) then 20 else
if læsbiti(d.opref.data(8),2) then 52 else 59;
signalch(d.opref.retur, opref, d.opref.optype);
end;
end
else
ac:= 2;
end;
pos:= 1;
skrivtegn(answ,pos,ttyp);
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,ac+'@');
i:= 1; sum:= 0;
while i < pos do
sum:= (sum + læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos,sum shift (-4) + '@');
skrivtegn(answ,pos,sum extract 4 + '@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
\f
message procedure radio_ind side 8 - 881107/cl;
end <* ttyp = 'C' or 'J' *>
else
if ttyp = 'D' then
begin
if ptyp = 4 <* VDU *> then
begin
if pnum<1 or pnum>max_antal_operatører then
ac:= 1
else
begin
inspect(bs_operatør_udkoblet(pnum),j);
if j>=0 then
begin
sætbiti(samtalekø,pnum,1);
signal_bin(bs_mobil_opkald);
end;
if læsbiti(hookoff_maske,pnum) then
signalbin(bs_operatør_udkoblet(pnum));
ac:= 0;
end
end
else
if ptyp=3 or ptyp=2 then
begin
if ptyp=3 and (pnum<1 or max_antal_radiokanaler<pnum) or
ptyp=2 and pnum<>2
then
ac:= 1
else
begin
if læstegn(tlgr,5,tegn)='D' then
begin <* teknisk nr i telegram *>
b_pn:= 0;
for i:= 1 step 1 until 4 do
b_pn:= b_pn*10 + læstegn(tlgr,5+i,tegn)-'0';
end
else
b_pn:= 0;
b_pt:= port_til_omr(ptyp shift 6 + pnum);
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
if j<>0 then
begin
ref:= (j-1)*kanalbeskrlængde;
inspect(ss_samtale_nedlagt(j),i);
if i>=0 then
begin
sætbiti(samtalekø,kanaltab.ref(1) shift (-20),1);
signalbin(bs_mobil_opkald);
end;
signal(ss_samtale_nedlagt(j));
if b_pn<>0 then frigiv_id(b_pn,b_pt);
begin
ref:= (j-1)*kanal_beskr_længde;
if kanaltab.ref.kanal_id1<>0 and
(kanaltab.ref.kanal_id1 shift (-22)<>0 or
kanaltab.ref.kanal_id1 extract 14<>b_pn) then
frigiv_id(kanaltab.ref.kanal_id1,b_pt);
if kanaltab.ref.kanal_id2<>0 and
(kanaltab.ref.kanal_id2 shift (-22)<>0 or
kanaltab.ref.kanal_id2 extract 14<>b_pn) then
frigiv_id(kanaltab.ref.kanal_id2,b_pt);
end;
sætbiti(optaget_flag,j,0);
end;
ac:= 0;
end;
end
else ac:= 1;
if ac>=0 then
begin
pos:= i:= 1; sum:= 0;
skrivtegn(answ,pos,'D');
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,ac+'@');
skrivtegn(answ,pos,'@');
while i<pos do
sum:= (sum + læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
skrivtegn(answ,pos, sum extract 4 + '@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
<*+2*>
if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
end;
\f
message procedure radio_ind side 9 - 881107/cl;
end <* ttyp = D *>
else
if ttyp='H' then
begin
integer htyp;
htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn);
if htyp='A' then
begin <*mobilopkald*>
if (ptyp=2 and pnum<>2) or (ptyp=3 and
(pnum<1 or pnum>max_antal_radiokanaler)) then
ac:= 1
else
begin
b_pt:= læstegn(tlgr,5,tegn)-'@';
if læstegn(tlgr,6,tegn)='D' then
begin <*teknisk nr. i telegram*>
b_pn:= 0;
for i:= 1 step 1 until 4 do
b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0';
end
else b_pn:= 0;
bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1;
<* opkaldstype *>
j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum));
if j>0 then
begin
if bs=10 then
ann_opkald(b_pn,j)
else
indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0);
ac:= 0;
end else ac:= 1;
end;
\f
message procedure radio_ind side 10 - 881107/cl;
end
else
if htyp='E' then
begin <* radiokanal status *>
ac:= 0;
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
læstegn(tlgr,9,tegn);
if j<>0 and (tegn='A' or tegn='E') then
begin
ref:= (j-1)*kanalbeskrlængde;
bs:= if tegn='E' then 0 else 15;
if bs<>sæt_hex_ciffer(kanaltab.ref,4,bs) then
begin
kanalflag:= ((-1) extract max_antal_operatører) shift 1;
signalbin(bs_mobil_opkald);
end;
end;
if tegn<>'A' and tegn<>'E' and j<>0 then
begin
waitch(cs_radio_pulje,opref,true,-1);
startoperation(opref,401,cs_radio_pulje,23);
i:= 1;
hægtstring(d.opref.data,i,<:radiofejl :>);
if læstegn(tlgr,4,k)<>'@' then
begin
if k-'@' = 17 then
hægtstring(d.opref.data,i,<: AMV:>)
else
if k-'@' = 18 then
hægtstring(d.opref.data,i,<: BHV:>)
else
begin
hægtstring(d.opref.data,i,<: BST:>);
anbringtal(d.opref.data,i,k-'@',1);
end;
end;
skrivtegn(d.opref.data,i,' ');
hægtstring(d.opref.data,i,string kanal_navn(j));
if '@'<=tegn and tegn<='F' then
hægtstring(d.opref.data,i,case (tegn-'@'+1) of (
<*@*> <:: ukendt fejl:>,
<*A*> <:: compad-fejl:>,
<*B*> <:: ladefejl:>,
<*C*> <:: dør åben:>,
<*D*> <:: senderfejl:>,
<*E*> <:: compad ok:>,
<*F*> <:: liniefejl:>,
<::>))
else
begin
hægtstring(d.opref.data,i,<:: fejlkode :>);
skrivtegn(d.opref.data,i,tegn);
end;
repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
signalch(cs_io,opref,gen_optype or rad_optype);
ref:= (j-1)*kanalbeskrlængde;
kanaltab.ref.kanal_alarm:= kanalflag:=
((-1) extract max_antal_operatører) shift 1;
signalbin(bs_mobilopkald);
end;
\f
message procedure radio_ind side 11 - 881107/cl;
end
else
if htyp='G' then
begin <* fjerninkludering/-ekskludering af område *>
bs:= læstegn(tlgr,9,tegn)-'@';
j:= 0;
for i:= 1 step 1 until max_antal_kanaler do
if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
if j<>0 then
begin
ref:= (j-1)*kanalbeskrlængde;
sætbiti(kanaltab.ref(1),15,bs extract 1);
end;
kanalflag:= -1 extract max_antal_operatører shift 1;
signalbin(bs_mobilopkald);
ac:= 0;
end
else
if htyp='L' then
begin <* vogntabelændringer *>
long field ll;
ll:= 10;
ac:= 0;
zno:= port_til_omr(ptyp shift 6 + pnum);
læstegn(tlgr,9,tegn);
if (tegn='N') or (tegn='O') then
begin
typ(1):= 1 shift 12 + (opkode-1); val(1):= 'H';
typ(2):= -1;
getch(cs_radio_ind,opref,rad_optype,typ,val);
if opref>0 then
begin
d.opref.resultat:= if tegn='N' then 3 else 60;
signalch(d.opref.retur,opref,d.opref.optype);
end;
ac:= -1;
end
else
if (tegn='G') and (tlgr.ll=(long<:FFFFF:> add 'F')) then
ac:= -1
else
if tegn='G' then <*indkodning*>
begin
pos:= 10; i:= 0;
while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
i:= i*10 + (tegn-'0');
i:= i mod 1000;
b_pn:= (1 shift 22) + (i shift 12);
if pos=14 and 'A'<=tegn and tegn<='Å' then
b_pn:= b_pn + ((tegn-'@') shift 7);
pos:= 14; i:= 0;
while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=16 do
i:= i*10 + (tegn-'0');
b_pn:= b_pn + i;
pos:= 16; i:= 0;
while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=20 do
i:= i*10 + (tegn-'0');
b_pt:= i;
bs:= 11;
\f
message procedure radio_ind side 12 - 881107/cl;
end
else
if tegn='H' then <*udkodning*>
begin
pos:= 10; i:= 0;
while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
i:= i*10 + (tegn-'0');
b_pt:= i;
b_pn:= 0;
bs:= 12;
end
else
if tegn='I' then <*slet tabel*>
begin
b_pt:= 1; b_pn:= 999; bs:= 19;
pos:= 10; i:= 0;
i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 +
hex_to_dec(læstegn(tlgr,pos,tegn));
zno:= i;
end
else ac:= 2;
if ac<0 then
ac:= 0
else
if ac=0 then
begin
waitch(cs_vt_adgang,opref,true,-1);
startoperation(opref,401,cs_vt_adgang,bs);
d.opref.data(1):= b_pt;
d.opref.data(2):= b_pn;
d.opref.data(if bs=19 then 3 else 4):= zno;
signalch(cs_vt,opref,gen_optype or vt_optype);
end;
end
else
ac:= 2;
pos:= 1;
skrivtegn(answ,pos,'H');
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,ac+'@');
i:= 1; sum:= 0;
while i < pos do
sum:= (sum + læstegn(answ,i,tegn)) mod 256;
skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@');
skriv_tegn(answ,pos, sum extract 4 +'@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
\f
message procedure radio_ind side 13 - 881107/cl;
end
else
if ttyp = 'I' then
begin
typ(1):= -1;
repeat
getch(cs_radio_ind,opref,true,typ,val);
if opref<>0 then
begin
d.opref.resultat:= 31;
signalch(d.opref.retur,opref,d.opref.op_type);
end;
until opref=0;
for i:= 1 step 1 until max_antal_operatører do
if læsbiti(hookoff_maske,i) then
begin
signalbin(bs_operatør_udkoblet(i));
sætbiti(samtalekø,i,1);
end;
if samtalekø<>0 then signal_bin(bs_mobil_opkald);
for i:= 1 step 1 until max_antal_kanaler do
begin
ref:= (i-1)*kanalbeskrlængde;
if kanaltab.ref.kanaltilstand extract 2 <> 0 then
begin
if kanaltab.ref.kanal_id2<>0 and
kanaltab.ref.kanal_id2 shift (-22)<>3
then
begin
signal(ss_samtale_nedlagt(i));
frigiv_id(kanaltab.ref.kanal_id2,kanal_til_omr(i));
end;
if kanaltab.ref.kanal_id1<>0 then
begin
signal(ss_samtale_nedlagt(i));
frigiv_id(kanaltab.ref.kanal_id1,kanal_til_omr(i));
end;
end;
sæt_hex_ciffer(kanaltab.ref,4,15);
end;
<*V*> waitch(cs_radio_pulje,opref,true,-1);
startoperation(opref,401,cs_radio_pulje,23);
i:= 1;
hægtstring(d.opref.data,i,<:radio-info: :>);
j:= 4;
while j<=lgd and i<(d.opref.opsize - data - 2)//2*3 do
begin
skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
end;
repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
signalch(cs_io,opref,gen_optype or rad_optype);
optaget_flag:= 0;
pos:= i:= 1; sum:= 0;
skrivtegn(answ,pos,'I');
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,'@');
while i<pos do
sum:= (sum+læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
skrivtegn(answ,pos,sum extract 4 + '@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
\f
message procedure radio_ind side 14 - 881107/cl;
end
else
if ttyp='L' then
begin
ac:= 0;
waitch(cs_radio_pulje,opref,true,-1);
startoperation(opref,401,cs_radio_pulje,23);
i:= 1;
hægtstring(d.opref.data,i,<:radio-info: :>);
j:= 4;
while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do
begin
skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
end;
repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
signalch(cs_io,opref,gen_optype or rad_optype);
end
else
if ttyp='Z' then
begin
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
end
else
ac:= 1;
end; <* telegram modtaget ok *>
\f
message procedure radio_ind side 15 - 881107/cl;
if ac>=0 then
begin
pos:= i:= 1; sum:= 0;
skrivtegn(answ,pos,ttyp);
skrivtegn(answ,pos,' ');
skrivtegn(answ,pos,ac+'@');
while i<pos do
sum:= (sum+læstegn(answ,i,tegn)) mod 256;
skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
skrivtegn(answ,pos, sum extract 4 + '@');
repeat afsluttext(answ,pos) until pos mod 6 = 1;
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(out,<:fr-answ: :>,answ.laf); ud;
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1,false add 128,1);
setposition(z_fr_out,0,0);
ac:= -1;
end;
typ(1):= 0;
typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
rf:= 4;
systime(1,0.0,val.rf);
val.rf:= val.rf - 30.0;
typ(3):= -1;
repeat
getch(cs_radio_ind,opref,true,typ,val);
if opref>0 then
begin
d.opref.resultat:= 53; <*annuleret*>
signalch(d.opref.retur,opref,d.opref.optype);
end;
until opref=0;
until false;
radio_ind_trap:
disable skriv_radio_ind(zbillede,1);
end radio_ind;
\f
message procedure radio_ud side 1 - 820301/hko;
procedure radio_ud(op);
value op;
integer op;
begin
integer array field opref,io_opref;
integer opgave, kode, pos, tegn, i, sum, rc, svar_status;
integer array answ, tlgr(1:32);
long array field laf;
procedure skriv_radio_ud(z,omfang);
value omfang;
zone z;
integer omfang;
begin integer i1;
disable i1:= write(z,"nl",1,<:+++ radio-ud ::>);
if omfang > 0 then
disable begin real x;
trap(slut);
skriv_coru(z,coru_no(402));
slut:
end; <*disable*>
end skriv_radio_ud;
procedure flush;
begin
integer i;
repeat
inspectch(cs_radio_input(2),true,i);
if i < 0 then <* nogen venter *>
begin
startoperation(io_opref,402,cs_rad_ud_input,47);
signalch(cs_radio_input(2),io_opref,rad_optype);
<*V*> waitch(cs_rad_ud_input,io_opref,rad_optype,-1);
end;
until i=0;
end;
trap(radio_ud_trap);
laf:= 0;
stack_claim((if cm_test then 200 else 150) +35+100);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio_ud(out,0);
<*-2*>
io_opref:= op;
\f
message procedure radio_ud side 2 - 810529/hko;
repeat
<*V*> wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1);
kode:= d.op_ref.opkode;
opgave:= kode shift(-12);
kode:= kode extract 12;
if opgave < 'A' or opgave > 'I' then
begin
d.opref.resultat:= 31;
end
else
begin
pos:= 1;
if opgave='A' or opgave='B' or opgave='D' or opgave='H' then
begin
skrivtegn(tlgr,pos,opgave);
if d.opref.data(1) = 0 then
begin
skrivtegn(tlgr,pos,'G');
skrivtegn(tlgr,pos,'A');
end
else
begin
skrivtegn(tlgr,pos,'D');
skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*operatørnr*>
end;
if opgave='A' then
begin
skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*>
end
else
if opgave='B' then
begin
skrivtegn(tlgr,pos,d.opref.data(2));
if d.opref.data(2)='V' then
begin
skrivtegn(tlgr,pos,
d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*>
skrivtegn(tlgr,pos,
d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*>
end;
d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0;
d.opref.data(6):= if d.opref.data(5)<>0 then 0 else data+18;
end
else
if opgave='H' then
begin
skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*>
skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*>
hægtstring(tlgr,pos,<:@@@:>);
skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*>
skrivtegn(tlgr,pos,'A');
skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and
d.opref.data(5)=8 then 7 else d.opref.data(5))+'@');
if d.opref.data(2)='L' then
begin
if d.opref.data(5)=7 then
begin
anbringtal(tlgr,pos,
d.opref.data(8) shift (-12) extract 10,-4);
anbringtal(tlgr,pos,
d.opref.data(8) extract 7,-2);
end
else
if d.opref.data(5)=8 then
begin
hægtstring(tlgr,pos,<:FFFFFF:>);
end;
if d.opref.data(5)<>9 then
anbringtal(tlgr,pos,d.opref.data(7),-4);
skrivtegn(tlgr,pos,
dec_to_hex(d.opref.data(6) shift (-4) extract 4));
skrivtegn(tlgr,pos,
dec_to_hex(d.opref.data(6) extract 4));
skrivtegn(tlgr,10,pos-11+'@');
end;
end;
end
else
if opgave='I' then
begin
hægtstring(tlgr,pos,<:IGA:>);
end
else d.opref.resultat:= 31; <*systemfejl*>
end;
\f
message procedure radio_ud side 3 - 881107/cl;
if d.opref.resultat=0 then
begin
if (opgave <= 'B')
<* or (opgave='H' and d.opref.data(2)='L') *> then
begin
systime(1,0,d.opref.tid);
signalch(cs_radio_ind,opref,d.opref.optype);
opref:= 0;
end;
<* beregn checksum og send *>
i:= 1; sum:= 0;
while i < pos do
sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
skrivtegn(tlgr,pos,sum shift (-4) + '@');
skrivtegn(tlgr,pos,sum extract 4 + '@');
repeat skrivtegn(tlgr,pos,0) until pos mod 6 = 1;
<*+2*> if (testbit36 or testbit39) and overvåget then
disable begin
write(out,<:rf-tlgr: :>,tlgr.laf);
ud;
end;
<*-2*>
flush;
write(z_rf_out,"nl",1,tlgr.laf,"cr",1,false add 128,1);
setposition(z_rf_out,0,0);
rc:= 0;
<* afvent svar*>
repeat
start_operation(io_opref,402,cs_rad_ud_input,47);
signalch(cs_radio_input(2),io_opref,rad_optype);
<*V*> waitch(cs_rad_ud_input,io_opref,rad_optype,-1);
svar_status:= d.io_opref.resultat;
if svar_status=6 then
begin
svar_status:= -3;
goto radio_ud_check;
end;
tofrom(answ,d.io_opref.data,64);
pos:= 1;
while læstegn(answ,pos,i)<>0 do ;
pos:= pos-2;
if pos > 0 then
begin
if pos<3 then
svar_status:= -2 <*format error*>
else
begin
if læstegn(answ,3,tegn)<>'@' then
svar_status:= tegn - '@'
else
begin
pos:= 1;
læstegn(answ,pos,tegn);
if tegn<>opgave then
svar_status:= -4 <*gal type*>
else
if læstegn(answ,pos,tegn)<>' ' then
svar_status:= -tegn <*fejl*>
else
svar_status:= læstegn(answ,pos,tegn)-'@';
end;
end;
end
else
svar_status:= -1;
\f
message procedure radio_ud side 5 - 881107/cl;
radio_ud_check:
if svar_status<>0 then flush;
rc:= rc+1;
if -4<=svar_status and svar_status<=-1 then
disable begin
write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>,false add 128,1);
setposition(z_rf_out,0,0);
<*+2*> if (testbit36 or testbit39) and overvåget then
begin
write(out,<:rf-tlgr: Z@@MJ:>); ud;
end;
<*-2*>
end
else
if svar_status=6 then
disable begin
write(z_rf_out,"nl",1,tlgr.laf,"cr",1,false add 128,1);
setposition(z_rf_out,0,0);
<*+2*> if (testbit36 or testbit39) and overvåget then
begin
write(out,<:rf-tlgr: :>,tlgr.laf,<: (repeat):>); ud;
end;
<*-2*>
end
else
if svar_status=0 and opref<>0 then
d.opref.resultat:= 0
else
if opref<>0 then
d.opref.resultat:= 31;
until svar_status=0 or rc>3;
end;
if opref<>0 then
begin
if svar_status<>0 and rc>3 then
d.opref.resultat:= 53; <* annulleret *>
signalch(d.opref.retur,opref,d.opref.optype);
opref:= 0;
end;
until false;
radio_ud_trap:
disable skriv_radio_ud(zbillede,1);
end radio_ud;
\f
message procedure radio_medd_opkald side 1 - 810610/hko;
procedure radio_medd_opkald;
begin
integer array field ref,op_ref;
integer i;
procedure skriv_radio_medd_opkald(z,omfang);
value omfang;
zone z;
integer omfang;
begin integer x;
disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>);
write(z,"sp",26-x);
if omfang > 0 then
disable begin
trap(slut);
write(z,"nl",1,
<: ref: :>,ref,"nl",1,
<: opref: :>,op_ref,"nl",1,
<: i: :>,i,"nl",1,
<::>);
skriv_coru(z,abs curr_coruno);
slut:
end;<*disable*>
end skriv_radio_medd_opkald;
trap(radio_medd_opkald_trap);
stack_claim((if cm_test then 200 else 150) +1);
<*+2*>if testbit32 and overvåget or testbit28 then
disable skriv_radio_medd_opkald(out,0);
<*-2*>
\f
message procedure radio_medd_opkald side 2 - 820301/hko;
repeat
<*V*> wait(bs_mobil_opkald);
<*V*> wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1);
<*V*> wait(bs_opkaldskø_adgang);
ref:= første_nød_opkald;
while ref <> 0 do <* meld ikke meldt nødopkald til io *>
begin
i:= opkaldskø.ref(2);
if i < 0 then
begin
<* nødopkald ikke meldt *>
start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>);
d.op_ref.data(1):= <* vogn_id *>
if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22;
opkaldskø.ref(2):= i extract 22;
d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *>
d.op_ref.data(3):= opkaldskø.ref(5) extract 20;
i:= op_ref;
<*+2*> if testbit35 and overvåget then
disable begin
write(out,"nl",1,<:radio nød-medd:>);
skriv_op(out,op_ref);
ud;
end;
<*-2*>
signal_ch(cs_io,op_ref,gen_optype or rad_optype);
<*V*> wait_ch(cs_radio_medd,op_ref,rad_optype,-1);
<*+4*> if i <> op_ref then
fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0);
<*-4*>
end;<*nødopkald ikke meldt*>
ref:= opkaldskø.ref(1) extract 12;
end; <* melding til io *>
\f
message procedure radio_medd_opkald side 3 - 820304/hko;
start_operation(op_ref,403,cs_radio_medd,
40<*opdater opkaldskøbill*>);
signal_bin(bs_opkaldskø_adgang);
<*+2*> if testbit35 and overvåget then
disable begin
write(out,"nl",1,<:radio opdater opkaldskø-billede:>);
skriv_op(out,op_ref);
write(out,<:opkaldsflag::>);
out_int_bits(out,opkaldsflag);
write(out,"nl",1,<:kanalflag: :>);
outintbits(out,kanalflag);
ud;
end;
<*-2*>
signal_ch(cs_op,op_ref,gen_optype or rad_optype);
until false;
radio_medd_opkald_trap:
disable skriv_radio_medd_opkald(zbillede,1);
end radio_medd_opkald;
\f
message procedure radio_adm side 1 - 820301/hko;
procedure radio_adm(op);
value op;
integer op;
begin
integer array field opref, rad_op, iaf;
integer nr,i,res,opgave,tilst,operatør;
procedure skriv_radio_adm(z,omfang);
value omfang;
zone z;
integer omfang;
begin integer i1;
disable i1:= write(z,"nl",1,<:+++ radio-adm:>);
write(z,"sp",26-i1);
if omfang > 0 then
disable begin real x;
trap(slut);
\f
message procedure radio_adm side 2- 820301/hko;
write(z,"nl",1,
<: op_ref: :>,op_ref,"nl",1,
<: iaf: :>,iaf,"nl",1,
<: rad-op: :>,rad_op,"nl",1,
<: nr: :>,nr,"nl",1,
<: i: :>,i,"nl",1,
<: tilst: :>,tilst,"nl",1,
<: res: :>,res,"nl",1,
<: opgave: :>,opgave,"nl",1,
<: operatør: :>,operatør,"nl",1);
skriv_coru(z,coru_no(404));
slut:
end;<*disable*>
end skriv_radio_adm;
\f
message procedure radio_adm side 3 - 820304/hko;
rad_op:= op;
trap(radio_adm_trap);
stack_claim((if cm_test then 200 else 150) +50);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio_adm(out,0);
<*-2*>
pass;
startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
signalch(cs_radio_ud,rad_op,rad_optype);
waitch(cs_radio_adm,rad_op,rad_optype,-1);
repeat
waitch(cs_radio_adm,opref,true,-1);
<*+2*>
if testbit33 and overvåget then
disable begin
skriv_radio_adm(out,0);
write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm);
skriv_op(out,opref);
end;
<*-2*>
k:= d.op_ref.opkode extract 12;
opgave:= d.opref.opkode shift (-12);
nr:= d.op_ref.data(1);
<*+4*> if (d.op_ref.optype and
(gen_optype or io_optype or op_optype or vt_optype))
extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
<:radio_adm:>,0);
<*-4*>
if k = 74 <* RA,I *> then
begin
startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
signalch(cs_radio_ud,rad_op,rad_optype);
waitch(cs_radio_adm,rad_op,rad_optype,-1);
d.opref.resultat:= if d.rad_op.resultat=0 then 3
else d.rad_op.resultat;
signalch(d.opref.retur,opref,d.opref.optype);
\f
message procedure radio_adm side 4 - 820301/hko;
end
else
if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or
k = 5<*FO,L*> or k = 6<*ST *> or k = 70<*FO,G*> then
begin
if k = 5 or k=70 or k=77 then
begin
<*V*> wait(bs_opkaldskø_adgang);
if k=5 then
begin
disable i:= læs_fil(1029,1,nr);
if i <> 0 then
fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
tofrom(radio_linie_tabel,fil(nr),(max_linienr//6+1)*2);
for i:= 1 step 1 until max_antal_mobilopkald do
begin
iaf:= i*opkaldskø_postlængde;
nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*>
læs_hex_ciffer(radio_linie_tabel,nr,operatør);
if operatør>max_antal_operatører then operatør:= 0;
iaf:= iaf +6;
sæt_hex_ciffer(opkalds_kø.iaf,1,operatør);
end;
end
else
if k=77 then
begin
disable i:= læsfil(1034,1,nr);
if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0);
tofrom(radio_områdetabel,fil(nr),max_antal_områder*2);
for i:= 1 step 1 until max_antal_mobilopkald do
begin
iaf:= i*opkaldskø_postlængde;
nr:= opkaldskø.iaf(5) extract 4;
operatør:= radio_områdetabel(nr);
if operatør < 0 or max_antal_operatører < operatør then
operatør:= 0;
if læs_hex_ciffer(opkaldskø.iaf,1+18,0)=0 or
opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
sæt_hex_ciffer(opkaldskø.iaf,1+18,operatør);
end;
end
else
begin
disable i:= læsfil(1033,1,nr);
if i<>0 then fejlreaktion(5,i,<:garagefordelingstabel:>,0);
tofrom(radio_garagetabel,fil(nr),max_antal_garager*2);
for i:= 1 step 1 until max_antal_mobilopkald do
begin
iaf:= i*opkaldskø_postlængde;
nr:= opkaldskø.iaf(2) shift (-14) extract 4; <*garage*>
operatør:= radio_garagetabel(nr);
if operatør<0 or max_antal_operatører<operatør then
operatør:= 0;
if læs_hex_ciffer(opkaldskø.iaf,1+18,0)=0 or
opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
sæt_hex_ciffer(opkaldskø.iaf,1+18,operatør);
end;
end;
opkaldsflag:= -1 extract max_antal_operatører shift 1;
signal_bin(bs_opkaldskø_adgang);
signal_bin(bs_mobil_opkald);
d.op_ref.resultat:= res:= 3;
\f
message procedure radio_adm side 5 - 820304/hko;
end <*k = 5 / k = 70*>
else
begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *>
res:= 3;
for nr:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (nr-1)*kanal_beskr_længde;
if kanal_tab.iaf(1) shift (-20) = operatør then
begin
tilst:= kanal_tab.iaf(1) extract 2;
if tilst <> 0 then
res:= 16; <*skærm optaget*>
end; <* kanaltab(operatør) = operatør*>
end;
opkaldsflag:= -1 extract max_antal_operatører shift 1;
sæt_bit_i(opkaldsflag,operatør,k extract 1);
signal_bin(bs_mobil_opkald);
d.op_ref.resultat:= res;
end;<*k=1,2 eller 6 *>
<*+2*> if testbit35 and overvåget then
disable begin
skriv_radio_adm(out,0);
write(out,<: sender til :>,
if k=5 or k=6 or k=70 or k=77 or res > 3 then d.op_ref.retur
else cs_op);
skriv_op(out,op_ref);
end;
<*-2*>
if k=5 or k=6 or k=70 or k=77 or res > 3 then
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype)
else
begin <*k = (1 eller 2) og res = 3 *>
d.op_ref.resultat:=0;
signal_ch(cs_op,op_ref,d.op_ref.optype);
end;
\f
message procedure radio_adm side 6 - 816610/hko;
end <*k=1,2,5 eller 6*>
else
if k=3 <*IN,R*> or k=4 <*EK,R*> then
begin
nr:= d.op_ref.data(1);
res:= 3;
if nr<=3 then
res:= 51 <* afvist *>
else
begin
<* gennemstilling af område *>
j:= 1;
for i:= 1 step 1 until max_antal_kanaler do
begin
if kanal_id(i) shift (-5) extract 3 = 3 and
radio_id(kanal_id(i) extract 5) = nr then j:= i;
end;
nr:= j;
iaf:= (nr-1)*kanalbeskrlængde;
if læsbiti(kanaltab.iaf(1),15) == (k=4) then
begin
startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
d.rad_op.data(1):= 0;
d.rad_op.data(2):= 'G'; <* gennemstil område *>
d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3;
d.rad_op.data(4):= kanal_id(nr) extract 5;
d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *>
signalch(cs_radio_ud,rad_op,rad_optype);
waitch(cs_radio_adm,rad_op,rad_optype,-1);
res:= d.rad_op.resultat;
if res=0 then res:= 3;
sætbiti(kanaltab.iaf(1),15,k extract 1);
sætbiti(kanaltab.iaf(1),14,k extract 1);
end;
end;
d.op_ref.resultat:=res;
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
kanal_flag:= -1 extract max_antal_operatører shift 1;
signal_bin(bs_mobil_opkald);
\f
message procedure radio_adm side 7 - 880930/cl;
end <* k=3 eller 4 *>
else
if k=72<*EK,K*> or k=73<*IN,K*> then
begin
nr:= d.opref.data(1) extract 22;
res:= 3;
iaf:= (nr-1)*kanalbeskrlængde;
start_operation(radop,404,cs_radio_adm,'H' shift 12 + 60);
d.rad_op.data(1):= 0;
d.rad_op.data(2):= 'C'; <* kanal inkluder/ekskluder *>
d.rad_op.data(3):= kanalid(nr) shift (-5) extract 3;
d.rad_op.data(4):= kanalid(nr) extract 5;
d.rad_op.data(5):= k extract 1;
signalch(cs_radio_ud,radop,rad_optype);
waitch(cs_radio_adm,radop,rad_optype,-1);
res:= d.radop.resultat;
if res=0 then res:= 3;
j:= if k=72 then 15 else 0;
if res=3 and j<>sæt_hex_ciffer(kanaltab.iaf,4,j) then
begin
kanalflag:= ((-1) extract max_antal_operatører) shift 1;
signalbin(bs_mobilopkald);
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
if k=11 or k=12 or k=19 then <*vt_opd*>
begin
nr:= d.opref.data(1) extract 8;
opgave:= if k=19 then 9 else (k-4);
if nr<=3 then
res:= 51 <*afvist*>
else
begin
startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
d.radop.data(1):= 0;
d.radop.data(2):= 'L';
d.radop.data(3):= omr_til_trunk(nr) shift (-6);
d.radop.data(4):= omr_til_trunk(nr) extract 6;
d.radop.data(5):= opgave;
d.radop.data(6):= d.opref.data(1) shift (-8) extract 8;
d.radop.data(7):= d.opref.data(2);
d.radop.data(8):= d.opref.data(3);
signalch(cs_radio_ud,radop,rad_optype);
<*V*> waitch(cs_radio_adm,radop,rad_optype,-1);
res:= d.radop.resultat;
if res=0 then res:= 3;
end;
d.opref.resultat:= res;
signalch(d.opref.retur,opref,d.opref.optype);
end
else
begin
d.op_ref.resultat:= 45; <* ikke implementeret *>
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
end;
until false;
radio_adm_trap:
disable skriv_radio_adm(zbillede,1);
end radio_adm;
\f
message procedure radio_input side 1 - 891201/cl;
procedure radio_input(z_in,nr);
value nr;
zone z_in;
integer nr;
begin
integer array field op_ref;
integer ac;
integer array typ, val(1:6), tlgr(1:32);
real field rf;
long array field laf;
procedure skriv_radio_input(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin integer i;
disable i:=write(zud,"nl",1,<:+++ radio-input(:>,<<d>,nr,<:)::>);
if omfang > 0 then
disable begin integer x; long array field tx;
tx:= 0;
write(zud,"nl",1,
<: op-ref: :>,op_ref,"nl",1,
<: ac: :>,ac,"nl",1,
<: tlgr: :>,tlgr.tx,"nl",1);
trap(slut);
skriv_coru(zud,coru_no(404+nr));
slut:
end; <*disable*>
end skriv_radio_input;
\f
message procedure afvent_telegram side 1 - 880901/cl;
integer procedure afvent_telegram(tlgr);
integer array tlgr;
begin
integer i, pos, tegn, ac, sum, csum, lgd;
long array field laf;
laf:= 0;
pos:= 1;
while readchar(z_in,tegn)<8 and pos<80 do
skrivtegn(tlgr,pos,tegn);
repeat afsluttext(tlgr,pos) until pos mod 6 = 1;
<*+2*>if overvåget and (testbit36 or (nr=1 and testbit38) or
(nr=2 and testbit39)) then
disable begin
write(out,case nr of (<:fr-tlgr: :>,<:rf-answ: :>),tlgr.laf,
if tegn='em' then <:*timeout*:> else
if pos>=80 then <:*for langt*:> else <::>); ud; end;
<*-2*>
ac:= -1;
if pos > 80 then
begin <* telegram for langt *>
repeat readchar(z_in,tegn)
until tegn='nl' or tegn='em';
end
else
if pos>1 and tegn='nl' then
begin
lgd:= 1;
while læstegn(tlgr,lgd,tegn)<>0 do ;
lgd:= lgd-2;
if lgd >= 5 then
begin
lgd:= lgd-2; <* se bort fra checksum *>
i:= lgd + 1;
csum:= (læstegn(tlgr,i,tegn) - '@')*16;
csum:= csum + (læstegn(tlgr,i,tegn) - '@');
i:= lgd + 1;
skrivtegn(tlgr,i,0);
skrivtegn(tlgr,i,0);
i:= 1; sum:= 0;
while i <= lgd do
sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
if csum >= 0 and csum <> sum then
begin
<*+2*> if overvåget and (testbit36 or
(nr=1 and testbit38) or (nr=2 and testbit39)) then
disable begin
write(out,case nr of (<:fr:>,<:rf:>),
<:-tlgr-checksumfejl: :>,csum,sum); ud;
end;
<*-2*>
ac:= 6 <* checksumfejl *>
end
else
ac:= 0;
end
else ac:= 6; <* for kort telegram - retransmitter *>
end;
afvent_telegram:= ac;
end;
\f
message procedure radio_input side 2 - 891201/cl;
trap(radio_input_trap);
laf:= 0;
stack_claim((if cm_test then 200 else 150) +135);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio_input(out,0);
<*-2*>
repeat
ac:= afvent_telegram(tlgr);
if ac = -1 then
begin <* timeout *>
typ(1):= 0;
typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
rf:= 4;
systime(1,0.0,val.rf);
val.rf:= val.rf - 30.0;
typ(3):= -1;
repeat
getch(cs_radio_input(nr),opref,true,typ,val);
if opref<>0 then
begin
d.opref.resultat:= -1; <* annulleret *>
d.opref.data(1):= d.opref.data(2):= 0;
signalch(d.opref.retur,opref,d.opref.optype);
end;
until opref=0;
end
else
begin
waitch(cs_radio_input(nr),opref,rad_optype,-1);
d.opref.resultat:= ac;
tofrom(d.opref.data,tlgr,64);
signalch(d.opref.retur,opref,d.opref.optype);
end;
until false;
radio_input_trap:
disable skriv_radio_input(zbillede,1);
end radio_input;
:5: radio: initialisering
\f
message radio_initialisering side 1 - 820301/hko;
cs_rad:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_rad,<:cs_rad(h_mod):>);
<*-3*>
i:= next_coru(400,<*ident*>
10,<*prioritet*>
true<*test_maske*>);
j:= new_activity( i,
0,
h_radio);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
opkalds_kø_ledige:= max_antal_mobilopkald;
nødopkald_brugt:= 0;
radio_garagetabel(0):= 0;
læsfil(1033,1,i);
tofrom(radio_garagetabel,fil(i),max_antal_garager*2);
læsfil(1034,1,i);
tofrom(radio_områdetabel,fil(i),max_antal_områder*2);
for i:= system(3,j,opkaldskø) step 1 until j do
opkaldskø(i):= 0;
første_frie_opkald:=opkaldskø_postlængde;
første_opkald:=sidste_opkald:=
første_nødopkald:=sidste_nødopkald:=j:=0;
for i:=1 step 1 until max_antal_mobil_opkald -1 do
begin
ref:=i*opkaldskø_postlængde;
opkaldskø.ref(1):=j:=j shift 12 +ref +opkaldskø_postlængde;
end;
ref:=ref+opkaldskø_postlængde;
opkaldskø.ref(1):=j shift 12;
læs_fil(1029,1,i);
tofrom(radio_linie_tabel,fil(i),(max_linienr//6 +1)*2);
for i:= system(3,j,kanal_tab) step 1 until j do
kanal_tab(i):= 0;
kanal_tilstand:= 2;
kanal_id1:= 4;
kanal_id2:= 6;
kanal_spec:= 8;
kanal_mon_maske:= 10;
kanal_alarm:= 12;
kanal_alt_id1:= 14;
kanal_alt_id2:= 16;
for i:= 1 step 1 until max_antal_kanaler do
begin
ref:= (i-1)*kanalbeskrlængde;
sæthexciffer(kanaltab.ref,4,15);
if kanal_id(i) shift (-5) extract 3 = 2 or
kanal_id(i) shift (-5) extract 3 = 3 and
radio_id(kanal_id(i) extract 5)<=3
then
begin
sætbiti(kanaltab.ref(1),15,1);
sætbiti(kanaltab.ref(1),14,1);
end;
end;
opkaldsflag:= -1 extract max_antal_operatører shift 1;
samtalekø:= 0;
hookoff_maske:= 0;
optaget_flag:= 0;
\f
message radio_initialisering side 2 - 810524/hko;
bs_mobil_opkald:= next_sem;
<*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>);
<*-3*>
bs_opkaldskø_adgang:= next_sem;
signal_bin(bs_opkaldskø_adgang);
<*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>);
<*-3*>
cs_radio_medd:=next_semch;
signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype);
<*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>);
<*-3*>
i:= next_coru(403,
5,<*prioritet*>
true<*testmaske*>);
j:= new_activity( i,
0,
radio_medd_opkald);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
cs_radio_adm:= nextsemch;
<*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>);
<*-3*>
i:= next_coru(404,
10,
true);
j:= new_activity(i,
0,
radio_adm,next_op(data+radio_op_længde));
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
\f
message radio_initialisering side 3 - 810526/hko;
for k:= 1 step 1 until max_antal_operatører do
begin
cs_radio(k):=next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio( ):>);
<*-3*>
bs_operatør_udkoblet(k):= nextsem;
<*+3*>skriv_new_sem(out,1,bs_operatør_udkoblet(k),<:bs_operatør_udkoblet( ):>);
<*-3*>
i:=next_coru(410+k,
10,
true);
j:=new_activity( i,
0,
radio,k,next_op(data + radio_op_længde));
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
end;
cs_radio_pulje:=next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>);
<*-3*>
for i:= 1 step 1 until radiopulje_størrelse do
signal_ch(cs_radio_pulje,
next_op(60),
gen_optype or rad_optype);
cs_radio_kø:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>);
<*-3*>
mobil_opkald_aktiveret:= true;
\f
message radio_initialisering side 4 - 810522/hko;
raf:=0;
open(z_fr_in,0,radio_fr_in_navn,radio_giveup);
i:= monitor(8)reserve process:(z_fr_in,0,ia);
j:=1;
if i <> 0 then
fejlreaktion(4<*monitor resultat*>,i,
string radio_fr_in_navn.raf(increase(j)),1)
else
begin
open(z_fr_out,14,radio_fr_out_navn,radio_giveup);
i:= monitor(8)reserve process:(z_fr_out,0,ia);
j:=1;
if i <> 0 then
fejlreaktion(4,i,string radio_fr_out_navn.raf(increase(j)),1)
else
begin
end;
end;
open(z_rf_in,0,radio_rf_in_navn,radio_giveup);
i:= monitor(8)reserve process:(z_rf_in,0,ia);
j:= 1;
if i <> 0 then
fejlreaktion(4<*monitor resultat*>,i,
string radio_rf_in_navn.raf(increase(j)),1)
else
begin
open(z_rf_out,14,radio_rf_out_navn,radio_giveup);
i:= monitor(8)reserve process:(z_rf_out,0,ia);
j:= 1;
if i <> 0 then
fejlreaktion(4,i,string radio_rf_out_navn.raf(increase(j)),1)
else
begin
end;
end;
\f
message radio_initialisering side 5 - 810521/hko;
for k:= 1 step 1 until max_antal_kanaler do
begin
ss_radio_aktiver(k):=next_sem;
<*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>);
<*-3*>
ss_samtale_nedlagt(k):=next_sem;
<*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt( ):>);
<*-3*>
end;
for k:= 1, 2 do
begin
cs_radio_input(k):= next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_input(k),<:cs_radio_input( ):>);
<*-3*>
end;
i:= next_coru(405,3,true);
j:= new_activity(i,0,radio_input,z_fr_in,1);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
i:= next_coru(406,3,true);
j:= new_activity(i,0,radio_input,z_rf_in,2);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
cs_radio_ind:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
<*-3*>
cs_rad_ind_input:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_rad_ind_input,<:cs_rad_ind_input:>);
<*-3*>
i:= next_coru(401,<*ident radio_ind*>
3, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
radio_ind,next_op(data + 64));
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
cs_radio_ud:=next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>);
<*-3*>
cs_rad_ud_input:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_rad_ud_input,<:cs_rad_ud_input:>);
<*-3*>
i:= next_coru(402,<*ident radio_out*>
10,<*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
radio_ud,next_op(data + 64));
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
:6: radio trapaktion1.
\f
message radio trapaktion side 1 - 820301/hko;
skriv_kanal_tab(zbillede);
skriv_opkaldskø(zbillede);
skriv_radio_linietabel(zbillede);
skriv_radio_garagetabel(zbillede);
skriv_radio_områdetabel(zbillede);
:7: radio trapaktion2.
\f
message radio_finale side 1 - 810525/hko;
write(out,<:lukker radio:>); ud;
close(z_fr_in,true);
close(z_fr_out,true);
close(z_rf_in,true);
close(z_rf_out,true);
▶EOF◀