|
|
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: 124416 (0x1e600)
Types: TextFile
Names: »htradio «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦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:= 10+op_maske_lgd;
kanal_beskr_længde:= 12+op_maske_lgd+tv_maske_lgd;
radio_op_længde:= 30*2;
radio_pulje_størrelse:= 1+max_antal_taleveje;
: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_taleveje <* radio *>
+2; <* radio ind/-ud*>
max_semch:= max_semch
+1 <* cs_rad *>
+max_antal_taleveje <* cs_radio *>
+1 <* cs_radio_pulje *>
+1 <* cs_radio_kø *>
+1 <* cs_radio_medd *>
+1 <* cs_radio_adm *>
+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_taleveje <* bs_talevej_udkoblet *>
+max_sem;
max_op:=
+ radio_pulje_størrelse <* radio_pulje_operationer *>
+ 1 <* radio_medd *>
+ 1 <* radio_adm *>
+ max_antal_taleveje <* operationer for radio *>
+ 2 <* operationer for radio_ind/-ud *>
+ max_op;
max_netto_op:=
+ radio_pulje_størrelse * 60 <* radio_pulje_operationer *>
+ data + 6 <* radio_medd *>
+ max_antal_taleveje <* operationer for radio *>
* (data + radio_op_længde)
+ data + radio_op_længde <* operation for radio_adm *>
+ 2*(data + 64) <* operationer for radio_ind/-ud *>
+ 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_talevej_udkoblet,
cs_radio(1:max_antal_taleveje),
radio_linietabel(1:max_linienr//3+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),
hookoff_maske(1:(tv_maske_lgd//2)),
samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2));
integer field
kanal_tilstand,
kanal_id1,
kanal_id2,
kanal_spec,
kanal_alt_id1,
kanal_alt_id2;
integer array field
kanal_mon_maske,
kanal_alarm,
opkald_meldt;
integer
cs_rad,
cs_radio_medd,
cs_radio_adm,
cs_radio_ind,
cs_radio_ud,
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,
optaget_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(kanal_tab.iaf,3,15)<>15 then pos:= pos+1;
if pos>0 then
begin
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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;
if testbit22 and
(s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0)
then
delay(60);
end rad_in_fejl;
\f
message procedure afvent_radioinput side 1 - 880901/cl;
integer procedure afvent_radioinput(z_in,tlgr,rf);
value rf;
zone z_in;
integer array tlgr;
boolean rf;
begin
integer i, p, pos, tegn, ac, sum, csum, lgd;
long array field laf;
laf:= 0;
pos:= 1;
repeat
i:=readchar(z_in,tegn);
if i<>8 and pos<80 then skrivtegn(tlgr,pos,tegn);
until (i=8 and pos>1) or (tegn='em') or (pos>=80);
p:=pos;
repeat afsluttext(tlgr,p) until p mod 6 = 1;
<*+2*>if overvåget and (testbit36 or ((-,rf) and testbit38) or
(rf and testbit39)) then
disable begin
write(zrl,<<zd dd dd.dd >,now,
(if -,rf then <:fr-tlgr: :> else <:rf-answ: :>),tlgr.laf,
if tegn='em' then <:*timeout*:> else
if pos>=80 then <:*for langt*:> else <::>);
outchar(zrl,'nl');
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
((-,rf) and testbit38) or (rf and testbit39)) then
disable begin
write(zrl,<<zd dd dd.dd >,now,
(if rf then <:rf:> else <:fr:>),
<:-tlgr-checksumfejl: :>,csum,sum); outchar(zrl,'nl');
end;
<*-2*>
ac:= 6 <* checksumfejl *>
end
else
ac:= 0;
end
else ac:= 6; <* for kort telegram - retransmitter *>
end;
afvent_radioinput:= ac;
end;
\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 *******
a k l p m b n
l a y a o s ø
nr tv tilst + * l t t s n v d - type id1 id2 ttmm/ant -ej.op:>,
<*
01 ..... ..... x x x x x x x x x x .... ........ ........ .... .... ----
*>
"nl",1);
for i:=1 step 1 until max_antal_kanaler do
begin
ref:=(i-1)*kanal_beskr_længde;
t:=kanal_tab.ref.kanal_tilstand;
id1:=kanal_tab.ref.kanal_id1;
id2:=kanal_tab.ref.kanal_id2;
write(z,"nl",1,"sp",4,
<<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1);
for j:=11 step -1 until 2 do
write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1);
write(z,case t extract 2 +1 of
(<:- :>,<:OPK :>,<:MEDD:>,<:GNM :>),
"sp",1);
skriv_id(z,id1,9);
skriv_id(z,id2,9);
t:=kanal_tab.ref.kanal_spec;
write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8));
write(z,"nl",1,"sp",14,<:mon: :>);
for j:= max_antal_taleveje step -1 until 1 do
write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1"
else "."),1);
write(z,"sp",25-max_antal_taleveje);
skriv_id(z,kanal_tab.ref.kanal_alt_id1,9);
skriv_id(z,kanal_tab.ref.kanal_alt_id2,9);
end;
write(z,"nl",2,<:kanalflag::>,"nl",1);
outintbits_ia(z,kanalflag,1,op_maske_lgd//2);
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 :>,
<: sig omr :>,"nl",1);
for i:= 1 step 1 until max_antal_mobilopkald do
begin
ref:= i*opkaldskø_postlængde;
j:= opkaldskø.ref(1);
write(z,<< dddd>,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 extract 8);
j:= j shift (-8) 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);
j:= opkaldskø.ref(5);
write(z,if j shift (-20) <> 0 then <: B :> else <: S :>,
true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then
string område_navn(j extract 8) else <:---:>);
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::>,"nl",1);
outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2);
write(z,"nl",2);
end skriv_opkaldskø;
\f
message procedure skriv_radio_linietabel 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æstegn(radio_linietabel,i+1,j);
if j > 0 then
begin
k:= k +1;
write(z,<<dddd>,i,":",1,<<zd_>,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_linietabel;
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 (72<=k and k<=74) or k = 77
<*IN,O/EK,O/IN,R/EK,R/FO,L/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(talevej,op);
value talevej,op;
integer talevej,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,operatør;
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,
<:samtaleflag: :>,"nl",1);
out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2);
skriv_coru(z,coru_no(410+talevej));
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;
integer array field iaf1;
boolean skal_ud;
boolean procedure skal_udskrives(fordelt,aktuel);
value fordelt,aktuel;
integer fordelt,aktuel;
begin
boolean skal;
integer n;
integer array field iaf;
skal:= true;
if fordelt > 0 and fordelt<>aktuel then
begin
for n:= 0 step 1 until 3 do
begin
if bpl_tilst(operatør_stop(fordelt,n),1) > 0 then
begin
iaf:= operatør_stop(fordelt,n)*op_maske_lgd;
skal:= læsbit_ia(bpl_def.iaf,aktuel);
goto returner;
end;
end;
end;
returner:
skal_udskrives:= skal;
end;
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) extract 8;
if nr>64 then
begin
<*opk. primærfordelt til gruppe af btj.pl.*>
i:=0; skal_ud:=true; iaf1:=nr*op_maske_lgd;
while skal_ud and i<max_antal_operatører do
begin
i:=i+1;
if læsbit_ia(bpl_def.iaf1,i) then
skal_ud:= skal_ud and skal_udskrives(i,operatør);
end;
end
else
skal_ud:= skal_udskrives(nr,operatør);
if skal_ud then
<* if nr=0 or -,læsbit_ia(operatørmaske,nr) 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 extract 8;
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) extract 8; <*operatør*>
if 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 extract 8;
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ø:>,1);
<*-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_ia(operatør_maske,o) or o = 0 then
tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
else
begin
sætbit_ia(opkaldsflag,operatør,1);
sætbit_ia(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+talevej,cs_radio(talevej),
if id1 shift (-22) = 2 then 18 else 17);
d.vt_op.data(1):= id1;
d.vt_op.data(4):= omr;
signalch(cs_vt,vt_op,vt_optype or genoptype);
<*V*> waitch(cs_radio(talevej),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+talevej,cs_radio(talevej),
if id2 shift (-22) = 2 then 18 else 17);
d.vt_op.data(1):= id2;
d.vt_op.data(4):= omr;
signalch(cs_vt,vt_op,vt_optype or genoptype);
<*V*> waitch(cs_radio(talevej),vt_op,vt_optype,-1);
signalch(cs_vt_adgang,vt_op,true);
end;
kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:=
kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0;
kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand
shift (-10) extract 6 shift 10;
<* 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(talevej,op,retursem,flash);
value talevej,op,retursem,flash;
integer talevej,op,retursem;
boolean flash;
begin
integer array field opref;
opref:= op;
start_operation(opref,410+talevej,retursem,'A' shift 12 + 60);
d.opref.data(1):= talevej;
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(talevej,op,retursem);
value talevej,op,retursem;
integer talevej,op,retursem;
begin
integer i,res;
integer array field opref;
if læsbit_ia(hookoff_maske,talevej) then
begin
inspect(bs_talevej_udkoblet(talevej),i);
if i<=0 then
begin
opref:= op;
start_operation(opref,410+talevej,retursem,'D' shift 12 + 60);
d.opref.data(1):= talevej;
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_talevej_udkoblet(talevej));
end
else
res:= 0;
sætbit_ia(hookoff_maske,talevej,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) +200);
<*+2*>if testbit32 and overvåget or testbit28 then
skriv_radio(out,0);
<*-2*>
repeat
waitch(cs_radio(talevej),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(talevej));
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(4);
<*+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;
bus:= garage:= ll:= 0;
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+talevej,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 kanal_tab.iaf.kanal_tilstand extract 2<>0 and
kanal_tab.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+talevej,cs_radio(talevej),
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(talevej),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(talevej,rad_op,cs_radio(talevej),
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+talevej,cs_radio(talevej),
'H' shift 12 + 60);
d.rad_op.data(1):= talevej;
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(talevej),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+talevej,cs_radio(talevej),
'B' shift 12 + 60);
d.rad_op.data(1):= talevej;
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(talevej),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 and operatør>0 then tæl_opkald(j,1);
iaf:= (i-1)*kanalbeskrlængde;
skrivtegn(kanal_tab.iaf,1,talevej);
kanal_tab.iaf.kanal_id2:= kanal_tab.iaf.kanal_id1;
kanal_tab.iaf.kanal_alt_id2:= kanal_tab.iaf.kanal_alt_id1;
kanal_tab.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);
kanal_tab.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 kanal_tab.iaf.kanal_id1=0 then
kanal_tab.iaf.kanal_id1:= 10000;
kanal_tab.iaf.kanal_spec:=
if opgave <= 2 or opgave = 9 then ttmm else 0;
end;
end;
if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then
sætbit_ia(kanalflag,operatør,1);
\f
message procedure radio side 7 - 880930/cl;
end
else
begin
d.opref.resultat:= res;
if res=20 or res=52 then
begin <* tæl ej.forb og opt.kanal *>
for i:= 1 step 1 until max_antal_områder do
if læsbiti(d.rad_op.data(7),i) then
tæl_opkald(i,(if res=20 then 4 else 5));
end;
if d.opref.data(6)=0 then
res:= hookon(talevej,rad_op,cs_radio(talevej));
<* 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+talevej,cs_radio(talevej),
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(talevej),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 kanal_tab.iaf.kanal_id2 shift (-20) = 12 then
kanal_tab.iaf.kanal_id2 extract 20
else
if kanal_tab.iaf.kanal_id2<>0 then nr else 0;
if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej 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_ia(kanalflag,operatør,1);
goto radio_nedlæg;
end
else
if i<>0 or j<>0 then
res:= 49
else
if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then
res:= 49 <* ingen samtale igang *>
else
begin
res:= hookoff(talevej,rad_op,cs_radio(talevej),false);
if res=0 then
begin
start_operation(rad_op,410+talevej,cs_radio(talevej),
'B' shift 12 + 60);
d.rad_op.data(1):= talevej;
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(talevej),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.kanal_tilstand extract 10;
res:= 3;
end;
end;
end;
\f
message procedure radio side 9 - 880930/cl;
if res=3 then
begin
if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *>
else
sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
d.opref.data(6):= 12 shift 20 + nr;
i:= kanal_tab.iaf.kanal_id2;
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.kanal_tilstand shift (-16) = talevej then
sætbiti(kanal_tab.iaf.kanal_tilstand,5,1)
else
sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,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_ia(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(talevej,rad_op,cs_radio(talevej));
goto radio_nedlæg;
end;
iaf:= (nr-1)*kanal_beskr_længde;
if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
begin
if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and
kanal_tab.iaf.kanal_tilstand extract 2 = 3
then
res:= hookoff(talevej,rad_op,cs_radio(talevej),true)
else
if kanal_tab.iaf.kanal_tilstand 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(talevej,rad_op,cs_radio(talevej));
if res=0 then
begin
sætbiti(kanal_tab.iaf.kanal_tilstand,5,0);
kanal_tab.iaf.kanal_tilstand:=
kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3;
d.opref.data(6):= 0;
if kanal_tab.iaf.kanal_id2=0 then
kanal_tab.iaf.kanal_id2:= d.opref.data(5);
if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then
begin <* gennemstillet til anden kanal *>
iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1)
*kanalbeskrlængde;
sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0);
kanal_tab.iaf1.kanal_tilstand:=
kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3;
if kanal_tab.iaf1.kanal_id2=0 then
kanal_tab.iaf1.kanal_id2:= 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(talevej,rad_op,cs_radio(talevej));
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 kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
frigiv_kanal(d.opref.data(k) extract 20)
else
sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,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 kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
frigiv_kanal(i)
else
sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0);
end;
sætbit_ia(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+talevej,cs_radio(talevej),
'H' shift 12 + 60);
d.rad_op.data(1):= talevej;
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(talevej),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(talevej,radop,cs_radio(talevej));
goto radio_nedlæg;
end;
res:= hookoff(talevej,radop,cs_radio(talevej),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, j, k, 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 ii;
disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>);
if omfang > 0 then
disable begin integer x; long array field tx;
tx:= 0;
trap(slut);
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,
<: j: :>,j,"nl",1,
<: k: :>,k,"nl",1,
<: filref :>,filref,"nl",1,
<: zno: :>,zno,"nl",1,
<: answ: :>,answ.tx,"nl",1,
<: tlgr: :>,tlgr.tx,"nl",1,
<: spec: :>,spec,"nl",1);
trap(slut);
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æstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør);
if operatør < 0 or max_antal_operatører < operatør then
operatør:= 0;
if operatør=0 then
operatør:= (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=0 or -,læsbit_ia(operatørmaske,operatør) then
tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
else sæt_bit_ia(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 +type shift 8 +operatør extract 8;
opkaldskø.ref(5):= sig shift 20 + omr;
tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd);
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*> ac:= afvent_radioinput(z_fr_in,tlgr,false);
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;
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) extract 8;
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æsbit_ia(operatør_maske,o) or o=0 then
tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
else
begin
sætbit_ia(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;
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_taleveje 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ætbit_ia(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);
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
disable 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_taleveje 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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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_taleveje 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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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_taleveje then
ac:= 1
else
begin
inspect(bs_talevej_udkoblet(pnum),j);
if j>=0 then
begin
sætbit_ia(samtaleflag,pnum,1);
signal_bin(bs_mobil_opkald);
end;
if læsbit_ia(hookoff_maske,pnum) then
signalbin(bs_talevej_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);
i:= 0;
for j:= 1 step 1 until max_antal_kanaler do
if kanal_id(j) = ptyp shift 5 + pnum then i:= j;
if i<>0 then
begin
ref:= (i-1)*kanalbeskrlængde;
inspect(ss_samtale_nedlagt(i),j);
if j>=0 then
begin
sætbit_ia(samtaleflag,
tv_operatør(kanal_tab.ref.kanal_tilstand shift (-16)),1);
signalbin(bs_mobil_opkald);
end;
signal(ss_samtale_nedlagt(i));
if b_pn<>0 then frigiv_id(b_pn,b_pt);
begin
if kanal_tab.ref.kanal_id1<>0 and
(kanal_tab.ref.kanal_id1 shift (-22)<>0 or
kanal_tab.ref.kanal_id1 extract 14<>b_pn) then
frigiv_id(kanal_tab.ref.kanal_id1,b_pt);
if kanal_tab.ref.kanal_id2<>0 and
(kanal_tab.ref.kanal_id2 shift (-22)<>0 or
kanal_tab.ref.kanal_id2 extract 14<>b_pn) then
frigiv_id(kanal_tab.ref.kanal_id2,b_pt);
end;
sætbiti(optaget_flag,i,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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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 *>
long onavn;
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;
<* Alarmer for K12 = GLX ignoreres *>
<* 94.06.14/CL *>
<* Alarmer for K15 = HG ignoreres *>
<* 95.07.31/CL *>
<* Alarmer for K10 = FS ignoreres *>
<* 96.05.27/CL *>
if j>0 then
begin
onavn:= områdenavn(port_til_omr(ptyp shift 6 + pnum));
j:= (if (onavn = long<:GLX:>) or (onavn = long<:HG:>) or
(onavn = long<:FS:>) then 0 else j);
end;
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(kanal_tab.ref,3,bs) then
begin
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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));
skrivtegn(d.opref.data,i,' ');
hægtstring(d.opref.data,i,
string område_navn(kanal_til_omr(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;
tofrom(kanal_tab.ref.kanal_alarm,alle_operatører,op_maske_lgd);
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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(kanal_tab.ref.kanal_tilstand,11,bs extract 1);
end;
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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_taleveje do
if læsbit_ia(hookoff_maske,i) then
begin
signalbin(bs_talevej_udkoblet(i));
sætbit_ia(samtaleflag,tv_operatør(i),1);
end;
if antal_bits_ia(samtaleflag,1,max_antal_operatører)<>0 then
signal_bin(bs_mobil_opkald);
for i:= 1 step 1 until max_antal_kanaler do
begin
ref:= (i-1)*kanalbeskrlængde;
if kanal_tab.ref.kanal_tilstand extract 2 <> 0 then
begin
if kanal_tab.ref.kanal_id2<>0 and
kanal_tab.ref.kanal_id2 shift (-22)<>3
then
begin
signal(ss_samtale_nedlagt(i));
frigiv_id(kanal_tab.ref.kanal_id2,kanal_til_omr(i));
end;
if kanal_tab.ref.kanal_id1<>0 then
begin
signal(ss_samtale_nedlagt(i));
frigiv_id(kanal_tab.ref.kanal_id1,kanal_til_omr(i));
end;
end;
sæt_hex_ciffer(kanal_tab.ref,3,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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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;
<****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******>
if testbit21 then
begin
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; <*testbit21*>
end
else
if ttyp='Z' then
begin
<*+2*> if (testbit36 or testbit38) and overvåget then
disable begin
write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
outchar(zrl,'nl');
end;
<*-2*>
write(z_fr_out,"nl",1,answ.laf,"cr",1);
disable 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; long array field tx;
tx:= 0;
trap(slut);
write(z,"nl",1,
<: opref: :>,opref,"nl",1,
<: io-opref: :>,io_opref,"nl",1,
<: opgave: :>,opgave,"nl",1,
<: kode: :>,kode,"nl",1,
<: pos: :>,pos,"nl",1,
<: tegn: :>,tegn,"nl",1,
<: i: :>,i,"nl",1,
<: sum: :>,sum,"nl",1,
<: rc: :>,rc,"nl",1,
<: svar-status: :>,svar_status,"nl",1,
<: tlgr: ":>,tlgr.tx,<:":>,"nl",1,
<: answ: ":>,answ.tx,<:":>,"nl",1,
<::>);
skriv_coru(z,coru_no(402));
slut:
end; <*disable*>
end skriv_radio_ud;
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)+'@'); <*talevejsnr*>
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 2 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;
<**********************************************>
<* specialaktion p.g.a. modtagebesvær i COMET *>
if opgave='B' then delay(1);
<* 94.04.19/cl *>
<**********************************************>
<*+2*> if (testbit36 or testbit39) and overvåget then
disable begin
write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,tlgr.laf);
outchar(zrl,'nl');
end;
<*-2*>
setposition(z_rf_in,0,0);
write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
disable setposition(z_rf_out,0,0);
rc:= 0;
<* afvent svar*>
repeat
<*V*> svar_status:= afvent_radioinput(z_rf_in,answ,true);
if svar_status=6 then
begin
svar_status:= -3;
goto radio_ud_check;
end;
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:
rc:= rc+1;
if -3<=svar_status and svar_status< -1 then
disable begin
write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>);
setposition(z_rf_out,0,0);
<*+2*> if (testbit36 or testbit39) and overvåget then
begin
write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>);
outchar(zrl,'nl');
end;
<*-2*>
end
else
if svar_status=6 or svar_status=(-4) or svar_status=(-1) then
disable begin
write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
setposition(z_rf_out,0,0);
<*+2*> if (testbit36 or testbit39) and overvåget then
begin
write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,
tlgr.laf,<: (repeat):>); outchar(zrl,'nl');
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: :>,"nl",1);
outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
write(out,"nl",1,<:kanalflag: :>,"nl",1);
outintbits_ia(out,kanalflag,1,op_maske_lgd//2);
write(out,"nl",1,<:samtaleflag: :>,"nl",1);
outintbits_ia(out,samtaleflag,1,op_maske_lgd//2);
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,j,k,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,
<: j: :>,j,"nl",1,
<: k: :>,k,"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;
if -,testbit22 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);
end;
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:=operatør:=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 *> then
begin
if k = 5 or k=77 then
begin
<*V*> wait(bs_opkaldskø_adgang);
if k=5 then
begin
disable for iaf:= 0 step 512 until (max_linienr//768*512) do
begin
i:= læs_fil(1035,iaf//512+1,nr);
if i <> 0 then
fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
tofrom(radio_linietabel.iaf,fil(nr),
if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512
else ((max_linienr+1 - (iaf//2*3))+2)//3*2);
end;
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*>
if nr>0 then
begin
læs_tegn(radio_linietabel,nr+1,operatør);
if operatør>max_antal_operatører then operatør:= 0;
opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
operatør;
end;
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 opkaldskø.iaf(4) extract 8=0 and
opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
operatør;
end;
end;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
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 = 77*>
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.kanal_tilstand shift (-16) =
op_talevej(operatør) then
begin
tilst:= kanal_tab.iaf.kanal_tilstand extract 2;
if tilst <> 0 then
res:= 16; <*skærm optaget*>
end; <* kanal_tab(operatør) = operatør*>
end;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
sæt_bit_ia(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=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=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(kanal_tab.iaf.kanal_tilstand,11) == (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(kanal_tab.iaf.kanal_tilstand,11,k extract 1);
sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1);
end;
end;
d.op_ref.resultat:=res;
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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(kanal_tab.iaf,3,j) then
begin
tofrom(kanalflag,alle_operatører,op_maske_lgd);
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;
: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;
læsfil(1034,1,i);
tofrom(radio_områdetabel,fil(i),max_antal_områder*2);
opkald_meldt:= opkaldskø_postlængde - op_maske_lgd;
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;
for ref:= 0 step 512 until (max_linienr//768*512) do
begin
i:= læs_fil(1035,ref//512+1,j);
if i <> 0 then
fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
tofrom(radio_linietabel.ref,fil(j),
if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
else ((max_linienr+1 - (ref//2*3))+2)//3*2);
end;
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_alt_id1:= 10;
kanal_alt_id2:= 12;
kanal_mon_maske:= 12;
kanal_alarm:= kanal_mon_maske+tv_maske_lgd;
for i:= 1 step 1 until max_antal_kanaler do
begin
ref:= (i-1)*kanalbeskrlængde;
sæthexciffer(kanal_tab.ref,3,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(kanal_tab.ref.kanal_tilstand,11,1);
sætbiti(kanal_tab.ref.kanal_tilstand,10,1);
end;
end;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
tofrom(samtaleflag,ingen_operatører,op_maske_lgd);
tofrom(hookoff_maske,ingen_taleveje,tv_maske_lgd);
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_taleveje do
begin
cs_radio(k):=next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio( ):>);
<*-3*>
bs_talevej_udkoblet(k):= nextsem;
<*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_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;
laf:=raf:=0;
open(z_fr_in,8,radio_fr_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_navn.raf(increase(j)),1);
open(z_fr_out,4 shift 12 + 8,radio_fr_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_navn.raf(increase(j)),1);
ia(1):= 3 <*canonical*>;
ia(2):= 0 <*no echo*>;
ia(3):= 0 <*prompt*>;
ia(4):= 5 <*timeout*>;
setcspterm(radio_fr_navn.laf,ia);
open(z_rf_in,8,radio_rf_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_navn.raf(increase(j)),1);
open(z_rf_out,4 shift 12 + 8,radio_rf_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_navn.raf(increase(j)),1);
ia(1):= 3 <*canonical*>;
ia(2):= 0 <*no echo*>;
ia(3):= 0 <*prompt*>;
ia(4):= 5 <*timeout*>;
setcspterm(radio_rf_navn.laf,ia);
\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;
cs_radio_ind:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
<*-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*>
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;
write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1);
skriv_kanal_tab(zbillede);
skriv_opkaldskø(zbillede);
skriv_radio_linietabel(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◀