DEFINE PTR="CARD" TYPE Tokens=[ PTR buf ;BYTE ARRAY PTR arr ;CARD ARRAY PTR endPtr BYTE count] PROC Init(Tokens POINTER t BYTE ARRAY b PTR ARRAY a) t.buf=b t.arr=a t.endPtr=b t.count=0 RETURN PROC AddToken(Tokens POINTER t CHAR ARRAY s) PTR ARRAY a CHAR ARRAY tmp a=t.arr tmp=t.endPtr SCopy(tmp,s) a(t.count)=tmp t.count==+1 t.endPtr=t.endPtr+s(0)+1 RETURN PROC PrintTokens(Tokens POINTER t) BYTE i PTR ARRAY a a=t.arr FOR i=0 TO t.count-1 DO PrintF("""%S""%E",a(i)) OD RETURN PROC Append(CHAR ARRAY s CHAR c) s(0)==+1 s(s(0))=c RETURN PROC Tokenize(CHAR ARRAY s CHAR sep,esc Tokens POINTER res) BYTE ARRAY b(200) PTR ARRAY a(20) CHAR ARRAY tmp(255) BYTE i,isEsc CHAR c Init(res,b,a) isEsc=0 tmp(0)=0 FOR i=1 TO s(0) DO c=s(i) IF isEsc THEN isEsc=0 Append(tmp,c) ELSE IF c=esc THEN isEsc=1 ELSEIF c=sep THEN AddToken(res,tmp) tmp(0)=0 ELSE Append(tmp,c) FI FI OD AddToken(res,tmp) RETURN PROC Main() Tokens t Tokenize("one^|uno||three^^^^|four^^^|^cuatro|",'|,'^,t) PrintTokens(t) RETURN