CL Using BIFs

Using Built-In-Functions

The scan built-in function (%SCAN) is designed to return the first position of a search argument in the source string, or 0 if the character(s) was not found. The %SCAN fucntion in the CL below is performing the search of a character variable. It is looking for specific characters to determine if the file extension indicates it must be decrypted.

.
.
.
/*-------------------------------------------------------------------*/
/* Check the file name to determine if the file needs decrypting.    */
/*-------------------------------------------------------------------*/

             CHGVAR     VAR(&FILETYPE) VALUE(' ')

 JOBFILE:    IF         COND(%SCAN('.job' &FILEPATH) *NE 0 *OR +
                          %SCAN('.JOB' &FILEPATH) *NE 0) +
                          THEN(CHGVAR VAR(&FILETYPE) VALUE('J'))
             IF         COND(&FILETYPE *EQ 'J') THEN(GOTO +
                          CMDLBL(CALLS)) 
 Decrypt:
             IF         COND(%SCAN('.pgp' &FILEPATH) *NE 0 *OR +
                          %SCAN('.PGP' &FILEPATH) *NE 0) +
                          THEN(CHGVAR VAR(&FILETYPE) VALUE('P'))
             IF         COND(&FILETYPE *EQ 'P') THEN(GOTO +
                          CMDLBL(CALLS)) 
 UNZIP:
             IF         COND(%SCAN('.zip' &FILEPATH) *NE 0 *OR +
                          %SCAN('.ZIP' &FILEPATH) *NE 0) +
                          THEN(CHGVAR VAR(&FILETYPE) VALUE('Z'))

 gzZIP:
             IF         COND(%SCAN('.gz' &FILEPATH) *NE 0 *OR +
                          %SCAN('.GZ' &FILEPATH) *NE 0) +
                          THEN(CHGVAR VAR(&FILETYPE) VALUE('G'))
.
.
.


The scan below performs much the same task. The difference is prefacing the scan operation with the %UPPER function. This guarantees the character string will be all uppercase characters.

.
.
.
/*-------------------------------------------------------------------*/
/* Determine the file type from the file name. Check to see if       */
/* the file is a PDF-type file.                                      */
/*-------------------------------------------------------------------*/
             CHGVAR     VAR(&FILEPATH) VALUE(%UPPER(&FILEPATH))

             IF         COND(%SCAN('.PDF' &FILEPATH) *EQ 0) +
                          THEN(CALLSUBR SUBR(UPLOADDTA))

             ENDDO
.
.
.


The &TRIMR function works similar to the *TCAT operation in previous releases of CL. The *TCAT (or |<) operator trims trailing blanks from the first string before appending the second string.

.
.
.
/*-------------------------------------------------------------------*/
/* If a document was produced, copy the file to the export folder    */
/*-------------------------------------------------------------------*/
             RTVMBRD    FILE(QTEMP/&FILENAME) NBRCURRCD(&RCD)
             IF         COND(&RCD *EQ 0) THEN(GOTO CMDLBL(EXIT))
             CHGVAR     VAR(&EXPFILE) VALUE(&EXPFOLDER *TCAT &PRE +
                          *TCAT &CMP *CAT &ORDER *TCAT '.xml')

             CPYTOIMPF  FROMFILE(QTEMP/&FILENAME) TOSTMF(&EXPFILE) +
                          MBROPT(*REPLACE) STMFCODPAG(*PCASCII) +
                          RCDDLM(*CRLF) DTAFMT(*FIXED)
EXIT:
             DLTF       FILE(QTEMP/&FILENAME)
             MONMSG     MSGID(CPF0000)
UNLOCK:
             CHKIFSOBJ  PATHFILE(&CHKOBJECT) FOUND(&FOUND)
             IF         COND(&FOUND) THEN(DO)
             DEL        OBJLNK(&CHKOBJECT)
             MONMSG     MSGID(CPFA0A9 CPFA095)
             ENDDO

     RETURN

/*-------------------------------------------------------------------*/
/* Lock subroutine, check to see if the folder is locked before      */
/* putting files into the directory.                                 */
/*-------------------------------------------------------------------*/
             SUBR       SUBR(LOCKDIR)
             CALL       PGM(ADM005RP) PARM('ADMGV001' 'DIR' &RETURN)
             CHGVAR     VAR(&INDIR) VALUE(&RETURN)

             CALL       PGM(ADM005RP) PARM('ADMGV001' 'FIL' &RETURN)
             CHGVAR     VAR(&INFILE) VALUE(&RETURN)

             CHGVAR     VAR(&INPROCESS) VALUE(&INDIR *TCAT &INFILE)
             CHGVAR     VAR(&CHKOBJECT) VALUE(&EXPFOLDER *TCAT '/' +
                          *TCAT &INFILE)
.
.
.