65 lines
948 B
Text
65 lines
948 B
Text
BYTE FUNC GetLength(CHAR ARRAY s BYTE pos)
|
|
CHAR c
|
|
BYTE len
|
|
|
|
c=s(pos)
|
|
len=1
|
|
DO
|
|
pos==+1
|
|
IF pos<=s(0) AND s(pos)=c THEN
|
|
len==+1
|
|
ELSE
|
|
EXIT
|
|
FI
|
|
OD
|
|
RETURN (len)
|
|
|
|
PROC Append(CHAR ARRAY text,suffix)
|
|
BYTE POINTER srcPtr,dstPtr
|
|
BYTE len
|
|
|
|
len=suffix(0)
|
|
IF text(0)+len>255 THEN
|
|
len=255-text(0)
|
|
FI
|
|
IF len THEN
|
|
srcPtr=suffix+1
|
|
dstPtr=text+text(0)+1
|
|
MoveBlock(dstPtr,srcPtr,len)
|
|
text(0)==+suffix(0)
|
|
FI
|
|
RETURN
|
|
|
|
PROC LookAndSay(CHAR ARRAY in,out)
|
|
BYTE pos,len
|
|
CHAR ARRAY tmp(5)
|
|
|
|
pos=1 len=0 out(0)=0
|
|
WHILE pos<=in(0)
|
|
DO
|
|
len=GetLength(in,pos)
|
|
StrB(len,tmp)
|
|
Append(out,tmp)
|
|
out(0)==+1
|
|
out(out(0))=in(pos)
|
|
pos==+len
|
|
OD
|
|
RETURN
|
|
|
|
PROC Main()
|
|
CHAR ARRAY s1(256),s2(256)
|
|
BYTE i
|
|
|
|
SCopy(s1,"1")
|
|
PrintE(s1)
|
|
FOR i=1 TO 11
|
|
DO
|
|
IF (i&1)=0 THEN
|
|
LookAndSay(s2,s1)
|
|
PrintE(s1)
|
|
ELSE
|
|
LookAndSay(s1,s2)
|
|
PrintE(s2)
|
|
FI
|
|
OD
|
|
RETURN
|