Detecting the LIBPATH values

 /* sample REXX routine to get the values of LIBPATH, BEGINLIBPATH    */ /* and ENDLIBPATH                                                    */ /*                                                                   */ /* RXT'T v3.20: Changed code to get BEGINLIBPATH and ENDLIBPATH       */ /*             new code tested with WARP 4 US Fixpack #15            */ /*                                                                   */

say "Detecting the values of LIBPATH, BEGINLIBPATH and ENDLIBPATH ..."

BootDrive = "C:" thisRC = GetLibPath( bootDrive )

select

when thisRC = 0 then do     say "  LIBPATH = " || LIBPATH say " BEGINLIBPATH = " || BEGINLIBPATH say " ENDLIBPATH = " || ENDLIBPATH end /* when */

when thisRC = 2 then do     say "  LIBPATH = " say "   -> File " || BootDrive || "\CONFIG.SYS not found!" say " BEGINLIBPATH = " || BEGINLIBPATH say " ENDLIBPATH = " || ENDLIBPATH end /* when */

otherwise do     say "Unexpected return code " || thisRC || "!" end /* otherwise */

end /* select */

exit

/* -- */ /* function: Get the value for LIBPATH, BEGINLIBPATH and ENDLIBPATH  */ /*                                                                   */ /* Usage:    GetLibPath bootDrive                                     */ /*                                                                   */ /* where:    bootDrive - boot drive (e.g. "C:")                       */ /*                                                                   */ /* returns:   0 - ok                                                  */ /*           2 - config.sys not found                                */ /*          -1 - parameter missing                                   */ /*          -2 - error reading the CONFIG.SYS                  v3.20 */ /*                                                                   */ /* output:   LIBPATH - value of LIBPATH entry or empty string         */ /*          BEGINLIBPATH - value of BEGINLIBPATH or empty string     */ /*          ENDLIBPATH - value of ENDLIBPATH or empty string         */ /*                                                                   */ GetLibPath: PROCEDURE expose LIBPATH BEGINLIBPATH ENDLIBPATH parse arg bootDrive.

/* init the return code                          */ thisRC = 0

LIBPATH = ''                                              /* v3.20 */ BEGINLIBPATH = ''                                         /* v3.20 */ ENDLIBPATH = ''                                           /* v3.20 */

/* check the parameter                           */ if bootDrive <> "" then do                   /* get the LIBPATH value                          */ configSys = left( bootDrive,1 ) || ":\CONFIG.SYS"

lineSeparator = "0D0A"x libpathStmt = lineSeparator || "LIBPATH="

if stream( configSys, "c", "QUERY EXISTS" ) <> "" then do     configSysLength = chars( configSys ) /* v3.20 */ if stream( configSys, "c", "OPEN READ" ) = 'READY:' then do       configSYS = CharIn( configSys, 1, configSysLength ) call stream configSys, "c", "CLOSE"

parse upper var ConfigSYS. (libPathStmt) LIBPATH (lineSeparator). LIBPATH = strip( LIBPATH ) end /* if */ else do                                                            /* v3.20 */ /* error opening the CONFIG.SYS        */ thisRC = -2 end /* else */ end else thisRC = -1

/* get BEGINLIBPATH and ENDLIBPATH               */ call GetDynamicLibPath

end /* if bootDrive <> "" then */ else thisRC = -1

RETURN thisRC

/* -- */ /* function: Get the value for BEGINLIBPATH and ENDLIBPATH           */ /*                                                                   */ /* Usage:    GetDynamicLibPath                                        */ /*                                                                   */ /* where:    -                                                        */ /*                                                                   */ /* returns:   -                                                       */ /*                                                                   */ /* output:                                                            */ /*          BEGINLIBPATH - value of BEGINLIBPATH or empty string     */ /*          ENDLIBPATH - value of ENDLIBPATH or empty string         */ /*                                                                   */ GetDynamicLibPath: PROCEDURE expose BEGINLIBPATH ENDLIBPATH

/*                                               */

/* save the OS/2 environment                     */ '@SETLOCAL'

/* copy the value of BEGINLIBPATH and ENDLIBPATH */ /* into "normal" environment variables           */ '@SET val1=%BEGINLIBPATH%' '@SET val2=%ENDLIBPATH%'

/* retrieve the "normal" env variables           */ beginlibpath = value( 'val1',, 'OS2ENVIRONMENT' ) endlibpath = value( 'val2',, 'OS2ENVIRONMENT' )

/* restore the OS/2 environment                  */ '@ENDLOCAL' return ''

/* -- */ /* function: Get the value for BEGINLIBPATH and ENDLIBPATH           */ /*                                                                   */ /* Usage:    GetDynamicLibPath                                        */ /*                                                                   */ /* where:    -                                                        */ /*                                                                   */ /* returns:   -                                                       */ /*                                                                   */ /* output:                                                            */ /*          BEGINLIBPATH - value of BEGINLIBPATH or empty string     */ /*          ENDLIBPATH - value of ENDLIBPATH or empty string         */ /*                                                                   */ /* notes:    Use this method if the routine above does not work. */ /*                                                                   */ /*                                                                    */ Old_GetDynamicLibPath: PROCEDURE expose BEGINLIBPATH ENDLIBPATH

/* get the value of BEGINLIBPATH and ENDLIBPATH  */ '@SET BEGINLIBPATH 2>NUL | rxqueue' '@SET ENDLIBPATH 2>NUL | rxqueue'

if queued <> 0 then do   parse pull BEGINLIBPATH if BEGINLIBPATH = "(null)" then BEGINLIBPATH = "" end /* if queued <> 0 then */ else BEGINLIBPATH = ""

if queued <> 0 then do   parse pull ENDLIBPATH if ENDLIBPATH = "(null)" then ENDLIBPATH = "" end /* if queued <> 0 then */ else ENDLIBPATH = ""

return '' 