50 lines
990 B
Plaintext
50 lines
990 B
Plaintext
*process source xref attributes or(!);
|
|
assocarr: Proc Options(main);
|
|
Dcl 1 aa,
|
|
2 an Bin Fixed(31) Init(0),
|
|
2 pairs(100),
|
|
3 key Char(10) Var,
|
|
3 val Char(10) Var;
|
|
Dcl hi Char(10) Value((high(10)));
|
|
Dcl i Bin Fixed(31);
|
|
Dcl k Char(10) Var;
|
|
|
|
Call aadd('1','spam');
|
|
Call aadd('2','eggs');
|
|
Call aadd('3','foo');
|
|
Call aadd('2','spam');
|
|
Call aadd('4','spam');
|
|
|
|
Put Skip(' ');
|
|
Put Edit('Iterate over keys')(Skip,a);
|
|
Do i=1 To an;
|
|
k=key(i);
|
|
Put Edit('>'!!k!!'< => >'!!aacc(k)!!'<')(Skip,a);
|
|
End;
|
|
|
|
aadd: Proc(k,v);
|
|
Dcl (k,v) Char(*) Var;
|
|
If aacc(k)^=hi Then
|
|
Put Edit('Key >',k,'< would be a duplicate, not added.')
|
|
(Skip,a,a,a);
|
|
Else Do;
|
|
an+=1;
|
|
key(an)=k;
|
|
val(an)=v;
|
|
Put Edit('added >'!!k!!'< -> '!!v!!'<')(Skip,a);
|
|
End;
|
|
End;
|
|
|
|
aacc: Proc(k) Returns(Char(10) Var);
|
|
Dcl k Char(*) Var;
|
|
Dcl v Char(10) Var;
|
|
Dcl i Bin Fixed(31);
|
|
Do i=1 To an;
|
|
If key(i)=k Then
|
|
Return(val(i));
|
|
End;
|
|
Return(hi);
|
|
End;
|
|
|
|
End;
|