|
|
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: 121344 (0x1da00)
Types: TextFile
Names: »xhtoperatør «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦this⟧ »xhtoperatør «
operatør.
:1: operatør: parametererklæringer
message operatør_parametererklæringer side 1 - 810422/hko;
integer field
alarm_kmdo, alarm_tilst, alarm_gtilst, alarm_lgd;
real field
alarm_start;
integer
opk_alarm_tab_lgd;
:2: operatør: parameterinitialisering
message operatør_parameterinitialisering side 1 - 810422/hko;
<* felter i opkaldsalarmtabel *>
alarm_kmdo := 2;
alarm_tilst := 4;
alarm_gtilst:= 6;
alarm_lgd := 8;
alarm_start := 12;
opk_alarm_tab_lgd:= 12;
:3: operatør: claiming
\f
message operatør_claiming side 1 - 810520/hko;
max_coru:= max_coru +1 <* h_op *>
+1 <* alarmur *>
+1 <* opkaldsalarmer *>
+1 <* talevejsswitch *>
+1 <* tv_switch_adm *>
+1 <* tv_switch_input *>
+max_antal_operatører;
max_sem:= 1 <* bs_opk_alarm *>
+max_sem;
max_semch:= max_semch +1 <* cs_op *>
+1 <* cs_op_retur *>
+1 <* cs_opk_alarm_ur *>
+1 <* cs_opk_alarm_ur_ret *>
+1 <* cs_opk_alarm *>
+1 <* cs_talevejsswitch *>
+1 <* cs_tv_switch_adm *>
+1 <* cs_tvswitch_adgang *>
+1 <* cs_tvswitch_input *>
+1 <* cs_op_iomedd *>
+max_antal_operatører<* cs_operatør *>
+max_antal_operatører<* cs_op_fil *>;
max_op:= max_op + 1 <* talevejsoperation *>
+ 2 <* tv_switch_input *>
+ 1 <* op_iomedd *>
+ 1 <* opk_alarm_ur *>
+ max_antal_operatører;
max_netto_op:= filoplængde*max_antal_operatører
+ data+128 <* talevejsoperation *>
+ 2*(data+256) <* tv_switch_input *>
+ 60 <* op_iomedd *>
+ data <* opk_alarm_ur *>
+ max_netto_op;
:4: operatør: erklæringer
\f
message operatør_erklæringer side 1 - 810602/hko;
integer
cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm,
cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
integer array
operatørmaske(1:op_maske_lgd//2),
op_talevej(0:max_antal_operatører),
tv_operatør(0:max_antal_taleveje),
opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
ant_i_opkø,
cs_operatør,
cs_op_fil(1:max_antal_operatører);
zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
zone array z_op(max_antal_operatører,320,1,op_fejl);
\f
message procedure op_fejl side 1 - 830310/hko;
procedure op_fejl(z,s,b);
integer s,b;
zone z;
begin
disable begin
integer array iz(1:20);
integer i,j,k,n;
integer array field iaf,iaf1,msk;
boolean input;
real array field raf;
getzone6(z,iz);
iaf:=raf:=2;
input:= iz(13) = 1;
getnumber(iz.raf,9,j);
<*+2*> if testbit31 then
<**> begin
<**> write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1,
<**> <:s=:>); outintbits(out,s);
<**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
<**> else <:output:>,"nl",1);
<**> setposition(out,0,0);
<**> end;
<*-2*>
iaf:=j*terminal_beskr_længde;
k:=1;
i:= terminal_tab.iaf.terminal_tilstand;
if i shift(-21) < 4 and (s <> (1 shift 21 +2) <*or -,input*>) then
fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
1 shift 12 <*binært*> +1 <*fortsæt*>);
if s <> (1 shift 21 +2) then
begin
terminal_tab.iaf.terminal_tilstand:= 1 shift 23
+ terminal_tab.iaf.terminal_tilstand extract 23;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
sæt_bit_ia(opkaldsflag,j,0);
if sæt_bit_ia(operatørmaske,j,0)=1 then
for k:= j, 65 step 1 until top_bpl_gruppe do
begin
msk:= k*op_maske_lgd;
if læsbit_ia(bpl_def.msk,j) then
<**> begin
n:= 0;
for i:= 1 step 1 until max_antal_operatører do
if læsbit_ia(bpl_def.msk,i) then
begin
iaf1:= i*terminal_beskr_længde;
if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then
n:= n+1;
end;
bpl_tilst(j,1):= n;
end;
<**> <*
bpl_tilst(j,1):= bpl_tilst(j,1)-1;
*> end;
signal_bin(bs_mobil_opkald);
end;
if input or -,input then
begin
z(1):=real <:<'?'><'?'><'em'>:>;
b:=2;
end;
end; <*disable*>
end op_fejl;
\f
message procedure tvswitch_fejl side 1 - 940426/cl;
procedure tvswitch_fejl(z,s,b);
integer s,b;
zone z;
begin
disable begin
integer array iz(1:20);
integer i,j,k;
integer array field iaf;
boolean input;
real array field raf;
getzone6(z,iz);
iaf:=raf:=2;
input:= iz(13) = 1;
<*+2*> if testbit31 then
<**> begin
<**> write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1,
<**> <:s=:>); outintbits(out,s);
<**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
<**> else <:output:>,"nl",1);
<**> skrivhele(out,z,b,5);
<**> setposition(out,0,0);
<**> end;
<*-2*>
k:=1;
if s <> (1 shift 21 +2) then
fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
1 shift 12 <*binært*> +1 <*fortsæt*>);
if input or -,input then
begin
z(1):=real <:<'em'>:>;
b:=2;
end;
end; <*disable*>
end tvswitch_fejl;
procedure skriv_talevejs_tab(z);
zone z;
begin
write(z,"nl",2,<:talevejsswitch::>);
write(z,"nl",1,<: operatører::>,"nl",1);
for i:= 1 step 1 until max_antal_operatører do
begin
write(z,<< dd>,i,":",1,op_talevej(i));
if i mod 8=0 then outchar(z,'nl');
end;
write(z,"nl",1,<: taleveje::>,"nl",1);
for i:= 1 step 1 until max_antal_taleveje do
begin
write(z,<< dd>,i,":",1,tv_operatør(i));
if i mod 8=0 then outchar(z,'nl');
end;
write(z,"nl",3);
end;
\f
message procedure skriv_opk_alarm_tab side 1;
procedure skriv_opk_alarm_tab(z);
zone z;
begin
integer nr;
integer array field tab;
real t;
write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
<:operatør kmdo tilst gl.tilst længde start:>,"nl",1);
for nr:=1 step 1 until max_antal_operatører do
begin
tab:= (nr-1)*opk_alarm_tab_lgd;
write(z,<< dd >,nr,true,6,string bpl_navn(nr),<:: :>,
case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
<<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
<< zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
"nl",1);
end;
end;
\f
message procedure ht_symbol side 1 - 851001/cl;
procedure ht_symbol(z);
zone z;
write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:
@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ @@ @@
@@ @@ @@
@@ @@ @@
@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@
@@ @@
@@ @@
@@ @@
@@ @@@@@@@@@@@@@ @@
@@ @@ @@ @@
@@ @@ @@ @@
@@ @@ @@ @@
@@@@@@@@@@@@@ @@@@@@@@@@@@@
:>,"esc" add 128,1,<:Æ24;1H:>);
\f
message procedure definer_taster side 1 - 891214,cl;
procedure definer_taster(nr);
value nr;
integer nr;
begin
setposition(z_op(nr),0,0);
write(z_op(nr),
"esc" add 128,1, <:P1;2;0ø58/1B4E450D:>,
"esc" add 128,1, <:Ø:>, <* f1 = <esc>NE<cr> *>
"esc" add 128,1, <:P1;2;0ø59/1B4F500D:>,
"esc" add 128,1, <:Ø:>, <* f2 = <esc>OP<cr> *>
"esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>,
"esc" add 128,1, <:Ø:>, <* f3 = <esc>OP,V<cr> *>
"esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>,
"esc" add 128,1, <:Ø:>, <* f4 = <esc>OP,T<sp> *>
"esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>,
"esc" add 128,1, <:Ø:>, <* f5 = <esc>OP,A<sp> *>
"esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>,
"esc" add 128,1, <:Ø:>, <* s-f5 = <esc>OP,A<sp> *>
"esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>,
"esc" add 128,1, <:Ø:>, <* f6 = <esc>ME,A<sp> *>
"esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>,
"esc" add 128,1, <:Ø:>, <* s-f6 = <esc>ME,A<sp> *>
"esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>,
"esc" add 128,1, <:Ø:>, <* f7 = <esc>OP<sp> *>
"esc" add 128,1, <:P1;2;0ø5F/1B56450D:>,
"esc" add 128,1, <:Ø:>, <* f8 = <esc>VE<cr> *>
"esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>,
"esc" add 128,1, <:Ø:>, <* f9 = <esc>MO<sp> *>
"esc" add 128,1, <:P1;2;1ø60/1B520D:>,
"esc" add 128,1, <:Ø:>, <* s-f9 = <esc>R<cr> *>
"esc" add 128,1, <:P1;2;0ø61/1B53540D:>,
"esc" add 128,1, <:Ø:>, <* f10 = <esc>ST<cr> *>
"esc" add 128,1, <:P1;2;0ø62/1B474520:>,
"esc" add 128,1, <:Ø:>, <* f11 = <esc>GE<sp> *>
"esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>,
"esc" add 128,1, <:Ø:>, <* s-f11 = <esc>GE,G<sp> *>
"esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>,
"esc" add 128,1, <:Ø:>, <* f12 = <esc>GE,V<cr> *>
"esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>,
"esc" add 128,1, <:Ø:>, <* s-f12 = <esc>GE,T<sp> *>
"esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>,
"esc" add 128,1, <:Ø:>, <* Ins = <esc>VO,I<sp> *>
"esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>,
"esc" add 128,1, <:Ø:>, <* Del = <esc>VO,U<sp> *>
"esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>,
"esc" add 128,1, <:Ø:>, <* Home = <esc>VO,F<sp> *>
"esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>,
"esc" add 128,1, <:Ø:>, <* End = <esc>VO,R<sp> *>
"esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>,
"esc" add 128,1, <:Ø:>, <* PgUp = <esc>VO,L<sp> *>
"esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>,
"esc" add 128,1, <:Ø:>, <* PgDn = <esc>VO,B<sp> *>
"esc" add 128,1, <:P1;2;0ø0E/082008:>,
"esc" add 128,1, <:Ø:>, <* Back = <bs><sp><bs> *>
<::>);
end;
\f
message procedure skriv_terminal_tab side 1 - 820301/hko;
procedure skriv_terminal_tab(z);
zone z;
begin
integer array field ref;
integer t1,i,j,id,k;
write(z,"ff",1,<:
******* terminalbeskrivelser ********
m m n o
o o ø p
nr tilst - vnt - n b d t type ident id i kø:>);
for i:=1 step 1 until max_antal_operatører do
begin
ref:=i*terminal_beskr_længde;
t1:=terminal_tab.ref(1);
id:=terminal_tab.ref(2);
k:=terminal_tab.ref(3);
write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
t1 shift(-16) extract 5,t1 shift(-12) extract 4,
t1 shift(-6) extract 6,"sp",3);
for j:=5 step -1 until 2 do
write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
write(z,case t1 extract 2 +1 of (<: - :>,<:OPK :>,<:MEDD:>,<:GNM :>),
"sp",4);
skriv_id(z,id,9);
skriv_id(z,k,9);
end;
write(z,"nl",2,<:samtaleflag::>,"nl",1);
outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
write(z,"nl",1);
end skriv_terminal_tab;
\f
message procedure h_operatør side 1 - 810520/hko;
<* hovedmodulkorutine for operatørterminaler *>
procedure h_operatør;
begin
integer array field op_ref;
integer k,nr,ant,ref,dest_sem;
procedure skriv_hoperatør(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ hovedmodul operatør :>);
if omfang>0 then
disable begin integer x;
trap(slut);
write(zud,"nl",1,
<: op_ref: :>,op_ref,"nl",1,
<: nr: :>,nr,"nl",1,
<: ant: :>,ant,"nl",1,
<: ref: :>,ref,"nl",1,
<: k: :>,k,"nl",1,
<: dest_sem: :>,dest_sem,"nl",1,
<::>);
skriv_coru(zud,coru_no(200));
slut:
end;
end skriv_hoperatør;
trap(hop_trap);
stack_claim(if cm_test then 198 else 146);
<*+2*>
if testbit8 and overvåget or testbit28 then
skriv_hoperatør(out,0);
<*-2*>
\f
message procedure h_operatør side 2 - 820304/hko;
repeat
wait_ch(cs_op,op_ref,true,-1);
<*+4*>
if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0
then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1);
<*-4*>
k:=d.op_ref.opkode extract 12;
dest_sem:=
if k=0 and d.opref.kilde=299 then cs_talevejsswitch else
if k=0 then cs_operatør(d.op_ref.kilde mod 100) else
if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else
if k=4 then cs_operatør(d.op_ref.data(2)) else
if k=40 then 0
else -1;
<*+4*>
if dest_sem=-1 then
begin
fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1);
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
end
else
<*-4*>
if k=40 then
begin
dest_sem:= d.op_ref.retur;
d.op_ref.retur:= cs_op_retur;
for nr:= 1 step 1 until max_antal_operatører do
begin
inspect_ch(cs_operatør(nr),genoptype,ant);
if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)
or læsbit_ia(samtaleflag,nr))
and læsbit_ia(operatørmaske,nr) then
begin
ref:= op_ref;
signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
<*V*> wait_ch(cs_op_retur,op_ref,true,-1);
<*+4*> if op_ref <> ref then
fejlreaktion(11<*fr.post*>,op_ref,
<:opdater opkaldskø,retur:>,0);
<*-4*>
end;
end;
d.op_ref.retur:= dest_sem;
signal_ch(dest_sem,op_ref,d.op_ref.optype);
end
else
begin
\f
message procedure h_operatør side 3 - 810601/hko;
if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
begin
iaf:=d.op_ref.data(1)*terminal_beskr_længde;
terminal_tab.iaf.terminal_tilstand:= 7 shift 21
+terminal_tab.iaf.terminal_tilstand extract 21;
end;
signal_ch(dest_sem,op_ref,d.op_ref.optype);
end;
until false;
hop_trap:
disable skriv_hoperatør(zbillede,1);
end h_operatør;
\f
message procedure operatør side 1 - 820304/hko;
procedure operatør(nr);
value nr;
integer nr;
begin
integer array field op_ref,ref,vt_op,iaf,tab;
integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
kanal,opgave,pos,indeks,sep,sluttegn,rkom,
vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
real kommstart,kommslut;
\f
message procedure operatør side 1a - 820301/hko;
procedure skriv_operatør(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin integer i;
i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
write(zud,"sp",26-i);
if omfang > 0 then
disable begin
integer x;
trap(slut);
write(zud,"nl",1,
<: op-ref: :>,op_ref,"nl",1,
<: kode: :>,kode,"nl",1,
<: aktion: :>,aktion,"nl",1,
<: ref: :>,ref,"nl",1,
<: vt_op: :>,vt_op,"nl",1,
<: iaf: :>,iaf,"nl",1,
<: status: :>,status,"nl",1,
<: tilstand: :>,tilstand,"nl",1,
<: bv: :>,bv,"nl",1,
<: bs: :>,bs,"nl",1,
<: bs-tilst: :>,bs_tilst,"nl",1,
<: kanal: :>,kanal,"nl",1,
<: opgave: :>,opgave,"nl",1,
<: pos: :>,pos,"nl",1,
<: indeks: :>,indeks,"nl",1,
<: sep: :>,sep,"nl",1,
<: sluttegn: :>,sluttegn,"nl",1,
<: vogn: :>,vogn,"nl",1,
<: ll: :>,ll,"nl",1,
<: garage: :>,garage,"nl",1,
<: skærmmåde: :>,skærmmåde,"nl",1,
<: res: :>,res,"nl",1,
<: tab: :>,tab,"nl",1,
<::>);
skriv_coru(zud,coru_no(200+nr));
slut:
end;
end skriv_operatør;
real procedure now;
begin
real f,r,r1; long l;
systime(1,0,r); l:=r*100; f:=(l mod 100)/100;
systime(4,r,r1);
now:= r1+f;
end;
\f
message procedure skærmstatus side 1 - 810518/hko;
integer
procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
integer tilstand,b_v,b_s,b_s_tilst;
begin
integer i,j;
i:= terminal_tab.ref(1);
b_s:= terminal_tab.ref(2);
b_s_tilst:= i extract 12;
j:= b_s_tilst extract 3;
b_v:= i shift (-12) extract 4;
tilstand:= i shift (-21);
skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
if b_v = 0 and j = 1<*opkald*> then 1 else
if b_v = 0 and j = 2<*specialopkald*> then 2 else
if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
end skærmstatus;
\f
message procedure skriv_skærm side 1 - 810522/hko;
procedure skriv_skærm(nr);
value nr;
integer nr;
begin
integer i;
disable definer_taster(nr);
skriv_skærm_maske(nr);
skriv_skærm_opkaldskø(nr);
skriv_skærm_b_v_s(nr);
for i:= 1 step 1 until max_antal_kanaler do
skriv_skærm_kanal(nr,i);
cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
end skriv_skærm;
\f
message procedure skriv_skærm_id side 1 - 830310/hko;
procedure skriv_skærm_id(nr,id,nød);
value nr,id,nød;
integer nr,id;
boolean nød;
begin
integer linie,løb,bogst,i,p;
i:= id shift (-22);
case i+1 of
begin
begin <* busnr *>
p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>,
(id extract 14) mod 10000);
if id shift (-14) extract 8 > 0 then
p:= p+write(z_op(nr),".",1,
string bpl_navn(id shift (-14) extract 8));
write(z_op(nr),"sp",11-p);
end;
begin <*linie/løb*>
linie:= id shift (-12) extract 10;
bogst:= id shift (-7) extract 5;
if bogst > 0 then bogst:= bogst +'A'-1;
løb:= id extract 7;
write(z_op(nr),if nød then "*" else "sp",1,
"sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>,
false add bogst,1,"/",1,løb,
"sp",if løb > 9 then 3 else 4);
end;
begin <*gruppe*>
write(z_op(nr),<:GRP :>);
if id shift (-21) extract 1 = 1 then
begin <*specialgruppe*>
løb:= id extract 7;
write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>,
<<d>,løb,"sp",2);
end
else
begin
linie:= id shift (-5) extract 10;
bogst:= id extract 5;
if bogst > 0 then bogst:= bogst +'A'-1;
write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie,
false add bogst,1,"sp",2);
end;
end;
<* kanal eller område *>
begin
linie:= (id shift (-20) extract 2) + 1;
case linie of
begin
write(z_op(nr),"sp",11-write(z_op(nr),
string kanal_navn(id extract 20)));
write(z_op(nr),<:K*:>,"sp",9);
write(z_op(nr),"sp",11-write(z_op(nr),
<:OMR :>,string område_navn(id extract 20)));
write(z_op(nr),<:ALLE:>,"sp",7);
end;
end;
end <* case i *>
end skriv_skærm_id;
\f
message procedure skriv_skærm_kanal side 1 - 820301/hko;
procedure skriv_skærm_kanal(nr,kanal);
value nr,kanal;
integer nr,kanal;
begin
integer i,j,k,t,omr;
integer array field tref,kref;
boolean nød;
tref:= nr*terminal_beskr_længde;
kref:= (kanal-1)*kanal_beskr_længde;
t:= kanaltab.kref.kanal_tilstand;
j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *>
k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *>
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),kanal+2,28);
write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else
if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else
" ",1," ",1);
write(z_op(nr),true,6,string kanal_navn(kanal));
omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then
pabx_id(kanal_id(kanal) extract 5)
else
radio_id(kanal_id(kanal) extract 5);
for i:= -2 step 1 until 0 do
begin
write(z_op(nr),
if område_id(omr,1) shift (8*i) extract 8 = 0 then " "
else false add (område_id(omr,1) shift (8*i) extract 8),1);
end;
write(z_op(nr),<:: :>);
i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*>
if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then
begin
sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0);
write(z_op(nr)<* ,<:ALARM !:>,"bel",1 *>,"esc" add 128,1,<:ÆK:>);
end
else
if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then
write(z_op(nr),<:-:><*UDE AF DRIFT*>,"esc" add 128,1,<:ÆK:>)
else
if (i > 0 and i <> nr) or (j = kanal <* kanal = kanalnr for ventepos *>
or (terminal_tab.tref.terminal_tilstand shift (-21) = 1
<*tilst=samtale*> and k extract 22 = kanal)) then
begin
write(z_op(nr),<:OPT :>);
if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i)
else write(z_op(nr),string bpl_navn(i));
write(z_op(nr),"esc" add 128,1,<:ÆK:>);
end
else
if kanaltab.kref.kanal_tilstand shift (-16) = 0 then
write(z_op(nr),"esc" add 128,1,<:ÆK:>)
else
begin
i:= kanaltab.kref.kanal_id1;
nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3);
skriv_skærm_id(nr,i,nød);
write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>);
i:= kanaltab.kref.kanal_id2;
if i<>0 then skriv_skærm_id(nr,i,false);
write(z_op(nr),"esc" add 128,1,<:ÆK:>);
end;
<*V*> setposition(z_op(nr),0,0);
end skriv_skærm_kanal;
\f
message procedure skriv_skærm_b_v_s side 1 - 810601/hko;
procedure skriv_skærm_b_v_s(nr);
value nr;
integer nr;
begin
integer i,j,k,kv,ks,t;
integer array field tref,kref;
tref:= nr*terminal_beskr_længde;
i:= terminal_tab.tref.terminal_tilstand;
kv:= i shift (-12) extract 4;
ks:= terminaltab.tref(2) extract 20;
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),18,28);
write(z_op(nr),"esc" add 128,1,<:ÆK:>);
cursor(z_op(nr),20,28);
write(z_op(nr),"esc" add 128,1,<:ÆK:>);
cursor(z_op(nr),21,28);
write(z_op(nr),"esc" add 128,1,<:ÆK:>);
cursor(z_op(nr),20,28);
if op_talevej(nr)<>0 then
begin
cursor(z_op(nr),18,28);
write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
end;
if kv <> 0 then
begin
kref:= (kv-1)*kanal_beskr_længde;
j:= if kv<>ks then kanaltab.kref.kanal_id1
else kanaltab.kref.kanal_id2;
k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
else kanaltab.kref.kanal_alt_id2;
write(z_op(nr),true,6,string kanal_navn(kv));
skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
skriv_skærm_id(nr,k,false);
write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
end;
cursor(z_op(nr),21,28);
j:= terminal_tab.tref(2);
if i shift (-21) <> 0 <*ikke ledig*> then
begin
\f
message procedure skriv_skærm_b_v_s side 2 - 841210/cl;
if i shift (-21) = 1 <*samtale*> then
begin
if j shift (-20) = 12 then
begin
write(z_op(nr),true,6,string kanal_navn(ks));
end
else
begin
write(z_op(nr),true,6,<:K*:>);
k:= 0;
while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
k:= k+1;
ks:= k;
end;
kref:= (ks-1)*kanal_beskr_længde;
t:= kanaltab.kref.kanaltilstand;
skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
t shift (-3) extract 1 = 1);
skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
if t shift (-5) extract 1 = 1 then <:MON :> else
if t shift (-4) extract 1 = 1 then <:BSV :> else
if t shift (-6) extract 1 = 1 then <:PAS :> else
if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
if t shift (-9) extract 1 = 1 then
write(z_op(nr),<:ALLE :>);
if t shift (-8) extract 1 = 1 then
write(z_op(nr),<:KATASTROFE :>);
k:= kanaltab.kref.kanal_spec;
if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
write(z_op(nr),<<zd.dd>,(k extract 12)/100);
end
else <* if i shift (-21) = 2 <+optaget+> then *>
begin
write(z_op(nr),<:K-:>,"sp",3);
if j <> 0 then
skriv_skærm_id(nr,j,false)
else
begin
j:=terminal_tab.tref(3);
skriv_skærm_id(nr,j,
false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
else 0));
end;
write(z_op(nr),<:OPT:>);
end;
end;
<*V*> setposition(z_op(nr),0,0);
end skriv_skærm_b_v_s;
\f
message procedure skriv_skærm_maske side 1 - 810511/hko;
procedure skriv_skærm_maske(nr);
value nr;
integer nr;
begin
integer i;
<*V*> setposition(z_op(nr),0,0);
write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
"sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
"sp",1,"*",5,"nl",1,"-",80);
for i:= 3 step 1 until 21 do
begin
cursor(z_op(nr),i,26);
outchar(z_op(nr),'!');
end;
cursor(z_op(nr),22,1);
write(z_op(nr),"-",80);
cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
end skriv_skærm_maske;
\f
message procedure skal_udskrives side 1 - 940522/cl;
boolean procedure skal_udskrives(fordelt_til,aktuel_skærm);
value fordelt_til,aktuel_skærm;
integer fordelt_til,aktuel_skærm;
begin
boolean skal_ud;
integer n;
integer array field iaf;
skal_ud:= true;
if fordelt_til > 0 and fordelt_til<>aktuel_skærm then
begin
for n:= 0 step 1 until 3 do
begin
if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then
begin
iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd;
skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm);
goto returner;
end;
end;
end;
returner:
skal_udskrives:= skal_ud;
end;
message procedure skriv_skærm_opkaldskø side 1 - 820301/hko;
procedure skriv_skærm_opkaldskø(nr);
value nr;
integer nr;
begin
integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo;
integer array field ref,iaf,tab;
boolean skal_ud;
<*V*> wait(bs_opkaldskø_adgang);
setposition(z_op(nr),0,0);
ant:= 0; kmdo:= 0;
tab:= (nr-1)*opk_alarm_tab_lgd;
ref:= første_nødopkald;
if ref=0 then ref:=første_opkald;
while ref <> 0 do
begin
i:= opkaldskø.ref(4);
operatør:= i extract 8;
type:=i shift (-8) extract 4;
<* skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør);
*>
if operatør > 64 then
begin
<* fordelt til gruppe af betjeningspladser *>
i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd;
while skal_ud and i<max_antal_operatører do
begin
i:=i+1;
if læsbit_ia(bpl_def.iaf,i) then
skal_ud:= skal_ud and skal_udskrives(i,nr);
end;
end
else
skal_ud:= skal_udskrives(operatør,nr);
if skal_ud then
begin
ant:= ant +1;
if ant < 6 then
begin
<*V*> cursor(z_op(nr),ant*2+1,3);
ttmm:= i shift (-12);
vogn:= opkaldskø.ref(3);
if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22;
skriv_skærm_id(nr,vogn,type=2);
write(z_op(nr),true,4,
string område_navn(opkaldskø.ref(5) extract 4),
<<zd.dd>,ttmm/100.0);
if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then
begin
if opkaldskø.ref(5) extract 4 <= 2 or
opk_alarm.tab.alarm_lgd = 0 then
begin
if type=2 then
write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1)
else
write(z_op(nr),"bel",1);
end
else if type>kmdo then kmdo:= type;
sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1);
end;
end;<* ant < 6 *>
end;<* operatør ok *>
ref:= opkaldskø.ref(1) extract 12;
if ref = 0 and type = 2<*nød*> then ref:= første_opkald;
end;
\f
message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;
signal_bin(bs_opkaldskø_adgang);
if kmdo > opk_alarm.tab.alarm_tilst and
kmdo > opk_alarm.tab.alarm_kmdo then
begin
opk_alarm.tab.alarm_kmdo:= kmdo;
signal_bin(bs_opk_alarm);
end;
if ant > 5 then
begin
cursor(z_op(nr),13,9);
write(z_op(nr),<<+ddd>,ant-5);
end
else
begin
for i:= ant +1 step 1 until 6 do
begin
cursor(z_op(nr),i*2+1,1);
write(z_op(nr),"sp",25);
end;
end;
ant_i_opkø(nr):= ant;
cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
end skriv_skærm_opkaldskø;
\f
message procedure operatør side 2 - 810522/hko;
trap(op_trap);
stack_claim((if cm_test then 200 else 146)+24+48+80+175);
ref:= nr*terminal_beskr_længde;
tab:= (nr-1)*opk_alarm_tab_lgd;
skærmmåde:= 0; <*normal*>
if operatør_auto_include(nr) then
begin
waitch(cs_att_pulje,opref,true,-1);
i:= operatør_auto_include(nr) extract 2;
if i<>3 then i:= 0;
start_operation(opref,101,cs_att_pulje,i shift 12 +1);
d.opref.data(1):= nr;
signalch(cs_rad,opref,gen_optype or io_optype);
end;
<*+2*>
if testbit8 and overvåget or testbit28 then
skriv_operatør(out,0);
<*-2*>
\f
message procedure operatør side 3 - 810602/hko;
repeat
<*V*> wait_ch(cs_operatør(nr),
op_ref,
true,
-1<*timeout*>);
<*+2*>
if testbit9 and overvåget then
disable begin
write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
<: til operatør :>,nr);
skriv_op(out,op_ref);
end;
<*-2*>
monitor(8)reserve process:(z_op(nr),0,ia);
kode:= d.op_ref.op_kode extract 12;
i:= terminal_tab.ref.terminal_tilstand;
status:= i shift(-21);
opgave:=
if kode=0 then 1 <* indlæs kommando *> else
if kode=1 then 2 <* inkluder *> else
if kode=2 then 3 <* ekskluder *> else
if kode=40 then 4 <* opdater skærm *> else
if kode=43 then 5 <* opkald etableret *> else
if kode=4 then 6 <* radiokanal ekskluderet *> else
0; <* afvises *>
aktion:= case status +1 of(
<* status *> <* opgave: 0 1 2 3 4 5 6 *>
<* 0 klar *>(case opgave+1 of( 0, 1, -4, 3, 4, -4, 6)),
<* 1 samtale *>(case opgave+1 of( 0, 1, -4, -5, 4, -4, 6)),
<* 2 optaget *>(case opgave+1 of( 0, 1, -4, -5, 4, 5, 6)),
<* 3 stoppet *>(case opgave+1 of( 0, 2, 2, 3, -4, -4, -4)),
<* 4 klar (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6)),
<* 5 samt.(fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6)),
<* 6 opt. (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, 5, -4)),
<* 7 ej knyttet *>(case opgave+1 of( 0, -4, 2, -4, -4, -4, -4)),
-1);
\f
message procedure operatør side 4 - 810424/hko;
case aktion+6 of
begin
begin
<*-5: terminal optaget *>
d.op_ref.resultat:= 16;
afslut_operation(op_ref,-1);
end;
begin
<*-4: operation uden virkning *>
afslut_operation(op_ref,-1);
end;
begin
<*-3: ulovlig operationskode *>
fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
afslut_operation(op_ref,-1);
end;
begin
<*-2: ulovligt operatørterminal_nr *>
fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
afslut_operation(op_ref,-1);
end;
begin
<*-1: ulovlig operatørtilstand *>
fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
afslut_operation(op_ref,-1);
end;
begin
<* 0: ikke implementeret *>
fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
afslut_operation(op_ref,-1);
end;
begin
\f
message procedure operatør side 5 - 851001/cl;
<* 1: indlæs kommando *>
<*V*> læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn);
if opk_alarm.tab.alarm_tilst > 0 then
begin
opk_alarm.tab.alarm_kmdo:= 3;
signal_bin(bs_opk_alarm);
pass;
end;
if d.op_ref.resultat > 3 then
begin
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,pos,
d.op_ref.resultat);
end
else if d.op_ref.resultat = -1 then
begin
skærmmåde:= 0;
skrivskærm(nr);
end
else if d.op_ref.resultat>0 then
begin <*godkendt*>
kode:=d.op_ref.opkode;
i:= kode extract 12;
j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else
if kode = 19 then 1 <*VO,S *> else
if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else
if kode = 9 or kode = 10 then 2 <*VO,L/VO,B*> else
if kode = 6 then 4 <*STop*> else
if 45<=kode and kode<=63 then 3 <*radiokom.*> else
if kode = 30 then 5 <*SP,D*> else
if kode = 31 then 6 <*SP*> else
if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else
if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else
if kode = 83 then 8 <*SL*> else
if kode = 68 then 9 <*ST,D*> else
if kode = 69 then 10 <*ST,V*> else
if kode = 36 then 11 <*AL*> else
0;
if j > 0 then
begin
case j of
begin
begin
\f
message procedure operatør side 6 - 851001/cl;
<* 1 indsæt/udtag/flyt bus i vogntabel *>
vogn:=ia(1);
ll:=ia(2);
kanal:= if kode=11 or kode=19 then ia(3) else
if kode=12 then ia(2) else 0;
<*V*> wait_ch(cs_vt_adgang,
vt_op,
gen_optype,
-1<*timeout sek*>);
start_operation(vtop,200+nr,cs_operatør(nr),
kode);
d.vt_op.data(1):=vogn;
if kode=11 or kode=19 or kode=20 or kode=24 then
d.vt_op.data(2):=ll;
if kode=19 then d.vt_op.data(3):= kanal else
if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
indeks:= vt_op;
signal_ch(cs_vt,
vt_op,
gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),
vt_op,
op_optype,
-1<*timeout sek*>);
<*+2*> if testbit10 and overvåget then
disable begin
write(out,"nl",1,<:operatør :>,<<d>,nr,
<:: operation retur fra vt:>);
skriv_op(out,vt_op);
end;
<*-2*>
<*+4*> if vt_op<>indeks then
fejl_reaktion(11<*fremmede op*>,op_ref,
<:operatør-kommando:>,0);
<*-4*>
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
<*V*> skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or
d.vt_op.resultat = 12 then d.vt_op.data(3)
else vt_op,-1,d.vt_op.resultat);
d.vt_op.optype:= gen_optype or vt_optype;
disable afslut_operation(vt_op,cs_vt_adgang);
end;
begin
\f
message procedure operatør side 7 - 810921/hko,cl;
<* 2 vogntabel,linienr/-,busnr *>
d.op_ref.retur:= cs_operatør(nr);
tofrom(d.op_ref.data,ia,10);
indeks:= op_ref;
signal_ch(cs_vt,op_ref,gen_optype or op_optype);
wait_ch(cs_operatør(nr),
op_ref,
op_optype,
-1<*timeout*>);
<*+2*> if testbit10 and overvåget then
disable begin
write(out,"nl",1,<:operatør operation retur fra vt:>);
skriv_op(out,op_ref);
end;
<*-2*>
<*+4*>
if indeks <> op_ref then
fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
<*-4*>
i:= d.op_ref.resultat;
if i = 0 or i > 3 then
begin
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
end
else
begin
integer antal,fil_ref;
skærm_måde:= 1;
antal:= d.op_ref.data(6);
fil_ref:= d.op_ref.data(7);
<*V*> setposition(z_op(nr),0,0);
write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
"sp",14,"*",10,"sp",6,
<:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
<*V*> setposition(z_op(nr),0,0);
\f
message procedure operatør side 8 - 841213/cl;
pos:= 1;
while pos <= antal do
begin
integer bogst,løb;
disable i:= læs_fil(fil_ref,pos,j);
if i <> 0 then
fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
else
begin
vogn:= fil(j,1) shift (-24) extract 24;
løb:= fil(j,1) extract 24;
if d.op_ref.opkode=9 then
begin i:=vogn; vogn:=løb; løb:=i; end;
ll:= løb shift (-12) extract 10;
bogst:= løb shift (-7) extract 5;
if bogst > 0 then bogst:= bogst +'A'-1;
løb:= løb extract 7;
vogn:= vogn extract 14;
i:= d.op_ref.opkode-8;
for i:= i,i+1 do
begin
j:= (i+1) extract 1;
case j +1 of
begin
write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
false add bogst,1,"/",1,<<d__>,løb);
write(z_op(nr),<<dddd>,vogn,"sp",1);
end;
end;
if pos mod 5 = 0 then
begin
outchar(z_op(nr),'nl');
<*V*> setposition(z_op(nr),0,0);
end
else write(z_op(nr),"sp",3);
end;
pos:=pos+1;
end;
write(z_op(nr),"*",1,"nl",1);
\f
message procedure operatør side 8a- 810507/hko;
d.opref.opkode:=104; <*slet-fil*>
d.op_ref.data(4):=filref;
indeks:=op_ref;
signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
<*+2*> if testbit10 and overvåget then
disable begin
write(out,"nl",1,<:operatør, slet-fil retur:>);
skriv_op(out,op_ref);
end;
<*-2*>
<*+4*> if op_ref<>indeks then
fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
<*-4*>
if d.op_ref.data(9)<>0 then
fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
<:operatør, slet_fil:>,1);
end;
end;
begin
\f
message procedure operatør side 9 - 830310/hko;
<* 3 radio_kommandoer *>
kode:= d.op_ref.opkode;
rkom:= kode-44;
disable if testbit14 then
begin
systime(1,0,kommstart);
write(out,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,<:":>,
string bpl_navn(nr),<:" kmdo: :>,case rkom of (
<:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
<:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
<:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
<:GE,T:>),<: start:>);
ud;
end;
d.op_ref.data(4):= nr; <*operatør*>
opgave:=
if kode = 45 <*OP *> then 1 else
if kode = 46 <*ME *> then 2 else
if kode = 47 <*OP,G*> then 3 else
if kode = 48 <*ME,G*> then 4 else
if kode = 49 <*OP,A*> then 5 else
if kode = 50 <*ME,A*> then 6 else
if kode = 51 <*KA,C*> then 7 else
if kode = 52 <*KA,P*> then 8 else
if kode = 53 <*OP,L*> then 9 else
if kode = 54 <*MO *> then (if ia(1)=0 then 11 else 10) else
if kode = 55 <*VE *> then 14 else
if kode = 56 <*NE *> then 12 else
if kode = 57 <*OP,V*> then 1 else
if kode = 58 <*OP,T*> then 1 else
if kode = 59 <*R *> then 13 else
if kode = 60 <*GE *> then 15 else
if kode = 61 <*GE,G*> then 16 else
if kode = 62 <*GE,V*> then 15 else
if kode = 63 <*GE,T*> then 15 else
-1;
<*+4*> if opgave < 0 then
fejlreaktion(2<*operationskode*>,kode,
<:operatør, radio-kommando :>,0);
<*-4*>
status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
i:= d.op_ref.data(2):= ia(1); <* ident.*>
if 5<=opgave and opgave<=8 then
d.opref.data(2):= -1;
if opgave=13 then d.opref.data(2):=
(if læsbit_i(terminaltab.ref.terminaltilstand,11)
then 0 else 1);
if opgave = 14 then d.opref.data(2):= 1;
if opgave=7 or opgave=8 then
d.opref.data(3):= -1
else
if opgave=5 or opgave=6 then
begin
if ia(1) shift (-20) = 15 then
begin
d.opref.data(3):= 15 shift 20;
for j:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (j-1)*kanalbeskrlængde;
if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and
læsbit_i(ia(1),kanal_til_omr(j)) then
sætbit_i(d.opref.data(3),kanal_til_omr(j),1);
end;
end
else
d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3
else ia(1);
end
else
if kode = 57 then d.opref.data(3):= 2 else
if kode = 58 then d.opref.data(3):= 1 else
if kode = 62 then d.opref.data(3):= 2 else
if kode = 63 then d.opref.data(3):= 1 else
d.opref.data(3):= ia(2);
res:=
if (opgave=1 or opgave=3 or opgave=15 or opgave=16) and
status>1 then 16 <*skærm optaget*> else
if (opgave=1 or opgave=3) and status=0 then 1 else
if (opgave=15 or opgave=16) and status=0 then 21 else
if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then
(if (d.opref.data(3)=1 or d.opref.data(3)=2) and
d.opref.data(3) = kanal_til_omr(bs extract 6)
then 52 else 1) else
if opgave<11 and status>0 then 16 else
if opgave=11 and status<2 then 21 else
if opgave=12 and status=0 then 22 else
if opgave=13 and status=0 then 49 else
if opgave=14 and status<>3 then 21 else 1;
if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then
begin <* specialbetingelser for TLF og VHF *>
if (1<opgave and opgave<9) or opgave=16 then res:= 51;
end;
if skærmmåde<>0 then
begin skærm_måde:= 0; skriv_skærm(nr); end;
kode:= opgave;
if opgave = 15 then opgave:= 1 else
if opgave = 16 then opgave:= 3;
\f
message procedure operatør side 10 - 810616/hko;
<* tilknyt talevej (om nødvendigt) *>
if res = 1 and op_talevej(nr)=0 then
begin
i:= sidste_tv_brugt;
repeat
i:= (i mod max_antal_taleveje)+1;
if tv_operatør(i)=0 then
begin
tv_operatør(i):= nr;
op_talevej(nr):= i;
end;
until op_talevej(nr)<>0 or i=sidste_tv_brugt;
if op_talevej(nr)=0 then
res:=61
else
begin
sidste_tv_brugt:=
(sidste_tv_brugt mod max_antal_taleveje)+1;
<*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
start_operation(iaf,200+nr,cs_operatør(nr),
'A' shift 12 + 44);
d.iaf.data(1):= op_talevej(nr);
d.iaf.data(2):= nr+16;
ll:= 0;
repeat
signalch(cs_talevejsswitch,iaf,op_optype);
<*V*> waitch(cs_operatør(nr),iaf,op_optype,-1);
ll:= ll+1;
until ll=3 or d.iaf.resultat=3;
res:= if d.iaf.resultat=3 then 1 else 61;
<* ********* *>
delay(1);
start_operation(iaf,200+nr,cs_operatør(nr),
'R' shift 12 + 44);
ll:= 0;
repeat
signalch(cs_talevejsswitch,iaf,op_optype);
waitch(cs_operatør(nr),iaf,op_optype,-1);
ll:= ll+1;
until ll=3 or d.iaf.resultat=3;
<* ********* *>
signalch(cs_tvswitch_adgang,iaf,op_optype);
if res<>1 then
op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0;
end;
end;
if op_talevej(nr)=0 then res:= 61;
d.op_ref.data(1):= op_talevej(nr);
if res <= 1 then
begin
til_radio: <* send operation til radiomodul *>
d.op_ref.opkode:= opgave shift 12 + 41;
d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v
else 0;
d.op_ref.data(6):= b_s;
d.op_ref.resultat:=0;
d.op_ref.retur:= cs_operatør(nr);
indeks:= op_ref;
<*+2*> if testbit11 and overvåget then
disable begin
skriv_operatør(out,0);
write(out,<: operation til radio:>);
skriv_op(out,op_ref); ud;
end;
<*-2*>
signal_ch(cs_rad,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
<*+2*> if testbit12 and overvåget then
disable begin
skriv_operatør(out,0);
write(out,<: operation retur fra radio:>);
skriv_op(out,op_ref); ud;
end;
<*-2*>
<*+4*> if op_ref <> indeks then
fejlreaktion(11<*fr.post*>,op_ref,
<:operatør, retur fra radio:>,0);
<*-4*>
\f
message procedure operatør side 11 - 810529/hko;
res:= d.op_ref.resultat;
if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then
begin
<*+4*> if res < 2 then
fejlreaktion(3<*prg.fejl*>,res,
<: operatør,radio_op,resultat:>,1);
<*-4*>
if res = 1 then res:= 0;
end
else
begin <* res = 2 eller 3 *>
s_kanal:= v_kanal:= 0;
opgave:= d.opref.opkode shift (-12);
bv:= d.op_ref.data(5) extract 4;
bs:= d.op_ref.data(6);
if opgave < 10 then
begin
j:= d.op_ref.data(7) <*type*>;
i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21;
i:= i + (if opgave=2 or opgave>3 then 2 else 1);
terminal_tab.ref(1):= i
+(if res=2 then 4 <*optaget*> else 0)
+(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*>
then 8 <*nød*> else 0)
+(if opgave=1 and j > 0 and j < 3 <*mobilopkald*>
then 16 else 0)
+ (if opgave mod 2 = 0 then 64 <*pas*> else 0)
+ (if opgave=9 then 128 else
if opgave>=7 then 256 else
if opgave>=5 then 512 else 0)
+ (if res = 2 then 2 shift 21 <*tilstand = optaget *>
else if b_s = 0 then 0 <*tilstand = ledig *>
else 1 shift 21 <*tilstand = samtale*>);
end
else if opgave=10 <*monitering*> or
opgave=14 <*ventepos *> then
begin
<*+4*> if res = 2 then
fejlreaktion(3<*prg.fejl*>,res,
<: operatør,moniter,res:>,1);
<*-4*>
iaf:= (bs extract 4 -1)*kanal_beskr_længde;
i:= if bs<0 then
kanaltab.iaf.kanal_tilstand extract 12 else 0;
terminal_tab.ref(1):= i +
(if bs < 0 then (1 shift 21) else 0);
if opgave=10 then
begin
s_kanal:= bs;
v_kanal:= d.opref.data(5);
end;
\f
message procedure operatør side 12 - 810603/hko;
end
else if opgave=11 or opgave=12 then
begin
<*+4*> if res = 2 then
fejlreaktion(3<*prg.fejl*>,res,
<: operatør,ge/ne,res:>,1);
<*-4*>
if opgave=11 <*GE*> and res<>49 then
begin
s_kanal:= terminal_tab.ref(2);
v_kanal:= 12 shift 20 +
(terminal_tab.ref(1) shift (-12) extract 4);
end;
terminal_tab.ref(1):= 0; <* s og v felt nedlagt *>
end
else
if opgave=13 then
begin
if res=2 then
fejlreaktion(3<*prg.fejl*>,res,
<:operatør,R,res:>,1);
sætbit_i(terminaltab.ref.terminaltilstand,11,
d.opref.data(2));
end
<*+4*> else fejlreaktion(3,opgave,<:operatør, opgave:>,0)
<*-4*>
;
<*indsæt kanal_nr for b_v_felt i terminalbeskr.*>
sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4);
terminal_tab.ref(2):= b_s;
terminal_tab.ref(3):= d.op_ref.data(11);
if (opgave<10 or opgave=14) and res=3 then
<*så henviser b_s til radiokanal*>
begin
if bs shift (-20) = 12 then
begin
iaf:= (bs extract 4 -1)*kanal_beskr_længde;
kanaltab.iaf.kanal_tilstand:=
kanaltab.iaf.kanal_tilstand shift(-10) shift 10
+terminal_tab.ref(1) extract 10;
end
else
begin
for i:= 1 step 1 until max_antal_kanaler do
begin
if læsbit_i(bs,i) then
begin
iaf:= (i-1)*kanal_beskr_længde;
kanaltab.iaf.kanaltilstand:=
kanaltab.iaf.kanaltilstand shift (-10) shift 10
+ terminal_tab.ref(1) extract 10;
end;
end;
end;
end;
if kode=15 or kode=16 then
begin
if opgave<10 then
begin
opgave:= 11;
kanal:= (12 shift 20) +
d.opref.data(6) extract 20;
goto til_radio;
end
else
if opgave=11 then
begin
opgave:= 10;
d.opref.data(2):= kanal;
goto til_radio;
end;
end
else
if (kode=1 or kode=3) then
begin
if opgave<10 and bv<>0 then
begin
opgave:= 14;
d.opref.data(2):= 2;
goto til_radio;
end;
end;
<*V*> skriv_skærm_b_v_s(nr);
<*V*> if sætbit_ia(opkaldsflag,nr,0) = 1 then
skriv_skærm_opkaldskø(nr);
for i:= s_kanal, v_kanal do
if i<0 then skriv_skærm_kanal(nr,i extract 4);
tofrom(kanalflag,alle_operatører,op_maske_lgd);
signalbin(bs_mobilopkald);
end; <* res = 2 eller 3 *>
end; <* res <= 1 *>
<* frigiv talevej (om nødvendigt) *>
if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0
and terminal_tab.ref(2)=0 <*b_s*>
and op_talevej(nr)<>0
then
begin
<*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
start_operation(iaf,200+nr,cs_operatør(nr),
'D' shift 12 + 44);
d.iaf.data(1):= op_talevej(nr);
d.iaf.data(2):= nr+16;
ll:= 0;
repeat
signalch(cs_talevejsswitch,iaf,op_optype);
<*V*> waitch(cs_operatør(nr),iaf,op_optype,-1);
ll:= ll+1;
until ll=3 or d.iaf.resultat=3;
ll:= d.iaf.resultat;
signalch(cs_tvswitch_adgang,iaf,op_optype);
if ll<>3 then
fejlreaktion(21,op_talevej(nr)*100+nr,
<:frigiv operatør fejlet:>,1)
else
op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0;
skriv_skærm_b_v_s(nr);
end;
disable if testbit14 then
begin
systime(1,0,kommslut);
write(out,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,<:":>,
string bpl_navn(nr),<:" kmdo: :>,case rkom of (
<:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
<:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
<:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
<:GE,T:>),<: slut; res=:>,<<d>,res,<: btid=:>,
<<dd.dd>,kommslut-kommstart);
ud;
end;
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
<*V*> skriv_kvittering(z_op(nr),op_ref,-1,res);
end; <* radio-kommando *>
begin
\f
message procedure operatør side 13 - 810518/hko;
<* 4 stop kommando *>
status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
if tilstand <> 0 then
begin
d.op_ref.resultat:= 16; <*skærm optaget*>
end
else
begin
d.op_ref.retur:= cs_operatør(nr);
d.op_ref.resultat:= 0;
d.op_ref.data(1):= nr;
indeks:= op_ref;
<*+2*> if testbit11 and overvåget then
disable begin
skriv_operatør(out,0);
write(out,<: stop_operation til radio:>);
skriv_op(out,op_ref); ud;
end;
<*-2*>
if opk_alarm.tab.alarm_tilst > 0 then
begin
opk_alarm.tab.alarm_kmdo:= 3;
signal_bin(bs_opk_alarm);
end;
signal_ch(cs_rad,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
<*+2*> if testbit12 and overvåget then
disable begin
skriv_operatør(out,0);
write(out,<: operation retur fra radio:>);
skriv_op(out,op_ref); ud;
end;
<*-2*>
<*+4*> if indeks <> op_ref then
fejlreaktion(11<*fr.post*>,op_ref,
<: operatør, retur fra radio:>,0);
<*-4*>
\f
message procedure operatør side 14 - 810527/hko;
if d.op_ref.resultat = 3 then
begin
integer k,n;
integer array field msk,iaf1;
terminal_tab.ref.terminal_tilstand:= 3 shift 21
+terminal_tab.ref.terminal_tilstand extract 21;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
if sæt_bit_ia(operatørmaske,nr,0)=1 then
for k:= nr, 65 step 1 until top_bpl_gruppe do
begin
msk:= k*op_maske_lgd;
if læsbit_ia(bpl_def.msk,nr) then
<**> begin
n:= 0;
for i:= 1 step 1 until max_antal_operatører do
if læsbit_ia(bpl_def.msk,i) then
begin
iaf1:= i*terminal_beskr_længde;
if terminal_tab.iaf1.terminal_tilstand
shift (-21) < 3 then
n:= n+1;
end;
bpl_tilst(k,1):= n;
end;
<**> <*
bpl_tilst(k,1):= bpl_tilst(k,1)-1;
*> end;
signal_bin(bs_mobil_opkald);
<*V*> setposition(z_op(nr),0,0);
ht_symbol(z_op(nr));
end;
end;
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
if d.op_ref.resultat<> 3 then
skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
end;
begin
boolean l22;
\f
message procedure operatør side 15 - 810521/cl;
<* 5 springdefinition *>
l22:= false;
if sep=',' then
disable begin
setposition(z_op(nr),0,0);
cursor(z_op(nr),22,1);
write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
l22:= true; pos:= 1;
while læstegn(d.op_ref.data,pos,i)<>0 do
outchar(z_op(nr),i);
end;
tofrom(d.op_ref.data,ia,indeks*2);
<*V*> wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
start_operation(vt_op,200+nr,cs_operatør(nr),
101<*opret fil*>);
d.vt_op.data(1):=128;<*postantal*>
d.vt_op.data(2):=2; <*postlængde*>
d.vt_op.data(3):=1; <*segmentantal*>
d.vt_op.data(4):=
2 shift 10; <*spool fil*>
signal_ch(cs_opret_fil,vt_op,op_optype);
pos:=vt_op;<*variabel lånes*>
<*V*> wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>);
<*+4*> if vt_op<>pos then
fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
if d.vt_op.data(9)<>0 then
fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
<:op kommando(springdefinition):>,0);
<*-4*>
iaf:=0;
for i:=1 step 1 until indeks-2 do
begin
disable k:=modif_fil(d.vt_op.data(4),i,j);
if k<>0 then
fejlreaktion(7<*modif-fil*>,k,
<:op kommando(spring-def):>,0);
fil(j).iaf(1):=d.op_ref.data(i+2);
end;
\f
message procedure operatør side 15a - 820301/cl;
while sep = ',' do
begin
setposition(z_op(nr),0,0);
cursor(z_op(nr),23,1);
write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
setposition(z_op(nr),0,0);
wait(bs_fortsæt_adgang);
pos:= 1; j:= 0;
while læs_store(z_op(nr),i) < 8 do
begin
skrivtegn(fortsæt,pos,i);
if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
end;
skrivtegn(fortsæt,pos,'em');
afsluttext(fortsæt,pos);
sluttegn:= i;
if j<>0 then
begin
setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
cursor(z_op(nr),1,1);
goto sp_ann;
end;
\f
message procedure operatør side 16 - 810521/cl;
disable begin
integer array værdi(1:4);
integer a_pos,res;
pos:= 0;
repeat
apos:= pos;
læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
if res >= 0 then
begin
if res=0 and (sep=',' or indeks>2) then <*ok*>
else if res=0 then res:= -25 <*parameter mangler*>
else if res=10 and (værdi(1)<1 or værdi(1)>99) then
res:= -44 <*intervalstørrelse ulovlig*>
else if res=10 and (værdi(2)<1 or værdi(2)>99) then
res:= -6 <*løbnr ulovligt*>
else if res=10 then
begin
k:=modiffil(d.vt_op.data(4),indeks-1,j);
if k<>0 then fejlreaktion(7<*modiffil*>,k,
<:op kommando(spring-def):>,0);
iaf:= 0;
fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
indeks:= indeks+1;
if sep = ',' then res:= 0;
end
else res:= -27; <*parametertype*>
end;
if res>0 then pos:= a_pos;
until sep<>'sp' or res<=0;
if res<0 then
begin
d.op_ref.resultat:= -res;
i:=1;
hægt_tekst(d.op_ref.data,i,fortsæt,1);
afsluttext(d.op_ref.data,i);
end;
end;
\f
message procedure operatør side 17 - 810521/cl;
if d.op_ref.resultat > 3 then
begin
setposition(z_op(nr),0,0);
if l22 then
begin
cursor(z_op(nr),22,1); l22:= false;
write(z_op(nr),"-",80);
end;
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
goto sp_ann;
end;
if sep=',' then
begin
setposition(z_op(nr),0,0);
cursor(z_op(nr),22,1);
write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
pos:= 1; l22:= true;
while læstegn(fortsæt,pos,i)<>0 do
outchar(z_op(nr),i);
end;
signalbin(bs_fortsæt_adgang);
end while sep = ',';
d.vt_op.data(1):= indeks-2;
k:= sætfildim(d.vt_op.data);
if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0);
d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
d.op_ref.retur:=cs_operatør(nr);
pos:=op_ref;
signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
<*+4*> if pos<>op_ref then
fejlreaktion(11<*fremmed post*>,op_ref,
<:op kommando(springdef retur fra vt):>,0);
<*-4*>
\f
message procedure operatør side 18 - 810521/cl;
<*V*> setposition(z_op(nr),0,0);
if l22 then
begin
cursor(z_op(nr),22,1);
write(z_op(nr),"-",80);
end;
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
if false then
begin
sp_ann: signalch(cs_slet_fil,vt_op,op_optype);
waitch(cs_operatør(nr),vt_op,op_optype,-1);
signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
signalbin(bs_fortsæt_adgang);
end;
end;
begin
\f
message procedure operatør side 19 - 810522/cl;
<* 6 spring (igangsæt)
spring,annuler
spring,reserve *>
tofrom(d.op_ref.data,ia,6);
d.op_ref.retur:=cs_operatør(nr);
indeks:=op_ref;
signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),
op_ref,
op_optype,
-1<*timeout*>);
<*+2*> if testbit10 and overvåget then
disable begin
skriv_operatør(out,0);
write(out,"nl",1,<:op operation retur fra vt:>);
skriv_op(out,op_ref);
end;
<*-2*>
<*+4*> if indeks<>op_ref then
fejlreaktion(11<*fremmed post*>,op_ref,
<:op kommando(spring):>,0);
<*-4*>
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or
d.op_ref.resultat=12) and kode=34 <*SP,R*> then
d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
end;
begin
\f
message procedure operatør side 20 - 810525/cl;
<* 7 spring(-oversigts-)rapport *>
d.op_ref.retur:=cs_operatør(nr);
tofrom(d.op_ref.data,ia,4);
indeks:=op_ref;
signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
<*+2*> disable if testbit10 and overvåget then
begin
write(out,"nl",1,<:operatør operation retur fra vt:>);
skriv_op(out,op_ref);
end;
<*-2*>
<*+4*> if op_ref<>indeks then
fejlreaktion(11<*fremmed post*>,op_ref,
<:op kommando(spring-rapport):>,0);
<*-4*>
<*V*> setposition(z_op(nr),0,0);
if d.op_ref.resultat<>3 then
begin
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
end
else
begin
boolean p_skrevet;
integer bogst,løb;
skærmmåde:= 1;
if kode = 32 then <* spring,vis *>
begin
ll:= d.op_ref.data(1) shift (-5) extract 10;
bogst:= d.op_ref.data(1) extract 5;
if bogst<>0 then bogst:= bogst + 'A' - 1;
<*V*> write(z_op(nr),"esc" add 128,1,<:ÆH:>,
"esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
<:spring: :>,
<<d>,ll,false add bogst,(bogst<>0) extract 1,
<:.:>,string (extend d.op_ref.data(2) shift 24));
raf:= data+8;
if d.op_ref.raf(1)<>0.0 then
write(z_op(nr),<:, startet :>,<<zddddd>,
round systime(4,d.op_ref.raf(1),r),<:.:>,round r)
else write(z_op(nr),<:, ikke startet:>);
write(z_op(nr),"sp",5,"*",5,"nl",2);
\f
message procedure operatør side 21 - 810522/cl;
p_skrevet:= false;
for pos:=1 step 1 until d.op_ref.data(3) do
begin
disable i:=læsfil(d.op_ref.data(4),pos,j);
if i<>0 then
fejlreaktion(5<*læsfil*>,i,
<:op kommando(spring,vis):>,0);
iaf:=0;
i:= fil(j).iaf(1);
if i < 0 and -, p_skrevet then
begin
outchar(z_op(nr),'('); p_skrevet:= true;
end;
if i > 0 and p_skrevet then
begin
outchar(z_op(nr),')'); p_skrevet:= false;
end;
if pos mod 2 = 0 then
write(z_op(nr),<< dd>,abs i,<:.:>)
else
write(z_op(nr),true,3,<<d>,abs i);
if pos mod 21 = 0 then outchar(z_op(nr),'nl');
end;
write(z_op(nr),"*",1);
\f
message procedure operatør side 22 - 810522/cl;
end
else if kode=33 then <* spring,oversigt *>
begin
write(z_op(nr),"esc" add 128,1,<:ÆH:>,
"esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
<:spring oversigt:>,"sp",5,"*",5,"nl",2);
for pos:=1 step 1 until d.op_ref.data(1) do
begin
disable i:=læsfil(d.op_ref.data(2),pos,j);
if i<>0 then
fejlreaktion(5<*læsfil*>,i,
<:op kommando(spring-oversigt):>,0);
iaf:=0;
ll:=fil(j).iaf(1) shift (-5) extract 10;
bogst:=fil(j).iaf(1) extract 5;
if bogst<>0 then bogst:=bogst + 'A' - 1;
write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
string (extend fil(j).iaf(2) shift 24));
if fil(j,2)<>0.0 then
write(z_op(nr),<:startet :>,<<zddddd>,
round systime(4,fil(j,2),r),<:.:>,round r);
outchar(z_op(nr),'nl');
end;
write(z_op(nr),"*",1);
end;
<* slet fil *>
d.op_ref.opkode:= 104;
if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
signalch(cs_slet_fil,op_ref,gen_optype or op_optype);
waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
end; <* resultat=3 *>
end;
begin
\f
message procedure operatør side 23 - 940522/cl;
<* 8 SLUT *>
trapmode:= 1 shift 13;
trap(-2);
end;
begin
<* 9 stopniveauer,definer *>
integer fno;
for i:= 1 step 1 until 3 do
operatør_stop(nr,i):= ia(i+1);
i:= modif_fil(tf_stoptabel,nr,fno);
if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
iaf:=0;
for i:= 0,1,2,3 do
fil(fno).iaf(i+1):= operatør_stop(nr,i);
setposition(fil(fno),0,0);
setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),0,-1,3);
end;
begin
\f
message procedure operatør side 24 - 940522/cl;
<* 10 stopniveauer,vis *>
integer bpl,j,k;
skærm_måde:= 1;
setposition(z_op(nr),0,0);
write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
<:stopniveauer: :>);
for i:= 0 step 1 until 3 do
begin
bpl:= operatør_stop(nr,i);
write(z_op(nr),if i=0 then <: :> else <: -> :>,
if bpl=0 then <:ALLE:> else string bpl_navn(bpl));
end;
write(z_op(nr),"nl",2,<:operatørpladser: :>);
j:=0;
for bpl:= 1 step 1 until max_antal_operatører do
if bpl_navn(bpl)<>long<::> then
begin
if j mod 8 = 0 and j > 0 then
write(z_op(nr),"nl",1,"sp",18);
iaf:= bpl*terminal_beskr_længde;
write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1,
true,6,string bpl_navn(bpl));
j:=j+1;
end;
write(z_op(nr),"nl",2,<:operatørgrupper: :>);
j:=0;
for bpl:= 65 step 1 until top_bpl_gruppe do
if bpl_navn(bpl)<>long<::> then
begin
if j mod 8 = 0 and j > 0 then
write(z_op(nr),"nl",1,"sp",19);
write(z_op(nr),true,7,string bpl_navn(bpl));
j:=j+1;
end;
write(z_op(nr),"nl",1,"*",1);
end;
begin
<* 11 alarmlængde *>
integer fno;
if indeks > 0 then
begin
opk_alarm.tab.alarm_lgd:= ia(1);
i:= modiffil(tf_alarmlgd,nr,fno);
if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0);
iaf:= 0;
fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd;
setposition(fil(fno),0,0);
end;
setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63);
end;
begin
d.op_ref.resultat:= 45; <*ikke implementeret*>
setposition(z_op(nr),0,0);
cursor(z_op(nr),24,1);
skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
end;
\f
message procedure operatør side x - 810522/hko;
<*+4*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2)
<*-4*>
end;<*case j *>
end <* j > 0 *>
else
begin
<*V*> setposition(z_op(nr),0,0);
if sluttegn<>'nl' then outchar(z_op(nr),'nl');
skriv_kvittering(z_op(nr),op_ref,-1,
45 <*ikke implementeret *>);
end;
end;<* godkendt *>
<*V*> setposition(z_op(nr),0,0);
<*???*>
while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
skærmmåde = 0 do
begin
if sætbit_ia(samtaleflag,nr,0)=1 then
begin
skriv_skærm_bvs(nr);
<*940920 if op_talevej(nr)=0 then status:= 0
else inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
if status>0 then
begin
for ll:= 1 step 1 until terminalbeskrlængde//2 do
terminaltab.ref(ll):= 0;
skriv_skærm_bvs(nr);
wait(bs_talevej_udkoblet(op_talevej(nr)));
end;
for i:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (i-1)*kanalbeskrlængde;
inspect(ss_samtale_nedlagt(i),status);
if status>0 and
tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
begin
kanaltab.iaf.kanal_tilstand:=
kanaltab.iaf(1) shift (-10) extract 6 shift 10;
for ll:= 2 step 1 until kanalbeskrlængde//2 do
kanaltab.iaf(ll):= 0;
skriv_skærm_kanal(nr,i);
repeat
wait(ss_samtale_nedlagt(i));
inspect(ss_samtale_nedlagt(i),status);
until status=0;
end;
end;
940920*> cursor(z_op(nr),1,1);
setposition(z_op(nr),0,0);
end;
if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
and skærmmåde = 0
and læsbit_ia(operatørmaske,nr) then
begin
if sætbit_ia(opkaldsflag,nr,0) = 1 then
skriv_skærm_opkaldskø(nr);
if sætbit_ia(kanalflag,nr,0) = 1 then
begin
for i:= 1 step 1 until max_antal_kanaler do
skriv_skærm_kanal(nr,i);
end;
cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
end;
end;
d.op_ref.retur:=cs_att_pulje;
disable afslut_kommando(op_ref);
end; <* indlæs kommando *>
begin
\f
message procedure operatør side x+1 - 810617/hko;
<* 2: inkluder *>
integer k,n;
integer array field msk,iaf1;
i:=monitor(4) process address:(z_op(nr),0,ia);
if i=0 then
begin
fejlreaktion(3<*programfejl*>,nr,
<:operatør(nr) eksisterer ikke:>,1);
d.op_ref.resultat:=28;
end
else
begin
i:=monitor(8) reserve process:(z_op(nr),0,ia);
d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*>
else if d.op_ref.opkode = 0 then 0
else 3;<*udført*>
if i > 0 then
fejlreaktion(4<*monitor res*>,nr*100 +i,
<:operatørskærm reservation:>,1)
else
begin
i:=terminal_tab.ref.terminal_tilstand;
<*940418/cl inkluderet sættes i stop - start *>
kode:= d.opref.opkode extract 12;
if kode <> 0 then
terminal_tab.ref.terminal_tilstand:=
(d.opref.opkode shift (-12) shift 21) + (i extract 21)
else
<*940418/cl inkluderet sættes i stop - slut *>
terminal_tab.ref.terminal_tilstand:= i extract
(if i shift(-21) extract 2 = 3 then 21 else 23);
for i:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (i-1)*kanalbeskrlængde;
sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0);
end;
skærm_måde:= 0;
sætbit_ia(operatørmaske,nr,
(if terminal_tab.ref.terminal_tilstand shift (-21) = 3
then 0 else 1));
for k:= nr, 65 step 1 until top_bpl_gruppe do
begin
msk:= k*op_maske_lgd;
if læsbit_ia(bpl_def.msk,nr) then
<**> begin
n:= 0;
for i:= 1 step 1 until max_antal_operatører do
if læsbit_ia(bpl_def.msk,i) then
begin
iaf1:= i*terminal_beskr_længde;
if terminal_tab.iaf1.terminal_tilstand
shift (-21) < 3 then
n:= n+1;
end;
bpl_tilst(k,1):= n;
end;
<**> <*
bpl_tilst(k,1):= bpl_tilst(k,1) +
(if læsbit_ia(operatørmaske,nr) then 1 else 0);
*> end;
tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
sætbit_ia(opkaldsflag,nr,0);
signal_bin(bs_mobil_opkald);
<*940418/cl inkluderet sættes i stop - start *>
if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then
<*V*> ht_symbol(z_op(nr))
else
<*940418/cl inkluderet sættes i stop - slut *>
<*V*> skriv_skærm(nr);
cursor(z_op(nr),24,1);
<*V*> setposition(z_op(nr),0,0);
end;
end;
if d.op_ref.opkode = 0 then
signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype)
else
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
end;
begin
\f
message procedure operatør side x+2 - 820304/hko;
<* 3: ekskluder *>
integer k,n;
integer array field iaf1,msk;
write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>);
<*V*> setposition(z_op(nr),0,0);
monitor(10) release process:(z_op(nr),0,ia);
d.op_ref.resultat:=3;
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
terminal_tab.ref.terminal_tilstand extract 21;
if sæt_bit_ia(operatørmaske,nr,0)=1 then
for k:= nr, 65 step 1 until top_bpl_gruppe do
begin
msk:= k*op_maske_lgd;
if læsbit_ia(bpl_def.msk,nr) then
<**> begin
n:= 0;
for i:= 1 step 1 until max_antal_operatører do
if læsbit_ia(bpl_def.msk,i) then
begin
iaf1:= i*terminal_beskr_længde;
if terminal_tab.iaf1.terminal_tilstand
shift (-21) < 3 then
n:= n+1;
end;
bpl_tilst(k,1):= n;
end;
<**> <*
bpl_tilst(k,1):= bpl_tilst(k,1)-1;
*> end;
signal_bin(bs_mobil_opkald);
if opk_alarm.tab.alarm_tilst > 0 then
begin
opk_alarm.tab.alarm_kmdo:= 3;
signal_bin(bs_opk_alarm);
end;
end;
begin
<* 4: opdater skærm *>
signal_ch(cs_op_retur,op_ref,d.op_ref.optype);
while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
skærmmåde=0 do
begin
<*+2*> if testbit13 and overvåget then
disable begin
write(out,"nl",1,<:opdater skærm(:>,<<d>,nr,
<:) opkaldsflag::>,"nl",1);
outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
write(out,<: operatørmaske::>,"nl",1);
outintbits_ia(out,operatørmaske,1,op_maske_lgd//2);
write(out,<: skærmmåde=:>,skærmmåde,"nl",0);
ud;
end;
<*-2*>
if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then
begin
skriv_skærm_bvs(nr);
<*940920 inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
if status>0 then
begin
for ll:= 1 step 1 until terminalbeskrlængde//2 do
terminaltab.ref(ll):= 0;
skriv_skærm_bvs(nr);
wait(bs_talevej_udkoblet(op_talevej(nr)));
end;
for i:= 1 step 1 until max_antal_kanaler do
begin
iaf:= (i-1)*kanalbeskrlængde;
inspect(ss_samtale_nedlagt(i),status);
if status>0 and
tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
begin
kanaltab.iaf.kanal_tilstand:=
kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10;
for ll:= 2 step 1 until kanalbeskrlængde//2 do
kanaltab.iaf(ll):= 0;
skriv_skærm_kanal(nr,i);
repeat
wait(ss_samtale_nedlagt(i));
inspect(ss_samtale_nedlagt(i),status);
until status=0;
end;
end;
940920*> cursor(z_op(nr),1,1);
setposition(z_op(nr),0,0);
end;
if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
begin
<*V*> setposition(z_op(nr),0,0);
if sætbit_ia(opkaldsflag,nr,0) =1 then
skriv_skærm_opkaldskø(nr);
if sætbit_ia(kanalflag,nr,0) =1 then
begin
for i:=1 step 1 until max_antal_kanaler do
skriv_skærm_kanal(nr,i);
end;
cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
end;
end;
end;
begin
\f
message procedure operatør side x+3 - 830310/hko;
<* 5: samtale etableret *>
res:= d.op_ref.resultat;
b_v:= d.op_ref.data(3) extract 4;
b_s:= d.op_ref.data(4);
signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
begin
sætbit_i(terminal_tab.ref(1),21,1);
sætbit_i(terminal_tab.ref(1),22,0);
sætbit_i(terminal_tab.ref(1),2,0);
sæt_hex_ciffer(terminal_tab.ref,3,b_v);
terminal_tab.ref(2):= b_s;
sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
shift (-10) shift 10 + terminal_tab.ref(1) extract 10;
if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
begin
<*V*> setposition(z_op(nr),0,0);
skriv_skærm_b_v_s(nr);
<*V*> setposition(z_op(nr),0,0);
end;
end
else
if terminal_tab.ref(1) shift(-21) = 2 then
begin
sætbit_i(terminal_tab.ref(1),22,0);
sætbit_i(terminal_tab.ref(1),2,0);
sæt_hex_ciffer(terminal_tab.ref,3,b_v);
terminal_tab.ref(2):= 0;
if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
begin
<*V*> setposition(z_op(nr),0,0);
cursor(z_op(nr),21,17);
write(z_op(nr),<:EJ FORB:>);
<*V*> setposition(z_op(nr),0,0);
end;
end
else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
<:terminal tilstand:>,1);
end;
begin
\f
message procedure operatør side x+4 - 810602/hko;
<* 6: radiokanal ekskluderet *>
læs_hex_ciffer(terminal_tab.ref,3,b_v);
pos:= d.op_ref.data(1);
signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
indeks:= terminal_tab.ref(2);
b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
then indeks extract 4 else 0;
if b_v = pos then
sæt_hex_ciffer(terminal_tab.ref,3,0);
if b_s = pos then
begin
terminal_tab.ref(2):= 0;
sætbit_i(terminal_tab.ref(1),21,0);
sætbit_i(terminal_tab.ref(1),22,0);
sætbit_i(terminal_tab.ref(1),2,0);
end;
if skærmmåde=0 then
begin
if b_v = pos or b_s = pos then
<*V*> skriv_skærm_b_v_s(nr);
<*V*> skriv_skærm_kanal(nr,pos);
cursor(z_op(nr),1,1);
setposition(z_op(nr),0,0);
end;
end;
begin
<*+4*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
<*-4*>
end
end; <* case aktion+6 *>
until false;
op_trap:
skriv_operatør(zbillede,1);
end operatør;
\f
message procedure alarmur side 1;
procedure alarmur;
begin
integer ventetid, nr;
integer array field opref, tab;
real nu;
procedure skriv_alarmur(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ alarmur:>);
if omfang > 0 then
disable begin
real t;
trap(slut);
write(zud,"nl",1,
<: ventetid: :>,ventetid,"nl",1,
<: nr: :>,nr,"nl",1,
<: opref: :>,opref,"nl",1,
<: tab: :>,tab,"nl",1,
<: nu: :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
<::>);
skriv_coru(zud,coru_no(295));
slut:
end;
end skriv_alarmur;
trap(alarmur_trap);
stackclaim(400);
systime(1,0.0,nu);
ventetid:= -1;
repeat
waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
if opref > 0 then
signalch(d.opref.retur,opref,op_optype);
ventetid:= -1;
systime(1,0.0,nu);
for nr:= 1 step 1 until max_antal_operatører do
begin
tab:= (nr-1)*opk_alarm_tab_lgd;
if opk_alarm.tab.alarm_tilst > 0 and
opk_alarm.tab.alarm_lgd >= 0 then
begin
if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
begin
opk_alarm.tab.alarm_kmdo:= 3;
signalbin(bs_opk_alarm);
if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
end
else
if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
ventetid:= (nu - opk_alarm.tab.alarm_start);
end;
end;
if ventetid=0 then ventetid:= 1;
until false;
alarmur_trap:
disable skriv_alarmur(zbillede,1);
end alarmur;
\f
message procedure opkaldsalarmer side 1;
procedure opkaldsalarmer;
begin
integer nr, ny_kommando, tilst, aktion, tt;
integer array field tab, opref, alarmop;
procedure skriv_opkaldsalarmer(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ opkaldsalarmer:>);
if omfang>0 then
disable begin
real array field raf;
trap(slut);
raf:=0;
write(zud,"nl",1,
<: nr: :>,nr,"nl",1,
<: ny-kommando: :>,ny_kommando,"nl",1,
<: tilst: :>,tilst,"nl",1,
<: aktion: :>,aktion,"nl",1,
<: tt: :>,false add tt,1,"nl",1,
<: tab: :>,tab,"nl",1,
<: opref: :>,opref,"nl",1,
<: alarmop: :>,alarmop,"nl",1,
<::>);
skriv_coru(zud,coru_no(296));
slut:
end;
end skriv_opkaldsalarmer;
trap(opk_alarm_trap);
stackclaim(400);
<*+2*>if (testbit8 and overvåget) or testbit28 then
skriv_opkaldsalarmer(out,0);
<*-2*>
repeat
wait(bs_opk_alarm);
alarmop:= 0;
for nr:= 1 step 1 until max_antal_operatører do
begin
tab:= (nr-1)*opk_alarm_tab_lgd;
ny_kommando:= opk_alarm.tab.alarm_kmdo;
tilst:= opk_alarm.tab.alarm_tilst;
aktion:= case ny_kommando+1 of (
<*ingenting*> case tilst+1 of (4,4,4),
<*normal *> case tilst+1 of (1,4,4),
<*nød *> case tilst+1 of (2,2,4),
<*sluk *> case tilst+1 of (4,3,3));
tt:= case aktion of ('B','C','F','-');
if tt<>'-' then
begin
<*V*> waitch(cs_tvswitch_adgang,opref,op_optype,-1);
startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44);
d.opref.data(1):= nr+16;
signalch(cs_talevejsswitch,opref,op_optype);
<*V*> waitch(cs_opk_alarm,opref,op_optype,-1);
if d.opref.resultat = 3 then
begin
opk_alarm.tab.alarm_kmdo:= 0;
opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst;
opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0);
if aktion < 3 then
begin
systime(1,0.0,opk_alarm.tab.alarm_start);
if alarmop = 0 then
waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1);
end;
end;
signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype);
end;
end;
if alarmop<>0 then
begin
startoperation(alarmop,296,cs_opk_alarm_ur_ret,0);
signalch(cs_opk_alarm_ur,alarmop,op_optype);
end;
until false;
opk_alarm_trap:
disable skriv_opkaldsalarmer(zbillede,1);
end;
\f
message procedure tvswitch_input side 1 - 940810/cl;
procedure tv_switch_input;
begin
integer array field opref;
integer tt,ant;
boolean ok;
integer array ia(1:128);
procedure skriv_tvswitch_input(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ tvswitch-input:>);
if omfang>0 then
disable begin
real array field raf;
trap(slut);
raf:=0;
write(zud,"nl",1,
<: opref: :>,opref,"nl",1,
<: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
<: ant: :>,ant,"nl",1,
<: tt: :>,tt,"nl",1,
<::>);
write(zud,"nl",1,<:ia: :>);
skrivhele(zud,ia.raf,256,2);
skriv_coru(zud,coru_no(297));
slut:
end;
end skriv_tvswitch_input;
real procedure now;
begin
real f,r,r1; long l;
systime(1,0,r); l:= r*100; f:= (l mod 100)/100;
systime(4,r,r1);
now:= r1+f;
end;
\f
boolean procedure læs_tlgr;
begin
integer kl,ch,i,pos,p;
long field lf;
boolean ok;
integer procedure readch(z,c);
zone z; integer c;
begin
readch:= readchar(z,c);
<*+2*> if testbit15 and overvåget then
disable begin
if ' ' <= c and c <= 'ü' then outchar(out,c)
else write(out,"<",1,<<d>,c,">",1);
if c='em' then write(out,<: *timeout*:>);
end;
<*-2*>
end;
ok:= false; tt:=' ';
repeat
readchar(z_tv_in,ch);
until ch<>'em';
repeatchar(z_tv_in);
<*+2*>if testbit15 and overvåget then
disable write(out,<<zd dd dd.dd >,now,<:switch-ind: :>);
<*-2*>
for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ;
if ch='%' then
begin
ant:= 0; pos:= 1; lf:= 4;
ok:= true;
for i:= 1 step 1 until 128 do ia(i):= 0;
for kl:=readch(z_tv_in,ch) while kl = 6 do
skrivtegn(ia,pos,ch);
p:=pos;
repeat afsluttext(ia,p) until p mod 6 = 1;
if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else
if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else
if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false;
if ok and ch=' ' then
for kl:=readch(z_tv_in,ch) while ch=' ' do ;
while kl = 2 do
begin
i:= ch - '0';
for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0';
if ant < 128 then
begin
ant:= ant+1;
ia(ant):= i;
end
else
ok:= false;
while ch=' ' do kl:=readch(z_tv_in,ch);
end;
if ch<>'nl' then ok:= false;
while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch);
<* !! setposition(z_tv_in,0,0); !! *>
<*+2*> if testbit15 and overvåget then disable ud;
<*-2*>
if tt='+' or tt='-' or tt='Q' or tt='E' then
ok:= ok
else if tt='C' or tt='N' or
tt='P' or tt='U' or tt='S' or tt='Z' then
ok:= ok and ant=1
else if tt='X' or tt='Y' then
ok:= ok and ant=2
else if tt='T' or tt='W' then
ok:= ok and ant=64
else if tt='R' then
ok:= ok and ant extract 1 = 0
else
begin
ok:= false;
fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1);
end;
end; <* if ch='%' *>
læs_tlgr:= ok;
end læs_tlgr;
\f
trap(tvswitch_input_trap);
stackclaim(400);
for ant:= 1 step 1 until 128 do ia(ant):= 0;
<*+2*>if (testbit8 and overvåget) or testbit28 then
skriv_tvswitch_input(out,0);
<*-2*>
repeat
ok:= læs_tlgr;
if ok then
begin
<*V*> waitch(cs_tvswitch_input,opref,op_optype,-1);
start_operation(opref,297,cs_tvswitch_input,0);
d.opref.resultat:= tt shift 12 + ant;
tofrom(d.opref.data,ia,ant*2);
signalch(cs_talevejsswitch,opref,op_optype);
end;
until false;
tvswitch_input_trap:
disable skriv_tvswitch_input(zbillede,1);
end tvswitch_input;
\f
message procedure tv_switch_adm side 1 - 940502/cl;
procedure tv_switch_adm;
begin
integer array field opref;
integer rc;
procedure skriv_tv_switch_adm(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ tv-switch-adm:>);
if omfang>0 then
disable begin
trap(slut);
write(zud,"nl",1,
<: opref: :>,opref,"nl",1,
<: rc: :>,rc,"nl",1,
<::>);
skriv_coru(zud,coru_no(298));
slut:
end;
end skriv_tv_switch_adm;
trap(tv_switch_adm_trap);
stackclaim(400);
<*+2*> if (testbit8 and overvåget) or testbit28 then
disable skriv_tv_switch_adm(out,0);
<*-2*>
<* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!!
waitch(cs_tvswitch_adm,opref,op_optype,-1);
*>
repeat
waitch(cs_tvswitch_adgang,opref,op_optype,-1);
start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
rc:= 0;
repeat
signalch(cs_talevejsswitch,opref,op_optype);
<*V*> waitch(cs_tvswitch_adm,opref,op_optype,-1);
rc:= rc+1;
until rc=3 or d.opref.resultat=3;
signalch(cs_tvswitch_adgang,opref,op_optype);
<*V*> delay(15*60);
until false;
tv_switch_adm_trap:
disable skriv_tv_switch_adm(zbillede,1);
end;
\f
message procedure talevejsswitch side 1 -940426/cl;
procedure talevejsswitch;
begin
integer tt, ant, ventetid;
integer array field opref, gemt_op, tab;
boolean ok;
integer array ia(1:128);
procedure skriv_talevejsswitch(zud,omfang);
value omfang;
zone zud;
integer omfang;
begin
write(zud,"nl",1,<:+++ talevejsswitch:>);
if omfang>0 then
disable begin
real array field raf;
trap(slut);
raf:= 0;
write(zud,"nl",1,
<: tt: :>,tt,"nl",1,
<: ant: :>,ant,"nl",1,
<: ventetid: :>,ventetid,"nl",1,
<: opref: :>,opref,"nl",1,
<: gemt-op: :>,gemt_op,"nl",1,
<: tab: :>,tab,"nl",1,
<: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
<::>);
write(zud,"nl",1,<:ia: :>);
skriv_hele(zud,ia.raf,256,2);
skriv_coru(zud,coru_no(299));
slut:
end;
end skriv_talevejsswitch;
real procedure now;
begin
real f,r,r1; long l;
systime(1,0,r); l:= r*100; f:= (l mod 100)/100;
systime(4,r,r1);
now:= r1+f;
end;
\f
trap(tvswitch_trap);
stackclaim(400);
for ant:= 1 step 1 until 128 do ia(ant):= 0;
<*+2*>if (testbit8 and overvåget) or testbit28 then
skriv_talevejsswitch(out,0);
<*-2*>
ventetid:= -1; ant:= 0; tt:= ' ';
repeat
waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid);
if opref > 0 then
begin
if d.opref.opkode extract 12 = 0 then
begin <*input fra talevejsswitchen *>
for ant:= 1 step 1 until 128 do ia(ant):= 0;
tt:= d.opref.resultat shift (-12) extract 12;
ant:= d.opref.resultat extract 12;
tofrom(ia,d.opref.data,ant*2);
signalch(d.opref.retur,opref,d.opref.optype);
if tt<>'+' and tt<>'-' then
begin
write(z_tv_out,"%",1,<:ACK:>,"cr",1);
setposition(z_tv_out,0,0);
<*+2*> if testbit15 and overvåget then
disable begin
write(out,<<zd dd dd.dd >,now,<:switch-ud: :>,<:%ACK:>);
ud;
end;
<*-2*>
end;
if (tt='+' or tt='-') and gemt_op<>0 then
begin
d.gemt_op.resultat:= (if tt='+' then 3 else 0);
signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
gemt_op:= 0;
ventetid:= -1;
end
else
if tt='R' then
begin
for i:= 1 step 2 until ant do
begin
if ia(i) <= max_antal_taleveje and
17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16
then
begin
if op_talevej(ia(i+1)-16)<>ia(i) then
tv_operatør(op_talevej(ia(i+1)-16)):= 0;
if tv_operatør(ia(i))<>ia(i+1)-16 then
op_talevej(tv_operatør(ia(i))):= 0;
tv_operatør(ia(i)):= ia(i+1)-16;
op_talevej(ia(i+1)-16):= ia(i);
sætbit_ia(samtaleflag,ia(i+1)-16,1);
end
else
if ia(i+1) <= max_antal_taleveje and
17 <= ia(i) and ia(i) <= max_antal_operatører+16
then
begin
if op_talevej(ia(i))<>ia(i+1)-16 then
tv_operatør(op_talevej(ia(i))):= 0;
if tv_operatør(ia(i+1)-16)<>ia(i) then
op_talevej(tv_operatør(ia(i+1)-16)):= 0;
tv_operatør(ia(i+1)):= ia(i)-16;
op_talevej(ia(i)-16):= ia(i+1);
sætbit_ia(samtaleflag,ia(i)-16,1);
end;
end;
signal_bin(bs_mobil_opkald);
<*+2*> if testbit15 and testbit16 and overvåget then
disable begin
skriv_talevejs_tab(out); ud;
end;
<*-2*>
end <* tt='R' and ant>0 *>
else
if tt='Y' then
begin
if ia(1) <= max_antal_taleveje and
17 <= ia(2) and ia(2) <= max_antal_operatører+16
then
begin
if tv_operatør(ia(1))=ia(2)-16 and
op_talevej(ia(2)-16)=ia(1)
then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0;
end
else
if ia(2) <= max_antal_taleveje and
17 <= ia(1) and ia(1) <= max_antal_operatører+16
then
begin
if tv_operatør(ia(2))=ia(1)-16 and
op_talevej(ia(1)-16)=ia(2)
then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0;
end;
end
else
if tt='C' or tt='N' or tt='P' or tt='U' then
begin
waitch(cs_op_iomedd,opref,gen_optype,-1);
startoperation(opref,299,cs_op_iomedd,23);
ant:= 1;
hægtstring(d.opref.data,ant,<:switch - port :>);
anbringtal(d.opref.data,ant,ia(1),2);
if 17<=ia(1) and ia(1)<=16+max_antal_operatører then
begin
hægtstring(d.opref.data,ant,<: (:>);
if bpl_navn(ia(1)-16)=long<::> then
begin
hægtstring(d.opref.data,ant,<:op:>);
anbringtal(d.opref.data,ant,ia(1)-16,
if ia(1)-16 > 9 then 2 else 1);
end
else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16));
skrivtegn(d.opref.data,ant,')');
end;
hægtstring(d.opref.data,ant,
if tt='C' then <: Kontakt med kontrolbox etableret:> else
if tt='N' then <: Kontakt med kontrolbox tabt:> else
if tt='P' then <: Tilgængelig:> else
if tt='U' then <: Ikke tilgængelig:> else <::>);
repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1;
signalch(cs_io,opref,gen_optype);
end
else
if tt='Z' then
begin
tab:= (ia(1)-16-1)*opk_alarm_tab_lgd;
opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst;
end
else
begin
<* ikke implementeret *>
end;
end
else
if d.opref.opkode extract 12 = 44 then
begin
tt:= d.opref.opkode shift (-12);
ok:= true;
if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then
begin
<*+2*> if testbit15 and overvåget then
disable begin
write(out,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1);
ud;
end;
<*-2*>
write(z_tv_out,"%",1,false add tt,1,"cr",1);
setposition(z_tv_out,0,0);
end
else
if tt='B' or tt='C' or tt='F' then
begin
<*+2*> if testbit15 and overvåget then
disable begin
write(out,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1,
" ",1,<<d>,d.opref.data(1));
ud;
end;
<*-2*>
write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
d.opref.data(1),"cr",1);
setposition(z_tv_out,0,0);
end
else
if tt='A' or tt='D' or tt='T' then
begin
<*+2*> if testbit15 and overvåget then
disable begin
write(out,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1,
" ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2));
ud;
end;
<*-2*>
write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
d.opref.data(1)," ",1,d.opref.data(2),"cr",1);
setposition(z_tv_out,0,0);
end
else
ok:= false;
if ok then
begin
gemt_op:= opref;
ventetid:= 2;
end
else
begin
d.opref.resultat:= 4;
signalch(d.opref.retur,opref,d.opref.optype);
end;
end;
end
else
if gemt_op<>0 then
begin <*timeout*>
d.gemt_op.resultat:= 0;
signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
gemt_op:= 0;
ventetid:= -1;
<*+2*> if testbit15 and overvåget then
disable begin
write(out,<<zd dd dd.dd >,now,<:switch: *Operation Timeout*:>);
ud;
end;
<*-2*>
end;
until false;
tvswitch_trap:
disable skriv_talevejsswitch(zbillede,1);
end talevejsswitch;
:5: operatør: initialisering
\f
message operatør_initialisering side 1 - 810520/hko;
top_bpl_gruppe:= 64;
bpl_navn(0):= long<::>;
for i:= 1 step 1 until 127 do
begin
k:= læsfil(tf_bpl_navne,i,j);
if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0);
bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8;
if i<=max_antal_operatører then
operatør_auto_include(i):= false add (fil(j,1) extract 8);
if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then
top_bpl_gruppe:= i;
end;
for i:= 0 step 1 until 64 do
begin
iaf:= i*op_maske_lgd;
tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd);
bpl_tilst(i,1):= bpl_tilst(i,2):= 0;
if 1<=i and i<= max_antal_operatører then
begin
bpl_tilst(i,2):= 1;
sætbit_ia(bpl_def.iaf,i,1);
end;
end;
for i:= 65 step 1 until 127 do
begin
k:= læsfil(tf_bpl_def,i-64,j);
if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0);
iaf:= i*op_maske_lgd;
tofrom(bpl_def.iaf,fil(j),op_maske_lgd);
bpl_tilst(i,1):= 0;
bpl_tilst(i,2):= fil(j,2) extract 24;
end;
for k:= 0,1,2,3 do operatør_stop(0,k):= 0;
iaf:= 0;
for i:= 1 step 1 until max_antal_operatører do
begin
k:= læsfil(tf_stoptabel,i,j);
if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0);
operatør_stop(i,0):= i;
for k:= 1,2,3 do
operatør_stop(i,k):= fil(j).iaf(k+1);
ant_i_opkø(i):= 0;
end;
tofrom(operatørmaske,ingen_operatører,op_maske_lgd);
for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0;
for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0;
sidste_tv_brugt:= max_antal_taleveje;
for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do
opk_alarm(i):= 0;
for i:= 1 step 1 until max_antal_operatører do
begin
integer array field tab;
k:= læsfil(tf_alarmlgd,i,j);
if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0);
tab:= (i-1)*opk_alarm_tab_lgd;
opk_alarm.tab.alarm_lgd:= fil(j).iaf(1);
opk_alarm.tab.alarm_start:= 0.0;
end;
laf:= raf:= 0;
open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9);
i:= monitor(8)reserve_process:(z_tv_in,0,ia);
j:= 1;
if i<>0 then
fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1);
open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9);
i:= monitor(8)reserve_process:(z_tv_in,0,ia);
j:= 1;
if i<>0 then
fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1);
ia(1):= 3; <*canonical*>
ia(2):= 0; <*no echo*>
ia(3):= 0; <*prompt*>
ia(4):= 2; <*timeout*>
setcspterm(taleswitch_in_navn.laf,ia);
setcspterm(taleswitch_out_navn.laf,ia);
cs_op:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>);
<*-3*>
cs_op_retur:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>);
<*-3*>
i:= nextcoru(200,<*ident*>
10,<*prioitet*>
true<*test_maske*>);
j:= new_activity( i,
0,
h_operatør);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
\f
message operatør_initialisering side 2 - 810520/hko;
for k:= 1 step 1 until max_antal_operatører do
begin
j:=9;
if k>9 then skrivtegn(terminal_navn, j,'0'+k//10);
skrivtegn(terminal_navn,j,'0'+k mod 10);
open(z_op(k),8,terminal_navn,1 shift 21 +1 shift 9);
i:= monitor(4) processaddress:(z_op(k),0,ia);
ref:=k*terminal_beskr_længde;
if i = 0 then
begin
fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1);
terminal_tab.ref.terminal_tilstand:= 4 shift 21;
end
else
begin
terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*>
end;
cs_operatør(k):= next_semch;
<*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>);
<*-3*>
cs_op_fil(k):= nextsemch;
<*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>);
<*-3*>
signalch(cs_op_fil(k),nextop(filoplængde),op_optype);
i:= next_coru(200+k,<*ident*>
10,<*prioitet*>
true<*testmaske*>);
j:= new_activity( i,
0,
operatør,k);
<*+3*>skriv_newactivity(out,i,j);
<*-3*>
end;
cs_op_iomedd:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>);
<*-3*>
bs_opk_alarm:= next_sem;
<*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>);
<*-3*>
cs_opk_alarm:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>);
<*-3*>
cs_opk_alarm_ur:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>);
<*-3*>
cs_opk_alarm_ur_ret:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>);
<*-3*>
cs_tvswitch_adgang:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>);
<*-3*>
cs_tv_switch_input:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>);
<*-3*>
cs_tv_switch_adm:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>);
<*-3*>
cs_talevejsswitch:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_talevejsswitch,<:cs-talevejsswitch:>);
<*-3*>
signalch(cs_op_iomedd,nextop(60),gen_optype);
iaf:= nextop(data+128);
startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44);
signal_ch(cs_talevejsswitch,iaf,op_optype);
i:= next_coru(295, <*ident*>
8, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
alarmur);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype);
i:= next_coru(296, <*ident*>
8, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
opkaldsalarmer);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
i:= next_coru(297, <*ident*>
3, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
tv_switch_input);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
for i:= 1,2 do
signalch(cs_tvswitch_input,nextop(data+256),op_optype);
i:= next_coru(298, <*ident*>
20, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
tv_switch_adm);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
i:= next_coru(299, <*ident*>
3, <*prioritet*>
true <*testmaske*>);
j:= new_activity( i,
0,
talevejsswitch);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
:6: operatør trapaktion1.
\f
message operatør trapaktion1 side 1 - 810521/hko;
write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1);
for i:= 1 step 1 until max_antal_operatører do
begin
write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
case operatør_auto_include(i) extract 2 + 1 of (
<:EK :>,<:IN(ÅB):>,<:?? :>,<:IN(ST):>),<: :>);
if i mod 4 = 0 then write(zbillede,"nl",1);
end;
write(zbillede,"nl",1);
write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1,
<:betjeningspladsgrupper::>,"nl",1);
for i:= 1 step 1 until 127 do
if bpl_navn(i)<>long<::> then
begin
k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>,
bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>);
write(zbillede,"sp",16-k,<:= :>);
iaf:= i*op_maske_lgd; j:=0;
for k:= 1 step 1 until max_antal_operatører do
begin
if læsbit_ia(bpl_def.iaf,k) then
begin
if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18);
write(zbillede,true,6,string bpl_navn(k));
j:= j+1;
end;
end;
write(zbillede,"nl",1);
end;
write(zbillede,"nl",1,<:stoptabel::>,"nl",1);
for i:= 1 step 1 until max_antal_operatører do
begin
write(zbillede,<<dd >,i);
for j:= 0 step 1 until 3 do
begin
k:= operatør_stop(i,j);
write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:>
else string bpl_navn(k));
end;
write(zbillede,<: (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1);
end;
skriv_terminal_tab(zbillede);
write(zbillede,"nl",1,<:operatør-maske::>,"nl",1);
outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2);
skriv_opk_alarm_tab(zbillede);
skriv_talevejs_tab(zbillede);
:7: operatør trapaktion2.
\f
message operatør_finale side 1 - 810428/hko;
goto op_trap2_slut;
write(out,<:lukker operatører:>); ud;
for k:= 1 step 1 until max_antal_operatører do
begin
close(z_op(k),true);
end;
op_trap2_slut:
k:=k;
▶EOF◀