mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
Upload
Digital Research
This commit is contained in:
70
ASSEMBLY & COMPILE TOOLS/PLM COMPILER/PLMSAMP.PLM
Normal file
70
ASSEMBLY & COMPILE TOOLS/PLM COMPILER/PLMSAMP.PLM
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
SAMPLE PL/M PROGRAM
|
||||
|
||||
THIS PROGRAM CALCULATES AND PRINTS OUT THE SQUARE ROOTS OF
|
||||
ALL INTEGERS BETWEEN 1 AND 1000.
|
||||
*/
|
||||
DECLARE CR LITERALLY '0DH', LF LITERALLY '0AH', TRUE LITERALLY '1',
|
||||
FALSE LITERALLY '0';
|
||||
|
||||
10H: /* IS THE ORIGIN OF THIS PROGRAM */
|
||||
|
||||
SQUARE$ROOT: PROCEDURE(X) BYTE;
|
||||
DECLARE (X,Y,Z) ADDRESS;
|
||||
Y=X; Z=SHR(X+1,1);
|
||||
DO WHILE Y<>Z;
|
||||
Y=Z; Z=SHR(X/Y + Y + 1, 1);
|
||||
END;
|
||||
RETURN Y;
|
||||
END SQUAREROOT;
|
||||
|
||||
/* PRINT USING INTELLEC MONITOR */
|
||||
PRINT$CHAR: PROCEDURE (CHAR);
|
||||
DECLARE CHAR BYTE;
|
||||
DECLARE IOCO LITERALLY '3809H';
|
||||
GO TO IOCO;
|
||||
END PRINT$CHAR;
|
||||
|
||||
PRINT$STRING: PROCEDURE(NAME,LENGTH);
|
||||
DECLARE NAME ADDRESS,
|
||||
(LENGTH,I,CHAR BASED NAME) BYTE;
|
||||
DO I = 0 TO LENGTH-1;
|
||||
CALL PRINT$CHAR(CHAR(I));
|
||||
END;
|
||||
END PRINT$STRING;
|
||||
|
||||
PRINT$NUMBER: PROCEDURE(NUMBER,BASE,CHARS,ZERO$SUPPRESS);
|
||||
DECLARE NUMBER ADDRESS, (BASE,CHARS,ZERO$SUPPRESS,I,J) BYTE;
|
||||
DECLARE TEMP(16) BYTE;
|
||||
IF CHARS > LAST(TEMP) THEN CHARS = LAST(TEMP);
|
||||
DO I = 1 TO CHARS;
|
||||
J=NUMBER MOD BASE + '0';
|
||||
IF J > '9' THEN J = J + 7;
|
||||
IF ZERO$SUPPRESS AND I <> 1 AND NUMBER = 0 THEN
|
||||
J = ' ';
|
||||
TEMP(LENGTH(TEMP)-I) = J;
|
||||
NUMBER = NUMBER / BASE;
|
||||
END;
|
||||
CALL PRINT$STRING(.TEMP + LENGTH(TEMP) - CHARS,CHARS);
|
||||
END PRINT$NUMBER;
|
||||
|
||||
DECLARE I ADDRESS,
|
||||
CRLF LITERALLY 'CR,LF',
|
||||
HEADING DATA (CRLF,LF,LF,
|
||||
' TABLE OF SQUARE ROOTS', CRLF,LF,
|
||||
' VALUE ROOT VALUE ROOT VALUE ROOT VALUE ROOT VALUE ROOT',
|
||||
CRLF,LF);
|
||||
|
||||
/* SILENCE TTY AND PRINT COMPUTED VALUES */
|
||||
DO I = 1 TO 1000;
|
||||
IF I MOD 5 = 1 THEN
|
||||
DO; IF I MOD 250 = 1 THEN
|
||||
CALL PRINT$STRING(.HEADING,LENGTH(HEADING));
|
||||
ELSE
|
||||
CALL PRINT$STRING(.(CR,LF),2);
|
||||
END;
|
||||
CALL PRINT$NUMBER(I,10,6,TRUE /* TRUE SUPPRESSES LEADING ZEROES */);
|
||||
CALL PRINT$NUMBER(SQUARE$ROOT(I), 10,6, TRUE);
|
||||
END;
|
||||
|
||||
EOF
|
Reference in New Issue
Block a user