Sample PL-6 Procedure


LOOKUP_WORD: PROC (STRING, LEN, SYMVAL);

DCL STRING CHAR (12);
DCL LEN UBIN;
DCL SYMVAL UBIN;
DCL LOC UBIN;
DCL 1 SCAN,
      2 INFIX CHAR (1),
      2 NAME CHAR (13);
DCL SCAN_STRING REDEF SCAN CHAR (14);
 
   SCAN.INFIX = '/';
   SCAN.NAME = STRING;
   CALL INSERT (SCAN.NAME, LEN, , '@'); 
   CALL INDEX (LOC, SUBSTR(SCAN_STRING, 0, LEN + 2), VOCAB_TEXT)
      ALTRET (FIRST_PASS_FAILED);
 
   DO NEVER;
FIRST_PASS_FAILED: 
      CALL INSERT (SCAN.NAME, LEN, , '$'); 
      CALL INDEX (LOC, SUBSTR(SCAN_STRING, 0, LEN + 2), VOCAB_TEXT)
         ALTRET (SECOND_PASS_FAILED);
      END;
 
   ENTRY$ = PINCRC(VOCAB_AREA.PTR$, LOC - SIZEC(VOCAB_ENTRY.PREFIX) -
    SIZEC(VOCAB_ENTRY.VALUE));
   SYMVAL = VOCAB_ENTRY.VALUE; 
   RETURN; 
SECOND_PASS_FAILED:
   SYMVAL = 9999; 
   RETURN;
 
END LOOKUP_WORD;