DEFINE PTR="CARD" DEFINE PAIR_SIZE="4" DEFINE PAIR_COUNT="1" TYPE Pair=[PTR name,value] BYTE ARRAY pairs(100) BYTE count=[0] PTR FUNC GetItemAddr(INT index) PTR addr addr=pairs+index*PAIR_SIZE RETURN (addr) PROC PrintArray() INT i Pair POINTER p Put('[) FOR i=0 TO count-1 DO IF i>0 THEN Put(' ) FI p=GetItemAddr(i) PrintF("(%S,%S)",p.name,p.value) OD Put(']) PutE() RETURN PROC Append(CHAR ARRAY n,v) Pair POINTER dst dst=GetItemAddr(count) dst.name=n dst.value=v count==+1 RETURN PROC InitData() Append("Warsaw","Poland") Append("Prague","Czech Republic") Append("London","United Kingdom") Append("Paris","France") Append("Madrit","Spain") Append("Berlin","Germany") Append("Rome","Italy") Append("Moscow","Russia") Append("Budapest","Hungary") RETURN PROC Sort() INT i,j,minpos CHAR ARRAY tmp Pair POINTER p1,p2 FOR i=0 TO count-2 DO minpos=i FOR j=i+1 TO count-1 DO p1=GetItemAddr(minpos) p2=GetItemAddr(j) IF SCompare(p1.name,p2.name)>0 THEN minpos=j FI OD IF minpos#i THEN p1=GetItemAddr(minpos) p2=GetItemAddr(i) tmp=p1.name p1.name=p2.name p2.name=tmp tmp=p1.value p1.value=p2.value p2.value=tmp FI OD RETURN PROC Main() InitData() PrintE("Array before sort:") PrintArray() PutE() Sort() PrintE("Array after sort:") PrintArray() RETURN