41 lines
1.2 KiB
Plaintext
41 lines
1.2 KiB
Plaintext
*process source attributes xref or(!);
|
|
/*********************************************************************
|
|
* 25.5.2014 Walter Pachl translated from REXX
|
|
*********************************************************************/
|
|
ed: Proc Options(main);
|
|
Call enc_dec('broood');
|
|
Call enc_dec('bananaaa');
|
|
Call enc_dec('hiphophiphop');
|
|
|
|
enc_dec: Proc(in);
|
|
Dcl in Char(*);
|
|
Dcl out Char(20) Var Init('');
|
|
Dcl st Char(26) Init('abcdefghijklmnopqrstuvwxyz');
|
|
Dcl sta Char(26) Init((st));
|
|
Dcl enc(20) Bin Fixed(31);
|
|
Dcl encn Bin Fixed(31) Init(0);
|
|
Dcl (i,p.k) Bin Fixed(31);
|
|
Dcl c Char(1);
|
|
Do i=1 To length(in);
|
|
c=substr(in,i,1);
|
|
p=index(st,c);
|
|
encn+=1;
|
|
enc(encn)=p-1;
|
|
st=c!!left(st,p-1)!!substr(st,p+1);
|
|
End;
|
|
Put Skip List(' in='!!in);
|
|
Put Skip List('sta='!!sta!!' original symbol table');
|
|
Put Skip Edit('enc=',(enc(i) do i=1 To encn))(a,20(F(3)));
|
|
Put Skip List(' st='!!st!!' symbol table after encoding');
|
|
Do i=1 To encn;
|
|
k=enc(i)+1;
|
|
out=out!!substr(sta,k,1);
|
|
sta=substr(sta,k,1)!!left(sta,k-1)!!substr(sta,k+1);
|
|
End;
|
|
Put Skip List('out='!!out);
|
|
Put Skip List(' ');
|
|
If out=in Then;
|
|
Else
|
|
Put Skip List('all wrong!!');
|
|
End;
|