41 lines
1011 B
Plaintext
41 lines
1011 B
Plaintext
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;
|