|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 15360 (0x3c00)
Types: TextFileVerbose
Names: »fesuplst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
└─⟦72244f0ef⟧
└─⟦this⟧ »fesuplst«
\f
fesuplst 81.05.20. 14.53. page 1
10 1 PROCESS fesupervisor(
20 2 op_sem : sempointer;
30 3 VAR input_sem, write_sem, que_up, que_down : !ts_pointer;
40 4 VAR stream_sem, netc_sem, com_pool : !sempointer);
50 5 CONST
60 6 version = "vers 1.11 /";
70 7 no_read_stream = 3;
80 8 no_write_stream = 3;
90 9 no_trans_bufs = no_read_stream + no_write_stream;
100 10 stream_mark = 255; (* u4 *)
110 11 dummy_stream = 2;
120 12 max_stream_no = 15;
130 13
140 14 TYPE
150 15 tty_data = ARRAY ( 1..data_length ) OF byte;
160 16 stream_buf = PACKED RECORD
170 17 ! fi, la, ne : integer;
180 18 ! fix : alarmlabel;
190 19 ! data : tty_data;
200 20 ! dummy : ARRAY ( 1..106-data_length ) OF byte
210 21 END;
220 22 return_buf= PACKED RECORD
230 23 ! fi, la, ne : integer;
240 24 ! fix : alarmlabel;
250 25 ! data : alarmlabel;
260 26 END;
270 27 alarm_buf = PACKED RECORD
280 28 ! alabel : alarmlabel;
290 29 ! adata : tty_data;
300 30 END;
310 31 netc_buf = PACKED RECORD
320 32 ! alabel : alarmlabel;
330 33 ! intg : integer;
340 34 ! netc_macro : macroaddr;
350 35 END;
360 36 streams = SET OF 0..max_stream_no;
370 37
380 38 VAR
390 39 i : byte;
400 40 msg,
410 41 alarm_msg : reference;
420 42 opzone : zone;
430 43 trans_pool : pool no_trans_bufs OF stream_buf;
440 44 akt_streams : streams := (. 1, 2, 4 .);
450 45 netc_addr : alarmnetaddr := alarmnetaddr(macroaddr(0,0,0),3);
460 46
\f
fesuplst 81.05.20. 14.53. page 2
1010 47 PROCEDURE send_read_stream( no: byte );
1020 48 BEGIN
1030 49 1 ! LOCK msg AS buf : stream_buf DO
1040 50 2 ! WITH msg^, buf DO
1050 51 3 ! BEGIN
1060 52 4 ! ! u1:= read_stream;
1070 53 5 ! ! u2:= 0;
1080 54 6 ! ! u3:= no;
1090 55 7 ! ! u4:= stream_mark;
1100 56 8 ! ! fi:= 6;
1110 57 9 ! ! la:= 6+data_length;
1120 58 10 ! ! ne:= 6;
1130 59 11 ! END;
1140 60 12 ! signal( msg, stream_sem^ );
1150 61 13 END;
1160 62
1170 63 PROCEDURE send_to_netc;
1180 64 BEGIN
1190 65 1 ! sensesem( alarm_msg, com_pool^ );
1200 66 2 ! IF nil ( alarm_msg ) THEN
1210 67 3 ! signal( msg, que_down.s^ ) ELSE
1220 68 4 ! BEGIN
1230 69 5 ! ! LOCK msg AS buf : stream_buf DO
1240 70 6 ! ! LOCK alarm_msg AS abuf : alarm_buf DO
1250 71 7 ! ! WITH alarm_msg^, buf, abuf DO
1260 72 8 ! ! BEGIN
1270 73 9 ! ! ! IF fix.rec = netc_addr THEN
1280 74 10 ! ! ! u3:= netc_route1 ELSE
1290 75 11 ! ! ! u3:= netc_route;
1300 76 12 ! ! ! u4:= fix.op_code;
1310 77 13 ! ! ! alabel:= fix;
1320 78 14 ! ! ! adata := data;
1330 79 15 ! ! END;
1340 80 16 ! ! signal( alarm_msg, netc_sem^ );
1350 81 17 ! ! IF msg^.u1 = read_stream THEN
1360 82 18 ! ! send_read_stream ( msg^.u3 ) ELSE
1370 83 19 ! ! signal( msg, write_sem.s^ );
1380 84 20 ! END;
1390 85 21 !
1400 86 22 END;
1410 87
\f
fesuplst 81.05.20. 14.53. page 3
2010 88 PROCEDURE send_write_stream; (* data to sm3502 in msg *)
2020 89 VAR
2030 90 rec_stream : integer;
2040 91 BEGIN
2050 92 1 ! sensesem( alarm_msg, write_sem.w^ );
2060 93 2 ! IF nil ( alarm_msg ) THEN
2070 94 3 ! signal( msg, que_up.s^ ) ELSE
2080 95 4 ! BEGIN
2090 96 5 ! ! LOCK msg AS buf : alarm_buf DO
2100 97 6 ! ! LOCK alarm_msg AS sbuf : stream_buf DO
2110 98 7 ! ! WITH alarm_msg^, buf, sbuf DO
2120 99 8 ! ! BEGIN
2130 100 9 ! ! ! rec_stream:= alabel.rec.micro MOD 256;
2140 101 10 ! ! ! IF rec_stream IN akt_streams THEN
2150 102 11 ! ! ! u3:= rec_stream ELSE
2160 103 12 ! ! ! u3:= dummy_stream;
2170 104 13 ! ! ! u1:= write_stream;
2180 105 14 ! ! ! u2:= 0;
2190 106 15 ! ! ! u4:= stream_mark;
2200 107 16 ! ! ! fix:= alabel;
2210 108 17 ! ! ! data:= adata;
2220 109 18 ! ! ! fi:= 6;
2230 110 19 ! ! ! la:= 8 + alabel.no_of_by;
2240 111 20 ! ! ! ne:= la + 1;
2250 112 21 ! ! END;
2260 113 22 ! ! IF msg^.u3 = netc_route2 THEN
2270 114 23 ! ! LOCK msg AS buf : netc_buf DO
2280 115 24 ! ! WITH buf DO
2290 116 25 ! ! IF (alabel.result=accepted) AND (intg=1) THEN
2300 117 26 ! ! netc_addr.macro:= netc_macro;
2310 118 27 ! ! signal( alarm_msg, stream_sem^ );
2320 119 28 ! ! return( msg );
2330 120 29 ! END;
2340 121 30 END;
2350 122
\f
fesuplst 81.05.20. 14.53. page 4
3010 123 PROCEDURE write_returned; (* writebuf returned from sm3502 *)
3020 124 BEGIN
3030 125 1 ! IF msg^.u2 = ok_result THEN
3040 126 2 ! signal( msg, write_sem.s^ ) ELSE
3050 127 3 ! (* sm3502 error, return buf *)
3060 128 4 ! BEGIN
3070 129 5 ! ! LOCK msg AS buf : return_buf DO
3080 130 6 ! ! WITH msg^, buf DO
3090 131 7 ! ! BEGIN
3100 132 8 ! ! ! data:= fix;
3110 133 9 ! ! ! fix.no_of_by:= 2*label_size+2;
3120 134 10 ! ! ! fix.rec := data.send;
3130 135 11 ! ! ! fix.send := data.rec;
3140 136 12 ! ! ! fix.send.micro:= tss_mic_addr;
3150 137 13 ! ! ! fix.op_code := #h12;
3160 138 14 ! ! ! fix.update := 0;
3170 139 15 ! ! ! fix.result := no_connection;
3180 140 16 ! ! END;
3190 141 17 ! ! send_to_netc;
3200 142 18 ! END;
3210 143 19 END;
3220 144
\f
fesuplst 81.05.20. 14.53. page 5
4010 145 (* main program *)
4020 146 BEGIN
4030 147 1 ! testopen( opzone, own.incname, op_sem );
4040 148 2 ! testout ( opzone, version, fe_env_version );
4050 149 3 ! FOR i:= 0 TO max_stream_no DO
4060 150 4 ! IF i IN akt_streams THEN
4070 151 5 ! BEGIN
4080 152 6 ! ! alloc ( msg, trans_pool, input_sem.s^ );
4090 153 7 ! ! send_read_stream(i);
4100 154 8 ! ! alloc( msg, trans_pool, input_sem.s^ );
4110 155 9 ! ! signal( msg, write_sem.s^ );
4120 156 10 ! END;
4130 157 11 !
4140 158 12 !
4150 159 13 ! REPEAT (* forever *)
4160 160 14 ! !
4170 161 15 ! ! wait( msg, input_sem.w^ );
4180 162 16 ! ! IF ownertest( trans_pool, msg ) THEN
4190 163 17 ! ! BEGIN (* from streamer *)
4200 164 18 ! ! ! IF msg^.u1 = read_stream THEN
4210 165 19 ! ! ! send_to_netc ELSE
4220 166 20 ! ! ! write_returned;
4230 167 21 ! ! END ELSE
4240 168 22 ! ! send_write_stream;
4250 169 23 ! !
4260 170 24 ! ! IF open( que_up.w^) AND open( write_sem.w^) THEN
4270 171 25 ! ! BEGIN (* write a qued message on stream *)
4280 172 26 ! ! ! wait( msg, que_up.w^);
4290 173 27 ! ! ! send_write_stream;
4300 174 28 ! ! END;
4310 175 29 ! !
4320 176 30 ! ! IF open( que_down.w^) AND open( com_pool^) THEN
4330 177 31 ! ! BEGIN
4340 178 32 ! ! ! wait( msg, que_down.w^);
4350 179 33 ! ! ! send_to_netc;
4360 180 34 ! ! END;
4370 181 35 ! !
4380 182 36 ! UNTIL false
4390 183 37 !
4400 184 38 END. (* process fesup *)
4410 185
\f
fesuplst 81.05.20. 14.53. page 6
0 36* 45* 45* 45* 53 105 138 149
1 15* 20* 44* 111 116
2 11* 44* 133 133
3 7* 8* 45*
4 44*
6 56 57 58 109
8 110
15 12*
106 20*
255 10*
256 100
abuf 70: 71
accepted 116
adata 29* 78= 108
akt_streams 44* 101 150
alabel 28* 32* 77= 100 107 110 116
alarmlabel 18* 24* 25* 28* 32*
alarmnetaddr 45* 45*
alarm_buf 27* 70 96
alarm_msg 41* 65 66 70: 71 80 92 93 97: 98 118
alloc 152 154
as 49: 69: 70: 96: 97: 114: 129:
buf 49: 50 69: 71 96: 98 114: 115 129: 130
byte 15* 20* 39* 47*
com_pool 4* 65 176
data 19* 25* 78 108= 132= 134 135
data_length 15* 20* 57
dummy 20*
dummy_stream 11* 103
false 182
fesupervisor 1*
fe_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
148
fi 17* 23* 56= 109=
fix 18* 24* 73 76 77 107= 132 133 134 135 136 137 138 139
h12 137
i 39* 149= 150 153
incname 147
input_sem 3* 152 154 161
integer 17* 23* 33* 90*
intg 33* 116
la 17* 23* 57= 110= 111
label_size 133
lock 49: 69: 70: 96: 97: 114: 129:
\f
fesuplst 81.05.20. 14.53. page 7
macro 117=
macroaddr 34* 45*
max_stream_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
12* 36* 149
micro 100 136=
msg 40* 49: 50 60 67 69: 81 82 83 94 96: 113 114: 119 125
126 129: 130 152 154 155 161 162 164 172 178
ne 17* 23* 58= 111=
netc_addr 45* 73 117
netc_buf 31* 114
netc_macro 34* 117
netc_route 75
netc_route1 74
netc_route2 113
netc_sem 4* 80
no 47* 54
no_connection <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
139
no_of_by 110 133=
no_read_stream <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
7* 9*
no_trans_bufs <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
9* 43*
no_write_stream <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
8* 9*
ok_result 125
open 170 170 176 176
opzone 42* 147 148
op_code 76 137=
op_sem 2* 147
own 147
ownertest 162
pool 43*
process 1*
que_down 3* 67 176 178
que_up 3* 94 170 172
read_stream 52 81 164
rec 73 100 134= 135
rec_stream 90* 100= 101 102
reference 41*
result 116 139=
return 119
return_buf 22* 129
s 67 83 94 126 152 154 155
\f
fesuplst 81.05.20. 14.53. page 8
sbuf 97: 98
sempointer 2* 4*
send 134 135= 136
send_read_stream <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
47* 82 153
send_to_netc 63* 141 165 179
send_write_stream <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
88* 168 173
sensesem 65 92
signal 60 67 80 83 94 118 126 155
streams 36* 44*
stream_buf 16* 43* 49 69 97
stream_mark 10* 55 106
stream_sem 4* 60 118
testopen 147
testout 148
trans_pool 43* 152 154 162
tss_mic_addr 136
ts_pointer 3*
tty_data 15* 19* 29*
u1 52= 81 104= 164
u2 53= 105= 125
u3 54= 74= 75= 82 102= 103= 113
u4 55= 76= 106=
update 138=
version 6* 148
w 92 161 170 170 172 176 178
wait 161 172 178
write_returned <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
123* 166
write_sem 3* 83 92 126 155 170
write_stream 104
zone 42*
\f
fesuplst 81.05.20. 14.53. page 9
AND 3
ARRAY 2
BEGIN 16
CONST 1
DO 13
ELSE 8
END 20
FOR 1
IF 13
IN 2
MOD 1
NIL 2
OF 4
PACKED 4
PROCEDURE 4
RECORD 4
REPEAT 1
SET 1
THEN 13
TO 1
TYPE 1
UNTIL 1
VAR 4
WITH 5
\f
jg3 1981.05.20 14.54
fesup program
81.05.20. 14.54. pascal80 version 1981.04.01
name headline beginline endline appetite(words)
send_read_st 48 49 61 : 11
send_to_netc 64 65 86 : 17
send_write_s 90 92 121 : 16
write_return 124 126 143 : 12
fesupervisor 6 147 184 : 116
code: 0 . 1662 = 1662 bytes
end of PASCAL80 compilation
end
blocksread = 52
«eof»