Return to the IFS Tips
Check for existence of an IFS file
Q. For objects in the QSYS.LIB system, I can use CHKOBJ to determine command existence. What is the equivalent for items in the IFS? A. Here are two solutions, one in RPG IV and one in CL. (a) RPG IV program FileExists: * NOTE: Compile with DFTACTGRP(*NO) * * IFS API prototypes * * Access * Daccess PR 10I 0 extproc('access') Dpathptr1 * value Dmode1 10I 0 value * * IFS API Constants * DF_OK S 10I 0 inz(0) * * Some working environment for us * DFile_exists S 10I 0 Dpathptr S * Dpathname S 21 DExists C 'File Exists' DNotExists C 'File does not exist' * * Main{} * C *entry plist C parm filename 20 * Set a character pointer to the file name string C eval pathname = %trim(filename)+x'00' C eval pathptr = %addr(pathname) * Call the IFS API C eval File_Exists = access(pathptr:F_OK) * Did we find it? C File_exists ifeq 0 C Exists dsply C else C NotExists dsply C endif * That's all, folks C move *on *inlr The filename should be supplied as //dir/dir/file, so a valid call would be: CALL FILEEXISTS ('//etc/pmap') (b) The ChkIfsObj command is CMD PROMPT('Validate an IFS Object') PARM KWD(OBJECT) TYPE(*PNAME) LEN(256) MIN(1) + EXPR(*YES) PROMPT('IFS object') The ChkIfsObj command uses CL program ChkIfsObjC, shown below: PGM PARM(&PARM) DCL VAR(&PARM) TYPE(*CHAR) LEN(256) DCL VAR(&RTNVALINT) TYPE(*CHAR) LEN(4) DCL VAR(&RTNVAL) TYPE(*CHAR) LEN(2) DCL VAR(&PATH) TYPE(*CHAR) LEN(100) DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') DCL VAR(&BUF) TYPE(*CHAR) LEN(4096) CHGVAR VAR(&PATH) VALUE(&PARM *TCAT &NULL) CALLPRC PRC('stat') PARM(&PATH &BUF) + RTNVAL(%BIN(&RTNVALINT 1 4)) CHGVAR VAR(&RTNVAL) VALUE(%BIN(&RTNVALINT)) IF COND(&RTNVAL *NE '00') THEN(SNDPGMMSG + MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Object ' || &PARM |< ' not + found.') MSGTYPE(*ESCAPE)) ENDPGM FileExists was written by Nick Roux ChkIfsObj and ChkIfsObjC was written by David Leland
[report a broken link by clicking here]