100H: BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; EXIT: PROCEDURE; GO TO 0; END EXIT; PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT; PRINT$NUM: PROCEDURE (N, BASE); DECLARE S (17) BYTE INITIAL ('................$'); DECLARE (N, P) ADDRESS, (DGT BASED P, BASE) BYTE; P = .S(16); DIGIT: P = P - 1; DGT = N MOD BASE + '0'; N = N / BASE; IF N > 0 THEN GO TO DIGIT; CALL PRINT(P); END PRINT$NUM; GRAY$ENCODE: PROCEDURE (N) BYTE; DECLARE N BYTE; RETURN N XOR SHR(N, 1); END GRAY$ENCODE; GRAY$DECODE: PROCEDURE (N) BYTE; DECLARE (N, R, I) BYTE; R = N; DO WHILE (N := SHR(N,1)) > 0; R = R XOR N; END; RETURN R; END GRAY$DECODE; DECLARE (I, G) BYTE; DO I = 0 TO 31; CALL PRINT$NUM(I, 10); CALL PRINT(.(':',9,'$')); CALL PRINT$NUM(I, 2); CALL PRINT(.(9,'=>',9,'$')); CALL PRINT$NUM(G := GRAY$ENCODE(I), 2); CALL PRINT(.(9,'=>',9,'$')); CALL PRINT$NUM(GRAY$DECODE(G), 10); CALL PRINT(.(10,13,'$')); END; CALL EXIT; EOF