BYTE FUNC Find(CHAR ARRAY text CHAR c BYTE start) BYTE i i=start WHILE i<=text(0) DO IF text(i)=c THEN RETURN (i) FI i==+1 OD RETURN (0) PROC ProcessItem(CHAR ARRAY text INT ARRAY res INT POINTER size) BYTE pos INT start,end,i CHAR ARRAY tmp(200) pos=Find(text,'-,2) IF pos=0 THEN res(size^)=ValI(text) size^==+1 ELSE SCopyS(tmp,text,1,pos-1) start=ValI(tmp) SCopyS(tmp,text,pos+1,text(0)) end=ValI(tmp) FOR i=start TO end DO res(size^)=i size^==+1 OD FI RETURN PROC RangeExtraction(CHAR ARRAY text INT ARRAY res INT POINTER size) BYTE i,pos CHAR ARRAY tmp(200) i=1 size^=0 WHILE i<=text(0) DO pos=Find(text,',,i) IF pos=0 THEN SCopyS(tmp,text,i,text(0)) i=text(0)+1 ELSE SCopyS(tmp,text,i,pos-1) i=pos+1 FI ProcessItem(tmp,res,size) OD RETURN PROC PrintArray(INT ARRAY a INT size) INT i Put('[) FOR i=0 TO size-1 DO IF i>0 THEN Put(' ) FI PrintI(a(i)) OD Put(']) PutE() RETURN PROC Main() INT ARRAY res(100) INT size RangeExtraction("-6,-3--1,3-5,7-11,14,15,17-20",res,@size) PrintArray(res,size) RETURN