100H: /* CP/M CALLS */ BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT; PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT; /* SPLIT A STRING ON CHARACTER 'SEP'. THE 'PARTS' ARRAY WILL CONTAIN POINTERS TO THE START OF EACH ELEMENT. THE AMOUNT OF PARTS IS RETURNED. */ TOKENIZE: PROCEDURE (SEP, STR, PARTS) ADDRESS; DECLARE SEP BYTE, (STR, PARTS) ADDRESS; DECLARE (N, P BASED PARTS) ADDRESS; DECLARE CH BASED STR BYTE; N = 0; LOOP: P(N) = STR; N = N + 1; DO WHILE CH <> '$' AND CH <> SEP; STR = STR + 1; END; IF CH = '$' THEN RETURN N; CH = '$'; STR = STR + 1; GO TO LOOP; END TOKENIZE; /* TEST ON THE GIVEN INPUT */ DECLARE HELLO (24) BYTE INITIAL ('HELLO,HOW,ARE,YOU,TODAY$'); DECLARE PARTS (10) ADDRESS; DECLARE (I, LEN) ADDRESS; LEN = TOKENIZE(',', .HELLO, .PARTS); DO I = 0 TO LEN-1; CALL PRINT(PARTS(I)); CALL PRINT(.'. $'); END; CALL EXIT; EOF;