home *** CD-ROM | disk | FTP | other *** search
- /* Generated by EasyCODE(SPX) V6.0 at 21.06.1996 09:44:27
- with V:\E\V60\SAMPLES\SPX-PL1\PL1.CFG */
-
- /* XPXMP06 - Translate strings */
-
- PROCESS MACRO;
-
- /*===================================================================*/
- /* Date creatd: 06.04.92 / 17:20:00 by Fischer */
- /* Version : */
- /*===================================================================*/
- /* History */
- /* Date Name Level */
- /*-------------------------------------------------------------------*/
- /* */
- /*===================================================================*/
- /*===================================================================*/
- /* */
- /* PROGRAM DESCRIPTION: */
- /* */
- /* Translate strings */
- /* */
- /* If Funct = 0 translate: */
- /* - lower case to upper case, */
- /* - special german characters to international characters */
- /* */
- /* RETURN CODES: */
- /* */
- /* 0 ... OK */
- /* 4 ... Invalid call */
- /* 8 ... Buffer too small */
- /* */
- /*===================================================================*/
- XPXMP06:
- PROC(PFUNCT, PSUARG, PRETF) REORDER;
- DEFAULT RANGE (A:Z) STATIC;
- /*===========================================*/
- /* Definition parameters */
- /*===========================================*/
- %INCLUDE XPXMI06⌡;
- /* Data definitions */
- /*********************************************************************/
- /* Furhter definitions */
- /*********************************************************************/
- DCL (I, J) BIN FIXED(15); /* Indexes*/
- DCL E_ACT_LEN BIN FIXED(15); /* Actual length of source buffer*/
- DCL H_CHTAB(256) CHAR BASED(ADDR(I_CHTAB)); /* Character table*/
- DCL 1 I_CHTAB, /* Internal structure - Char. Tab. Init.*/
- 3 CH1 CHAR(64) INIT(
- /* 0 1 2 3 */
- /* 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF */
- ' '),
- 3 CH2 CHAR(64) INIT(
- /* 4 5 6 7 */
- /* 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF */
- ' U U U '),
- 3 CH3 CHAR(64) INIT(
- /* 8 9 A B */
- /* 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF */
- ' KKKKKKKKK KKKKKKKKK UKKKKKKKK '),
- 3 CH4 CHAR(64) INIT(
- /* C D E F */
- /* 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF */
- 'U U U ');
- DCL H_LWCASE CHAR(26) INIT ('abcdefghijklmnopqrstuvwxyz');
- DCL H_UPCASE CHAR(26) INIT ('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
- /* Lower and upper case letters for translation */
- DCL E_STR CHAR(10000) BASED(P_IN); /* Source b. */
- DCL A_STR CHAR(10000) BASED(P_OUT); /* Dest. b. */
- DCL (ADDR, UNSPEC, SUBSTR, TRANSLATE) BUILTIN;
- /* Processing */
- IF FUNCT ^= 0
- THEN DO;
- /* Invalid function */
- RETF.RC=4;
- RETURN;
- END;
- E_ACT_LEN = SUARG.EIN_LENGTH;
- DO WHILE ( (SUBSTR(E_STR, E_ACT_LEN, 1) = ' ')
- & (E_ACT_LEN > 0));
- E_ACT_LEN = E_ACT_LEN - 1;
- END;
- J = 0; /* J Index of dest. buffer */
- DO I = 1 TO E_ACT_LEN /* I Index of source buffer */;
- J = J + 1;
- IF J > SUARG.OUT_LENGTH
- THEN DO;
- RETF.RC = 8;
- RETURN;
- END;
- SELECT H_CHTAB(UNSPEC(SUBSTR(E_STR, I, 1)) + 1);
- WHEN (' ' /* No lower cas letters or special characters */) DO;
- SUBSTR(A_STR, J, 1) = SUBSTR(E_STR, I, 1);
- END;
- WHEN ('K' /* Lower case letters */) DO;
- SUBSTR(A_STR, J, 1) =
- TRANSLATE(SUBSTR(E_STR, I, 1), H_UPCASE, H_LWCASE);
- END;
- WHEN ('U' /* Special characters */) DO;
- J = J + 1;
- IF J > SUARG.OUT_LENGTH
- THEN DO;
- RETF.RC = 8;
- RETURN;
- END;
- SUBSTR(A_STR, J, 1) = 'E';
- SELECT SUBSTR(E_STR, I, 1);
- WHEN ('ö', 'Ö') DO;
- SUBSTR(A_STR, J - 1, 1) = 'O';
- END;
- WHEN ('ü', 'Ü') DO;
- SUBSTR(A_STR, J - 1, 1) = 'U';
- END;
- WHEN ('ä', 'Ä') DO;
- SUBSTR(A_STR, J - 1, 1) = 'A';
- END;
- WHEN ('ß') DO;
- SUBSTR(A_STR, J - 1, 1) = 'S';
- SUBSTR(A_STR, J, 1) = 'S';
- END;
- OTHERWISE DO;
- END;
- END;
- END;
- OTHERWISE DO;
- END;
- END;
- END;
- DO J = J + 1 TO OUT_LENGTH /* Fill rest of dest. buffer with ' ' */;
- SUBSTR(A_STR, J, 1) = ' ';
- END;
- RETF.RC = 0;
- END; /* End Procedure */
-
-