53 lines
1.2 KiB
Text
53 lines
1.2 KiB
Text
100H:
|
|
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;
|
|
|
|
COPY$STRING: PROCEDURE (SRC, DEST);
|
|
DECLARE (SRC, DEST, I) ADDRESS;
|
|
DECLARE (S BASED SRC, D BASED DEST) BYTE;
|
|
I = 0;
|
|
DO WHILE S(I) <> '$';
|
|
D(I) = S(I);
|
|
I = I + 1;
|
|
END;
|
|
D(I) = '$';
|
|
END COPY$STRING;
|
|
|
|
COUNT: PROCEDURE (POS) BYTE;
|
|
DECLARE POS ADDRESS, (I, P BASED POS) BYTE;
|
|
I = 1;
|
|
DO WHILE P(I) = P;
|
|
I = I + 1;
|
|
END;
|
|
RETURN I;
|
|
END COUNT;
|
|
|
|
LOOK$SAY: PROCEDURE (OLD, NEW);
|
|
DECLARE (OLD, NEW) ADDRESS;
|
|
DECLARE (O BASED OLD, N BASED NEW, C) BYTE;
|
|
DO WHILE O <> '$';
|
|
C = COUNT(OLD);
|
|
N = O;
|
|
N(1) = C + '0';
|
|
NEW = NEW + 2;
|
|
OLD = OLD + C;
|
|
END;
|
|
N = '$';
|
|
END LOOK$SAY;
|
|
|
|
DECLARE STEPS LITERALLY '15';
|
|
DECLARE BUF$SIZE LITERALLY '128';
|
|
|
|
DECLARE BUFR1 (BUF$SIZE) BYTE INITIAL ('1$');
|
|
DECLARE BUFR2 (BUF$SIZE) BYTE;
|
|
DECLARE I BYTE;
|
|
|
|
DO I=1 TO STEPS;
|
|
CALL PRINT(.BUFR1);
|
|
CALL PRINT(.(13,10,'$'));
|
|
CALL LOOK$SAY(.BUFR1, .BUFR2);
|
|
CALL COPY$STRING(.BUFR2, .BUFR1);
|
|
END;
|
|
CALL EXIT;
|
|
EOF
|