100H: /* CP/M CALL */ BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; PUT$CHAR: PROCEDURE (CHAR); DECLARE CHAR BYTE; CALL BDOS(2, CHAR); END PUT$CHAR; /* PRINT STRING BACKWARDS UNTIL ZERO */ PRINT$BACK: PROCEDURE (S); DECLARE S ADDRESS, C BASED S BYTE; DO WHILE C <> 0; CALL PUT$CHAR(C); S = S - 1; END; CALL PUT$CHAR(13); CALL PUT$CHAR(10); END PRINT$BACK; /* INCREMENT NUMBER STORED AS ASCII DIGITS */ INCR$BIGINT: PROCEDURE (BI) ADDRESS; DECLARE (BI, R) ADDRESS, D BASED BI BYTE; R = BI; DO WHILE D <> 0; BI = BI - 1; END; INCR$DIGIT: BI = BI + 1; IF D = 0 THEN DO; D = '1'; D(1) = 0; RETURN BI; END; ELSE IF D = '9' THEN DO; D = '0'; GO TO INCR$DIGIT; END; ELSE DO; D = D + 1; RETURN R; END; END INCR$BIGINT; /* STORE INITIAL 'BIG INTEGER' */ INIT$BIGINT: PROCEDURE (X) ADDRESS; DECLARE X ADDRESS, D BASED X BYTE; D(0) = 0; D(1) = '0'; D(2) = 0; RETURN .D(1); END INIT$BIGINT; /* LOOP PRINTING NUMBERS FOREVER */ DECLARE I ADDRESS; I = INIT$BIGINT(.MEMORY); DO WHILE 1; I = INCR$BIGINT(I); CALL PRINT$BACK(I); END; EOF