DEFINE MAX_BLOCKS="10" DEFINE NOT_FOUND="255" BYTE FUNC GetBlockAtPos(BYTE p BYTE ARRAY blocks,pos INT count) INT i FOR i=0 TO count-1 DO IF p>=pos(i) AND pcells THEN RETURN (0) FI OD RETURN (1) BYTE FUNC MoveToRight(BYTE cells BYTE ARRAY blocks,pos INT count,startFrom) pos(startFrom)==+1 IF pos(startFrom)+blocks(startFrom)>cells THEN RETURN (0) FI RETURN (LeftMostPos(cells,blocks,pos,count,startFrom+1)) PROC Process(BYTE cells BYTE ARRAY blocks INT count) BYTE ARRAY pos(MAX_BLOCKS) BYTE success INT current IF count=0 THEN PrintResult(cells,blocks,pos,count) RETURN FI pos(0)=0 success=LeftMostPos(cells,blocks,pos,count,1) IF success=0 THEN PrintE("No solutions") RETURN FI current=count-1 WHILE success DO PrintResult(cells,blocks,pos,count) DO success=MoveToRight(cells,blocks,pos,count,current) IF success THEN current=count-1 ELSE current==-1 IF current<0 THEN EXIT FI FI UNTIL success OD OD RETURN PROC Test(BYTE cells BYTE ARRAY blocks INT count) BYTE CH=$02FC ;Internal hardware value for last key pressed INT i PrintB(cells) Print(" cells [") FOR i=0 TO count-1 DO PrintB(blocks(i)) IF i