/* ------------------------------------------------------------------ */ /* function: isrun.cmd checks if a specific program is running */ /* */ /* Usage: isrun exe_name */ /* */ /* where: exe_name */ /* - name of the EXE (with or without path) */ /* */ /* returns: 0 - program is not running */ /* 1 - program is running */ /* 2 - usage error */ /* */ /* */ /* Notes: This program needs the program PSTAT to be in a */ /* directory in the PATH */ /* */ /* You cannot check if a .CMD file is running with this */ /* routine! */ /* */ /* see also Check if a program is running (using RXU.DLL) */ /* */ /* init the return code */ thisRC = 0 /* get the parameter */ parse upper arg progname if progName = '' | pos( '?', progName ) <> 0 then do /* show the usage help */ say 'Usage: isrun exeName' thisRC = 2 end /* if progName = '' | pos( '?', progName ) <> 0 then */ if thisRC = 0 then do /* flush the REXX queue */ do while queued() <> 0; parse pull; end; /* add the default extension to the program name */ /* if necessary */ i = lastPos( '.', progName ) j = lastPos( '\', progName ) if ( i = 0 ) | ( i < j ) then progName = progName || '.EXE' /* call PSTAT to get the process information */ '@pstat /c | rxqueue' /* init the stem with the names of the running */ /* programs */ processList.0 = 0 /* extract the process information from the PSTAT */ /* output */ do while queued() <> 0 curLine = lineIn( 'QUEUE:' ) parse upper var curLine , 1 ProcessID 11 ParentProcessID 21 SessionID 31 exeName . /* check if this is a valid entry */ if pos( '\', exeName ) <> 0 then do /* entry is valid -> add it to the stem */ i = processList.0+1 processList.i = strip( exeName ) processList.0 = i end /* if datatype( exeName ) <> 'NUM' then */ end /* do while queued() <> 0 */ /* compare the name of the searched program with */ /* all members of the stem with the running */ /* processes */ do i = 1 to processList.0 while thisRC = 0 if pos( '\', progName )= 0 then thisRC = (progname = translate( filespec( 'n', processList.i ) ) ) else thisRC = ( progName = processList.i ) end /* do i = 1 to processList.0 */ end /* if thisRC = 0 then */ RETURN thisRC /* ------------------------------------------------------------------ */