home *** CD-ROM | disk | FTP | other *** search
- /*
- 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
-