aboutsummaryrefslogtreecommitdiffstats
path: root/tests/projects/plugins/project/src/pli/center.pli
diff options
context:
space:
mode:
Diffstat (limited to 'tests/projects/plugins/project/src/pli/center.pli')
-rw-r--r--tests/projects/plugins/project/src/pli/center.pli212
1 files changed, 212 insertions, 0 deletions
diff --git a/tests/projects/plugins/project/src/pli/center.pli b/tests/projects/plugins/project/src/pli/center.pli
new file mode 100644
index 00000000000..d6d79e5bebd
--- /dev/null
+++ b/tests/projects/plugins/project/src/pli/center.pli
@@ -0,0 +1,212 @@
+ /* Copyright (c) 1995 by R. A. Vowels, from "Introduction to PL/I, Algorithms, and */
+ /* Structured Programming". Permission is given to reproduce and to use these procedures */
+ /* as part of a program, and to include them as part of a larger work to be sold for profit. */
+ /* However, the user is not permitted to sell the procedures separately. Provided always */
+ /* that these procedures and this copyright notice are reproduced in full. */
+
+ DECLARE CENTERLEFT GENERIC
+ (CENTER_LEFT_2 WHEN (*, *),
+ CENTER_LEFT_3 WHEN (*, *, *) );
+ DECLARE CENTER GENERIC
+ (CENTER_LEFT_2 WHEN (*, *),
+ CENTER_LEFT_3 WHEN (*, *, *) );
+ DECLARE CENTERRIGHT GENERIC
+ (CENTER_RIGHT_2 WHEN (*, *),
+ CENTER_RIGHT_3 WHEN (*, *, *) );
+ DECLARE CENTRELEFT GENERIC
+ (CENTER_LEFT_2 WHEN (*, *),
+ CENTER_LEFT_3 WHEN (*, *, *) );
+ DECLARE CENTRERIGHT GENERIC
+ (CENTER_RIGHT_2 WHEN (*, *),
+ CENTER_RIGHT_3 WHEN (*, *, *) );
+ /* This procedure returns a string of length LEN, with STRING in the dead center, or one */
+ /* position to the left of dead center if it cannot be dead center. */
+ CENTER_LEFT_2:
+ PROCEDURE (STRING, LEN) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be centered; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* centered. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE (K, L) FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ K = (LEN - L + 2)/2;
+
+ WORK = '';
+ SUBSTR (WORK, K, L) = STRING;
+ RETURN (WORK);
+ END CENTER_LEFT_2;
+
+ /* This procedure returns a string of length LEN, with STRING in the dead center, or one */
+ /* position to the left of dead center if it cannot be dead center. A specified fill */
+ /* character FILL extends STRING right and left. */
+ CENTER_LEFT_3:
+ PROCEDURE (STRING, LEN, FILL) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be centered; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* centered. */
+ /* FILL = a fill character used to extend STRING at both ends. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+ DECLARE FILL CHARACTER (1);
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE (K, L) FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ K = (LEN - L + 2)/2;
+
+ WORK = REPEAT (FILL, LEN-1);
+ SUBSTR (WORK, K, L) = STRING;
+ RETURN (WORK);
+ END CENTER_LEFT_3;
+
+ /* This procedure returns a string of length LEN, with STRING in the dead center, or one */
+ /* position to the right of dead center if it cannot be dead center. */
+ CENTER_RIGHT_2:
+ PROCEDURE (STRING, LEN) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be centered; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* centered. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE (K, L) FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ K = (LEN - L + 3)/2;
+
+ WORK = '';
+ SUBSTR (WORK, K, L) = STRING;
+ RETURN (WORK);
+ END CENTER_RIGHT_2;
+
+ /* This procedure returns a string of length LEN, with STRING in the dead center, or one */
+ /* position to the right of dead center if it cannot be dead center. A specified fill */
+ /* character FILL extends STRING right and left. */
+ CENTER_RIGHT_3:
+ PROCEDURE (STRING, LEN, FILL) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be centered; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* centered. */
+ /* FILL = a fill character used to extend STRING at both ends. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+ DECLARE FILL CHARACTER (1);
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE (K, L) FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ K = (LEN - L + 3)/2;
+
+ WORK = REPEAT (FILL, LEN-1);
+ SUBSTR (WORK, K, L) = STRING;
+ RETURN (WORK);
+ END CENTER_RIGHT_3;
+
+ DECLARE LEFT GENERIC
+ (LEFT_blank WHEN (*,*),
+ LEFT_other WHEN (*,*,*) );
+
+ /* This procedure returns STRING in a string of length LEN, with blank characters padded on */
+ /* the right. */
+ LEFT_blank:
+ PROCEDURE (STRING, LEN) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be positioned left; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* placed. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE L FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ WORK = '';
+ SUBSTR (WORK, 1, L) = STRING;
+ RETURN (WORK);
+ END LEFT_blank;
+
+ /* This procedure returns STRING in a string of length LEN, padded with the character */
+ /* FILL on the right. */
+ LEFT_other:
+ PROCEDURE (STRING, LEN, FILL) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be positioned left; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* positioned left; */
+ /* FILL = the character to be used to fill out the finished string. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+ DECLARE FILL CHARACTER (1);
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE L FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ WORK = STRING || REPEAT (FILL, LEN-L-1);
+ RETURN (WORK);
+ END LEFT_other;
+
+ DECLARE RIGHT GENERIC
+ (RIGHT_blank WHEN (*,*),
+ RIGHT_other WHEN (*,*,*) );
+
+ /* This procedure returns STRING right-adjusted in a string of length N, padded with blanks */
+ /* on the left. */
+ RIGHT_blank:
+ PROCEDURE (STRING, LEN) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be positioned right; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* positioned right. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE L FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ WORK = '';
+ SUBSTR (WORK, LEN-L+1, L) = STRING;
+ RETURN (WORK);
+ END RIGHT_blank;
+
+ /* This procedure returns STRING right-adjusted in a string of length N, padded with the */
+ /* character FILL on the left. */
+ RIGHT_other:
+ PROCEDURE (STRING, LEN, FILL) RETURNS (CHARACTER(1000) VARYING);
+ /* INCOMING: STRING = the string to be positioned right; */
+ /* LEN = the length of the produced string in which STRING is to be */
+ /* positioned right; */
+ /* FILL = the character to be used to fill out the finished string. */
+ DECLARE STRING CHARACTER (*) VARYING;
+ DECLARE LEN FIXED BINARY;
+ DECLARE FILL CHARACTER (1);
+
+ DECLARE WORK CHARACTER (LEN);
+ DECLARE L FIXED BINARY;
+
+ L = LENGTH (STRING);
+ IF L >= LEN THEN RETURN (STRING);
+
+ WORK = REPEAT (FILL, LEN-L-1) || STRING;
+ RETURN (WORK);
+ END RIGHT_other;