--------------------------------------------------------------------------- -- model supplier: Johan M. Sandstrom, cell: 310.977.9435 -- work: 909.585.5488 -- email: johan@sandstrom.org -- project: PreSynth. -- description: Read source.vhd in, write source_encrypted.vhd out. -- filename: eval_encryptor.vhd -- yyyy/mm/dd modifier description of change -- ---------- -------- ---------------------------------------------- -- (see date) johan --------------------------------------------------------------------------- library std; use std.textio.all; -- OPERATION : 1) Create your own unique character substitution string by -- editing the generic substitute string. Use only lowercase -- letters, dont repeat any, and the string must be 26 -- characters. -- -- The commented characters, in alphabetical order, will be -- changed to the character in the corresponding position in -- the substitute string. The 'z' character cannot be -- changed. -- -- The example string is in reverse alphabetical order. -- -- 2) Edit the generic infile string. -- -- 3) Edit the generic outfile string. -- -- 4) In a VHDL simulator : compile, simulate and run to -- create the encrypted file. -- -- 5) PreSynth.vhd doesn't use externally declared stuff, but -- you may need to edit the encrypted file to re-create -- correct library names, types, component names, etc. so -- you can compile the encrypted file. Also, please edit in -- the correct clock_name(s). -- -- 6) Email the the encrypted file to evaluate PreSynth.vhd to -- johan@sandstrom.org entity eval_encryptor is -- abcdefghijklmnopqrstuvwxy_ generic(substitute : string := "zyxwvutsrqponmlkjihgfedcba"; -- *EDIT* infile : string := "source.vhd"; -- *EDIT* outfile : string := "source_encrypted.vhd"); -- *EDIT* end eval_encryptor; architecture bhv of eval_encryptor is constant hvtdqebmorzv:string:=" version.1998.07.05 ,"; constant xqbmuumnrun:positive:=76; constant xdwmuqbvd:positive:=400; constant veq:string:=(' '&';'& ht&'<'&'='& '.'&nul&'/'&'>'&':'& '*'&'('&')'&'+'&'-'& '&'&','&'''&'"'); constant ujd:string:=(';'&'<'&'='&'.'&'/'&'>'& ':'&'*'&'''&'('&')'& '+'&'-'&'&'&','); constant ae2:string:=('<'&'='&'/'&'>'&':'); constant de2:string:=('='&'>'&'*'&'>'&':'); procedure ybqpyv(constant dygdzqzyzv:in string(1 to 26))is constant dzt:string(1 to 26):="abcdefghijklmnopqrstuvwxyz"; variable neybz:natural; variable nfrtmec:boolean; begin nfvncmdygdzqzyzv:for ndmq in 1 to 26 loop nfrtmec:=false; neybz:=0; nfrtmebul:for nemq in 1 to 26 loop if dygdzqzyzv(ndmq)=dzt(nemq)then nfrtmec:=true; exit nfrtmebul; end if; end loop nfrtmebul; if not(nfrtmec)then assert false report "Substitute char '"&dygdzqzyzv(ndmq)& "' not allowed." severity error; wait; end if; sydzmebv:for semq in 1 to 26 loop if dygdzqzyzv(ndmq)=dygdzqzyzv(semq)then neybz:=neybz+1; end if; end loop sydzmebv; if neybz=0 then assert false report "Doesn't make sense." severity error; elsif neybz=1 then next nfvncmdygdzqzyzv; else assert false report "Substitute char '"&dygdzqzyzv(ndmq)& "' used more than once." severity error; wait; end if; end loop nfvncmdygdzqzyzv; end ybqpyv; function qveq(constant nfrt:in character)return boolean is begin for q in veq'range loop if(nfrt=veq(q))then return true; end if; end loop; return false; end qveq; function qujd(constant nfrt:in character)return boolean is begin for q in ujd'range loop if(nfrt=ujd(q))then return true; end if; end loop; return false; end qujd; function qae2(constant nfrt:in character)return boolean is begin for q in ae2'range loop if(nfrt=ae2(q))then return true; end if; end loop; return false; end qae2; function qde2(constant nfrt:in character)return boolean is begin for q in de2'range loop if(nfrt=de2(q))then return true; end if; end loop; return false; end qde2; function uqbvmneybz return positive is file ta:text is in infile; variable tu:line; variable neybz:natural; begin vbzqtvaquv:while not endfile(ta)loop readline(ta,tu); neybz:=neybz+1; end loop vbzqtvaquv; return neybz; end uqbvmneybz; function uqbvmuvbwzf return positive is file ta:text is in infile; variable tu:line; variable tuu:positive; begin vbzqtvaquv:while not endfile(ta)loop readline(ta,tu); if tu'length>tuu then tuu:=tu'length; end if; end loop vbzqtvaquv; if tuuquvb then quvb:=q; end if; q:=1; else q:=q+1; end if; urdzmnfrt:=nfrt; end loop vbzqtvuqbv; end loop vbzqtvaquv; if quvb<25 then return 25; else return quvb; end if; end qovbzqaqvtmuvbwzf; function qovbzqaqvtmneybz return positive is file ta:text is in infile; variable tu:line; variable nfrt:character; variable urdzmnfrt:character; variable q:natural; variable uuvb:natural; variable neybz:natural; begin vbzqtvaquv:while not endfile(ta)loop readline(ta,tu); uuvb:=tu'length; vbzqtvuqbv:for s in 1 to tu'length loop read(tu,nfrt); next vbzqtvaquv when(nfrt=nul)or (nfrt='-'and urdzmnfrt='-'); if qveq(nfrt)or s=uuvb then if qae2(urdzmnfrt)and qde2(nfrt)then q:=q-2; end if; if urdzmnfrt/=' 'then q:=q+1; end if; end if; urdzmnfrt:=nfrt; end loop vbzqtvuqbv; end loop vbzqtvaquv; return q; end qovbzqaqvtmneybz; constant un:positive:=uqbvmneybz+xdwmuqbvd; constant uu:positive:=uqbvmuvbwzf+30; constant qu:positive:=qovbzqaqvtmuvbwzf+10; constant qn:positive:=qovbzqaqvtmneybz*2; type qbmrttrl is array(1 to un,1 to uu)of character; type eur is array(1 to uu)of character; constant jfqzvmdirnv:string:=(' '&ht); function odu(constant dzt:in string)return string is variable dztmuvbwzf:positive; begin uvbwzfmueei:for uumq in 1 to qu loop if dzt(uumq+1)=nul then dztmuvbwzf:=uumq; exit uvbwzfmueei; end if; end loop uvbwzfmueei; return dzt(1 to dztmuvbwzf); end odu; function dzt2qbz(constant dzt:in string)return integer is variable val:natural; variable dqwb:integer:=1; begin for q in dzt'range loop val:=val*10+character'pos(dzt(q))-character'pos('0'); end loop; return val; end dzt2qbz; function uejvtmnfrt(constant nfrt:in character)return character is begin if nfrt=nul then return' '; end if; if nfrt>='A'and nfrt<='Z'then return character'val(character'pos(nfrt)+32); else return nfrt; end if; end uejvtmnfrt; function uejvtmdztqbw(constant dzt:in string)return string is variable d:string(dzt'range); begin for q in dzt'reverse_range loop d(q):=uejvtmnfrt(dzt(q)); end loop; return d; end uejvtmdztqbw; function qjd(constant nfrt:in character)return boolean is begin for q in jfqzvmdirnv'range loop if(nfrt=jfqzvmdirnv(q))then return true; end if; end loop; return false; end qjd; procedure qbmeyzmaquv is begin if infile=outfile then assert false report "Outfile must have a different filename "& "than infile." severity error; wait; end if; end qbmeyzmaquv; procedure neiltqwfz is variable u:line; begin write(u,string'("----------------------------------------------------------------")); write(u,string'("------------------------------------------")); write(u,lf); write(u,string'("--")); write(u,lf); write(u,string'("-- Copyright (c) 1998 Johan M. Sandstrom All rights reserved.")); write(u,lf); write(u,string'("--")); write(u,lf); write(u,string'("----------------------------------------------------------------")); write(u,string'("------------------------------------------")); writeline(output,u); end neiltqwfz; procedure hvtdqeb is variable u:line; begin write(u,string'("--")); write(u,lf); write(u,string'("-- eval_encryptor.vhd , ")); write(u,hvtdqebmorzv); write(u,lf); write(u,string'("--")); write(u,lf); write(u,string'("----------------------------------------------------------------")); write(u,string'("------------------------------------------")); writeline(output,u); end hvtdqeb; function qdmztrbdurzvmeaa(constant qbr:in qbmrttrl; constant ugumq:in positive; constant ngnmq:in positive)return boolean is variable pragma:boolean; variable dimqbovk:positive; begin dvrtnfmitrwxr:for dimq in ngnmq+2 to uu loop next dvrtnfmitrwxr when qjd(qbr(ugumq,dimq)); if uejvtmnfrt(qbr(ugumq,dimq))/='s'and uejvtmnfrt(qbr(ugumq,dimq))/='p'then return false; elsif uejvtmnfrt(qbr(ugumq,dimq))='s'and uejvtmnfrt(qbr(ugumq,dimq+1))='y'and uejvtmnfrt(qbr(ugumq,dimq+2))='n'and uejvtmnfrt(qbr(ugumq,dimq+3))='o'and uejvtmnfrt(qbr(ugumq,dimq+4))='p'and uejvtmnfrt(qbr(ugumq,dimq+5))='s'and uejvtmnfrt(qbr(ugumq,dimq+6))='y'and uejvtmnfrt(qbr(ugumq,dimq+7))='s'then pragma:=true; dimqbovk:=dimq+8; exit dvrtnfmitrwxr; elsif uejvtmnfrt(qbr(ugumq,dimq))='p'and uejvtmnfrt(qbr(ugumq,dimq+1))='r'and uejvtmnfrt(qbr(ugumq,dimq+2))='a'and uejvtmnfrt(qbr(ugumq,dimq+3))='g'and uejvtmnfrt(qbr(ugumq,dimq+4))='m'and uejvtmnfrt(qbr(ugumq,dimq+5))='a'then pragma:=true; dimqbovk:=dimq+6; exit dvrtnfmitrwxr; end if; end loop dvrtnfmitrwxr; if pragma then dvrtnfmztrbdurzvmeaa:for dzemq in dimqbovk to uu loop next dvrtnfmztrbdurzvmeaa when qjd(qbr(ugumq,dzemq)); if uejvtmnfrt(qbr(ugumq,dzemq))/='s'and uejvtmnfrt(qbr(ugumq,dzemq))/='t'then return false; elsif(uejvtmnfrt(qbr(ugumq,dzemq))='t'and uejvtmnfrt(qbr(ugumq,dzemq+1))='r'and uejvtmnfrt(qbr(ugumq,dzemq+2))='a'and uejvtmnfrt(qbr(ugumq,dzemq+3))='n'and uejvtmnfrt(qbr(ugumq,dzemq+4))='s'and uejvtmnfrt(qbr(ugumq,dzemq+5))='l'and uejvtmnfrt(qbr(ugumq,dzemq+6))='a'and uejvtmnfrt(qbr(ugumq,dzemq+7))='t'and uejvtmnfrt(qbr(ugumq,dzemq+8))='e'and uejvtmnfrt(qbr(ugumq,dzemq+9))='_'and uejvtmnfrt(qbr(ugumq,dzemq+10))='o'and uejvtmnfrt(qbr(ugumq,dzemq+11))='f'and uejvtmnfrt(qbr(ugumq,dzemq+12))='f')then return true; elsif(uejvtmnfrt(qbr(ugumq,dzemq))='s'and uejvtmnfrt(qbr(ugumq,dzemq+1))='y'and uejvtmnfrt(qbr(ugumq,dzemq+2))='n'and uejvtmnfrt(qbr(ugumq,dzemq+3))='t'and uejvtmnfrt(qbr(ugumq,dzemq+4))='h'and uejvtmnfrt(qbr(ugumq,dzemq+5))='e'and uejvtmnfrt(qbr(ugumq,dzemq+6))='s'and uejvtmnfrt(qbr(ugumq,dzemq+7))='i'and uejvtmnfrt(qbr(ugumq,dzemq+8))='s'and uejvtmnfrt(qbr(ugumq,dzemq+9))='_'and uejvtmnfrt(qbr(ugumq,dzemq+10))='o'and uejvtmnfrt(qbr(ugumq,dzemq+11))='f'and uejvtmnfrt(qbr(ugumq,dzemq+12))='f')then return true; else return false; end if; end loop dvrtnfmztrbdurzvmeaa; end if; return false; end qdmztrbdurzvmeaa; function qdmztrbdurzvmeb(constant qbr:in qbmrttrl; constant ugumq:in positive; constant ngnmq:in positive)return boolean is variable pragma:boolean; variable dimqbovk:positive; begin dvrtnfmitrwxr:for dimq in ngnmq+2 to uu loop next dvrtnfmitrwxr when qjd(qbr(ugumq,dimq)); if uejvtmnfrt(qbr(ugumq,dimq))/='s'and uejvtmnfrt(qbr(ugumq,dimq))/='p'then return false; elsif uejvtmnfrt(qbr(ugumq,dimq))='s'and uejvtmnfrt(qbr(ugumq,dimq+1))='y'and uejvtmnfrt(qbr(ugumq,dimq+2))='n'and uejvtmnfrt(qbr(ugumq,dimq+3))='o'and uejvtmnfrt(qbr(ugumq,dimq+4))='p'and uejvtmnfrt(qbr(ugumq,dimq+5))='s'and uejvtmnfrt(qbr(ugumq,dimq+6))='y'and uejvtmnfrt(qbr(ugumq,dimq+7))='s'then pragma:=true; dimqbovk:=dimq+8; exit dvrtnfmitrwxr; elsif uejvtmnfrt(qbr(ugumq,dimq))='p'and uejvtmnfrt(qbr(ugumq,dimq+1))='r'and uejvtmnfrt(qbr(ugumq,dimq+2))='a'and uejvtmnfrt(qbr(ugumq,dimq+3))='g'and uejvtmnfrt(qbr(ugumq,dimq+4))='m'and uejvtmnfrt(qbr(ugumq,dimq+5))='a'then pragma:=true; dimqbovk:=dimq+6; exit dvrtnfmitrwxr; end if; end loop dvrtnfmitrwxr; if pragma then dvrtnfmztrbdurzvmeb:for dzemq in dimqbovk to uu loop next dvrtnfmztrbdurzvmeb when qjd(qbr(ugumq,dzemq)); if uejvtmnfrt(qbr(ugumq,dzemq))/='s'and uejvtmnfrt(qbr(ugumq,dzemq))/='t'then return false; elsif(uejvtmnfrt(qbr(ugumq,dzemq))='t'and uejvtmnfrt(qbr(ugumq,dzemq+1))='r'and uejvtmnfrt(qbr(ugumq,dzemq+2))='a'and uejvtmnfrt(qbr(ugumq,dzemq+3))='n'and uejvtmnfrt(qbr(ugumq,dzemq+4))='s'and uejvtmnfrt(qbr(ugumq,dzemq+5))='l'and uejvtmnfrt(qbr(ugumq,dzemq+6))='a'and uejvtmnfrt(qbr(ugumq,dzemq+7))='t'and uejvtmnfrt(qbr(ugumq,dzemq+8))='e'and uejvtmnfrt(qbr(ugumq,dzemq+9))='_'and uejvtmnfrt(qbr(ugumq,dzemq+10))='o'and uejvtmnfrt(qbr(ugumq,dzemq+11))='n')then return true; elsif(uejvtmnfrt(qbr(ugumq,dzemq))='s'and uejvtmnfrt(qbr(ugumq,dzemq+1))='y'and uejvtmnfrt(qbr(ugumq,dzemq+2))='n'and uejvtmnfrt(qbr(ugumq,dzemq+3))='t'and uejvtmnfrt(qbr(ugumq,dzemq+4))='h'and uejvtmnfrt(qbr(ugumq,dzemq+5))='e'and uejvtmnfrt(qbr(ugumq,dzemq+6))='s'and uejvtmnfrt(qbr(ugumq,dzemq+7))='i'and uejvtmnfrt(qbr(ugumq,dzemq+8))='s'and uejvtmnfrt(qbr(ugumq,dzemq+9))='_'and uejvtmnfrt(qbr(ugumq,dzemq+10))='o'and uejvtmnfrt(qbr(ugumq,dzemq+11))='n')then return true; else return false; end if; end loop dvrtnfmztrbdurzvmeb; end if; return false; end qdmztrbdurzvmeb; procedure tvromhfoumatexmaquv(variable qbr:out qbmrttrl; variable qun:out positive)is file ta:text is in infile; variable tu:line; variable nfrt:character; variable q:positive; variable neybz:natural; begin vbzqtvaquv:while not endfile(ta)loop readline(ta,tu); vbzqtvuqbv:for s in 1 to tu'length loop read(tu,nfrt); qbr(q,s):=nfrt; end loop vbzqtvuqbv; q:=q+1; neybz:=neybz+1; qun:=neybz; end loop vbzqtvaquv; end tvromhfoumatexmaquv; procedure ntvrzvmniu(variable qbr:in qbmrttrl; variable niur:inout qbmrttrl; constant qun:in positive; variable niumun:out positive)is variable niumugumq:positive; variable niumngnmq:positive; variable niumaurw:boolean; variable jdrd:boolean; variable dp:boolean; variable op:boolean; variable nexxvbz:boolean; begin uqbvmglmuqbv:for ugumq in 1 to qun loop nexxvbz:=false; nfrtmglmnfrt:for ngnmq in 1 to uu loop if(qbr(ugumq,ngnmq)='''and qbr(ugumq,ngnmq+2)=''')or (qbr(ugumq,ngnmq)='''and qbr(ugumq,ngnmq-2)=''')then dp:=not(dp); end if; if qbr(ugumq,ngnmq)='"'and not(dp)then op:=not(op); end if; if not(op)and not(dp)then if qbr(ugumq,ngnmq)='-'and qbr(ugumq,ngnmq+1)='-'then if qdmztrbdurzvmeaa(qbr,ugumq,ngnmq)then null; elsif qdmztrbdurzvmeb(qbr,ugumq,ngnmq)then null; else nexxvbz:=true; end if; end if; end if; if nexxvbz or(qbr(ugumq,ngnmq)=nul)then if niumaurw=false then niumngnmq:=1; if jdrd=false then niumugumq:=niumugumq+1; end if; end if; niumaurw:=false; jdrd:=false; next uqbvmglmuqbv; end if; if op then niur(niumugumq,niumngnmq):=qbr(ugumq,ngnmq); elsif dp then niur(niumugumq,niumngnmq):=qbr(ugumq,ngnmq); else niur(niumugumq,niumngnmq):=uejvtmnfrt(qbr(ugumq,ngnmq)); end if; if niumaurw and qjd(qbr(ugumq,ngnmq))then jdrd:=true; niumngnmq:=1; niumaurw:=false; else niumngnmq:=niumngnmq+1; end if; if qbr(ugumq,ngnmq)=';'and not(op)and not(dp)then niumugumq:=niumugumq+1; niumngnmq:=1; niumaurw:=true; end if; end loop nfrtmglmnfrt; end loop uqbvmglmuqbv; niumun:=niumugumq; uqbvdmrwrqb:for urmq in 1 to niumugumq loop nfrtdmrwrqb:for nrmq in eur'high downto eur'low loop if qjd(niur(urmq,nrmq))or niur(urmq,nrmq)=nul then niur(urmq,nrmq):=nul; else exit nfrtdmrwrqb; end if; end loop nfrtdmrwrqb; end loop uqbvdmrwrqb; end ntvrzvmniu; function cvljeto(constant dzt:in string)return boolean is begin if dzt="output" or dzt="deallocate" or dzt="nul" or dzt="soh" or dzt="stx" or dzt="etx" or dzt="eot" or dzt="enq" or dzt="ack" or dzt="bel" or dzt="bs" or dzt="ht" or dzt="lf" or dzt="vt" or dzt="np" or dzt="cr" or dzt="so" or dzt="si" or dzt="dle" or dzt="dc1" or dzt="dc2" or dzt="dc3" or dzt="dc4" or dzt="nak" or dzt="syn" or dzt="etb" or dzt="can" or dzt="em" or dzt="sub" or dzt="esc" or dzt="fs" or dzt="gs" or dzt="rs" or dzt="us" or dzt="del" or dzt="base" or dzt="left" or dzt="right" or dzt="high" or dzt="low" or dzt="ascending" or dzt="image" or dzt="value" or dzt="pos" or dzt="val" or dzt="succ" or dzt="pred" or dzt="leftof" or dzt="rightof" or dzt="range" or dzt="reverse_range" or dzt="length" or dzt="delayed" or dzt="stable" or dzt="quiet" or dzt="transaction" or dzt="event" or dzt="active" or dzt="last_event" or dzt="last_active" or dzt="last_value" or dzt="driving" or dzt="driving_value" or dzt="simple_name" or dzt="instance_name" or dzt="boolean" or dzt="bit" or dzt="character" or dzt="real" or dzt="time" or dzt="natural" or dzt="positive" or dzt="string" or dzt="bit_vector" or dzt="file" or dzt="foreign" or dzt="line" or dzt="text" or dzt="side" or dzt="width" or dzt="readline" or dzt="read" or dzt="writeline" or dzt="write" or dzt="endline" or dzt="endfile" or dzt="note" or dzt="warning" or dzt="error" or dzt="failure" or dzt="integer" or dzt="true" or dzt="false" or dzt="std" or dzt="textio" or dzt="ieee" or dzt="std_logic_1164" or dzt="std_logic" or dzt="std_logic_vector" or dzt="to_bit" or dzt="to_bitvector" or dzt="to_stdulogic" or dzt="to_stdlogicvector" or dzt="to_stdulogicvector" or dzt="to_x01" or dzt="to_x01z" or dzt="to_ux01" or dzt="rising_edge" or dzt="falling_edge" or dzt="synopsys" or dzt="pragma" or dzt="translate_off" or dzt="translate_on" or dzt="synthesis_off" or dzt="synthesis_on" or dzt="abs" or dzt="access" or dzt="after" or dzt="alias" or dzt="all" or dzt="and" or dzt="architecture" or dzt="array" or dzt="assert" or dzt="attribute" or dzt="begin" or dzt="block" or dzt="body" or dzt="buffer" or dzt="bus" or dzt="case" or dzt="component" or dzt="configuration" or dzt="constant" or dzt="disconnect" or dzt="downto" or dzt="else" or dzt="elsif" or dzt="end" or dzt="entity" or dzt="exit" or dzt="file" or dzt="for" or dzt="function" or dzt="generate" or dzt="generic" or dzt="group" or dzt="guarded" or dzt="if" or dzt="impure" or dzt="in" or dzt="inertial" or dzt="inout" or dzt="is" or dzt="label" or dzt="library" or dzt="linkage" or dzt="literal" or dzt="loop" or dzt="map" or dzt="mod" or dzt="nand" or dzt="new" or dzt="next" or dzt="nor" or dzt="not" or dzt="null" or dzt="of" or dzt="on" or dzt="open" or dzt="or" or dzt="others" or dzt="out" or dzt="package" or dzt="port" or dzt="postponed" or dzt="procedure" or dzt="process" or dzt="pure" or dzt="range" or dzt="record" or dzt="register" or dzt="reject" or dzt="rem" or dzt="report" or dzt="return" or dzt="rol" or dzt="ror" or dzt="select" or dzt="severity" or dzt="signal" or dzt="shared" or dzt="sla" or dzt="sll" or dzt="sra" or dzt="srl" or dzt="subtype" or dzt="then" or dzt="to" or dzt="transport" or dzt="type" or dzt="unaffected" or dzt="units" or dzt="until" or dzt="use" or dzt="variable" or dzt="wait" or dzt="when" or dzt="while" or dzt="with" or dzt="xnor" or dzt="xor" then return true; else return false; end if; end cvljeto; function djqznf(constant dzt:in string)return string is variable bd:string(1 to dzt'length); begin djqznfmueei:for dumq in 1 to dzt'length loop if dzt(dumq)='a'then bd(dumq):=substitute(1); elsif dzt(dumq)='b'then bd(dumq):=substitute(2); elsif dzt(dumq)='c'then bd(dumq):=substitute(3); elsif dzt(dumq)='d'then bd(dumq):=substitute(4); elsif dzt(dumq)='e'then bd(dumq):=substitute(5); elsif dzt(dumq)='f'then bd(dumq):=substitute(6); elsif dzt(dumq)='g'then bd(dumq):=substitute(7); elsif dzt(dumq)='h'then bd(dumq):=substitute(8); elsif dzt(dumq)='i'then bd(dumq):=substitute(9); elsif dzt(dumq)='j'then bd(dumq):=substitute(10); elsif dzt(dumq)='k'then bd(dumq):=substitute(11); elsif dzt(dumq)='l'then bd(dumq):=substitute(12); elsif dzt(dumq)='m'then bd(dumq):=substitute(13); elsif dzt(dumq)='n'then bd(dumq):=substitute(14); elsif dzt(dumq)='o'then bd(dumq):=substitute(15); elsif dzt(dumq)='p'then bd(dumq):=substitute(16); elsif dzt(dumq)='q'then bd(dumq):=substitute(17); elsif dzt(dumq)='r'then bd(dumq):=substitute(18); elsif dzt(dumq)='s'then bd(dumq):=substitute(19); elsif dzt(dumq)='t'then bd(dumq):=substitute(20); elsif dzt(dumq)='u'then bd(dumq):=substitute(21); elsif dzt(dumq)='v'then bd(dumq):=substitute(22); elsif dzt(dumq)='w'then bd(dumq):=substitute(23); elsif dzt(dumq)='x'then bd(dumq):=substitute(24); elsif dzt(dumq)='y'then bd(dumq):=substitute(25); elsif dzt(dumq)='_'then bd(dumq):=substitute(26); else bd(dumq):=dzt(dumq); end if; end loop djqznfmueei; return bd; end djqznf; procedure syxguv(variable niur:inout qbmrttrl; constant niumun:in positive)is variable bvjmnfrtd:string(1 to 9); variable niumugumq:positive; variable niumngnmq:positive; variable niumaurw:boolean; variable jdrd:boolean; variable dp:boolean; variable op:boolean; variable nj:string(1 to qu); variable bj:string(1 to qu); variable jmq:positive; variable dnzma:boolean; variable bjmq:positive; begin uqbvmglmuqbv:for ugumq in 1 to niumun loop jmq:=1; nfrtmglmnfrt:for ngnmq in 1 to uu loop next uqbvmglmuqbv when niur(ugumq,ngnmq)=nul; if(niur(ugumq,ngnmq)='''and niur(ugumq,ngnmq+2)=''')or (niur(ugumq,ngnmq)='''and niur(ugumq,ngnmq-2)=''')then dp:=not(dp); end if; if niur(ugumq,ngnmq)='"'and not(dp)then op:=not(op); end if; if op or dp then null; elsif jmq/=1 then jmq:=jmq-1; else qnj:for qnjmq in 1 to qu loop nj(qnjmq):=nul; end loop qnj; gnj:for gnjmq in ngnmq to uu loop if gnjmq=ngnmq then if qveq(niur(ugumq,gnjmq))then if niur(ugumq,gnjmq+1)='='or niur(ugumq,gnjmq+1)='>'or niur(ugumq,gnjmq+1)='*'then dnzma:=true; else nj(jmq):=niur(ugumq,gnjmq); exit gnj; end if; end if; elsif dnzma then dnzma:=false; else exit gnj when qveq(niur(ugumq,gnjmq)); end if; nj(jmq):=niur(ugumq,gnjmq); jmq:=jmq+1; end loop gnj; if cvljeto(odu(nj))then next nfrtmglmnfrt; else bj:=djqznf(nj); end if; if cvljeto(odu(bj))then bj:=nj; end if; dbj:for dbjmq in ngnmq to uu loop exit dbj when nj(bjmq)=nul; niur(ugumq,dbjmq):=bj(bjmq); bjmq:=bjmq+1; end loop dbj; bjmq:=1; end if; end loop nfrtmglmnfrt; end loop uqbvmglmuqbv; end syxguv; procedure jtqzvmniumzemaquv(variable niur:in qbmrttrl; constant niumun:in positive)is file niuaquv:text is out outfile; variable ju:line; variable nfrt:character; variable s:positive; variable geua:boolean; variable dp:boolean; variable op:boolean; begin vbzqtvaquv:for q in 1 to niumun loop gurbcmuqbv:for gumq in 1 to uu loop if niur(q,gumq)/=nul then exit gurbcmuqbv; elsif gumq=uu then next vbzqtvaquv; end if; end loop gurbcmuqbv; s:=1; nfrt:='-'; vbzqtvuqbv:while nfrt/=nul loop if(niur(q,s)='''and niur(q,s+2)=''')or (niur(q,s)='''and niur(q,s-2)=''')then dp:=not(dp); end if; if niur(q,s)='"'and not(dp)then op:=not(op); end if; if niur(q,s)=' 'and s=1 then geua:=true; s:=s+1; elsif geua and niur(q,s)=' 'then s:=s+1; elsif geua and niur(q,s)/=' 'then geua:=false; nfrt:=niur(q,s); s:=s+1; exit vbzqtvuqbv when nfrt=nul; write(ju,nfrt); elsif niur(q,s)=' ' and niur(q,s+1)=' 'and not(op)and not(dp)then s:=s+1; elsif niur(q,s)=' ' and qujd(niur(q,s+1))and not(op)and not(dp)then s:=s+1; elsif niur(q,s)=' ' and qujd(niur(q,s-1))and not(op)and not(dp)then s:=s+1; else nfrt:=niur(q,s); s:=s+1; exit vbzqtvuqbv when nfrt=nul; write(ju,nfrt); end if; end loop vbzqtvuqbv; writeline(niuaquv,ju); end loop vbzqtvaquv; end jtqzvmniumzemaquv; begin xrqb:process variable qbr:qbmrttrl; variable niur:qbmrttrl; variable qun:positive; variable niumun:positive; begin neiltqwfz; hvtdqeb; qbmeyzmaquv; if qn=2 then assert false report "Zero lines in infile." severity error; wait; end if; ybqpyv(substitute); tvromhfoumatexmaquv(qbr=>qbr, qun=>qun); ntvrzvmniu(qbr=>qbr, niur=>niur, qun=>qun, niumun=>niumun); syxguv(niur=>niur, niumun=>niumun); jtqzvmniumzemaquv(niur=>niur, niumun=>niumun); assert false report "Created "&outfile severity note; wait; end process xrqb; end bhv;