|
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»