%externalroutine conv %alias "c#conv"(%string (255) s) %string (255) t,u,v %ownstring (255) last add, last pd %integer i,j,k,l %owninteger rec = 0, add = 0 %ownbyteintegerarray a(0:255) %ROUTINE define(%STRING (255) s) %EXTERNALROUTINESPEC emas3(%STRINGNAME command,params, %INTEGERNAME flag) %INTEGER flag emas3("DEFINE",s,flag) %END; ! Of %ROUTINE define. %on %event 9 %start -> eof %finish %routine read my line %integer i,j,k,l,sh, shm, ind, x %byteintegerarray pda(0:5) l = 0; ind = 1; sh = 0 %cycle i = 1, 1, 5 readsymbol(j); %if j = 10 %then %monitor pda(i) = j %repeat pda(0) = 5 %if last pd # string(addr(pda(0))) %start last pd = string(addr(pda(0))) select output(0) printstring("New PD:".last pd." ") select output(2) printstring("P ".last pd." ") %finish skipsymbol; skipsymbol; ! space and first one '00' %cycle readsymbol(k) %if k = 10 %then a(0) = ind-1 %and %exit %if k=' ' %and l = ' ' %then %continue %if k = '!' %start sh = sh+1 %if sh = 3 %then shm = ind %if a(ind-1) = ' ' %or a(ind-1) = '!' %c %then ind=ind-1; ! delete space before ! %if a(ind-1) = '!' %then ind=ind-1 %finish a(ind) = k; ind = ind+1 l = k %repeat %cycle i = shm+2, 1, ind %exit %if a(i) = ' '; ! 1st space after house number %repeat x = ind-i-2; ! address length %if x >= 2 %start a(i) = x %if last add # string(addr(a(i))) %start add = add+1 last add = string(addr(a(i))) printstring("A ".last add." ") %finish %finish a(0) = i-1 %end %routine write my line %integer i %return %if a(0) = 0 printstring(string(addr(a(0)))); newline %end %unless s -> t.("/").u %start printstring("params in/out ") %stop %finish define("1,".t); define("2,".u) select input(1); select output(2) %cycle read my line rec = rec+1 write my line %repeat eof: select output(0) printstring("Finished, records = "); write(rec, 1) printstring(", addresses ="); write(add, 1) newline %end %endoffile