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; PUT$NUM: PROCEDURE (N, WIDTH); DECLARE S (6) BYTE INITIAL (' $'); DECLARE N ADDRESS, (I, WIDTH) BYTE; I = 5; DIGIT: S(I := I-1) = N MOD 10 + '0'; IF (N := N/10) > 0 THEN GO TO DIGIT; DO I=I-1 TO 0 BY -1; S(I) = ' '; END; CALL PRINT(.S(6-WIDTH)); END PUT$NUM; WIDTH: PROCEDURE (N) BYTE; DECLARE (N, W) BYTE; W = 1; DO WHILE N>0; N = N/10; W = W+1; END; RETURN W; END WIDTH; FLOYD: PROCEDURE (ROWS); DECLARE (ROWS, ROW, COL) BYTE; DECLARE (N, MAXNO) ADDRESS; MAXNO = ROWS * (ROWS+1)/2; N = 1; DO ROW = 1 TO ROWS; DO COL = 1 TO ROW; CALL PUT$NUM(N, 1 + WIDTH(MAXNO - ROWS + COL)); N = N+1; END; CALL PRINT(.(13,10,'$')); END; END FLOYD; CALL FLOYD(5); CALL PRINT(.(13,10,'$')); CALL FLOYD(14); CALL EXIT; EOF