Customizing Your Latest OS/2 Install

By Richard K. Goran

How many times have you thought about reinstalling OS/2 but thought to yourself Argh, another customization. In previous columns I have described changing certain Workplace Shell objects via a REXX program (WIN-ATM, December 1995; LaunchPad, September 1996, etc.) In fact, many of the values you use to customize your system after an OS/2 install can be set using a REXX program.

I have a set of programs that I call SysGen01, SysGen02, etc. that I run after I have completed the OS/2 installation process. The function of each of these programs relies on the preceding program in the group having been run. Some of the programs in the series can be run at any time after the install is completed and is used to update my system. for example, SysGen04 is the program that builds my customized LaunchPad. I run this any time I want to recreate the LaunchPad, not just after a new install. Since my purpose here is to make it easier for you to customize your individual systems, just making my SysGen programs available would not serve any useful purpose. Rather, my intent with this column is to show you how to build your own.

Warp Connect and Warp Server along with the expansion of notebook use has expanded the more-than-one-computer family greatly. In order to make these utility tools useable from one system to another, I have introduced my own environment variable, HOSTNAME, in each of my config.sys files. This allows me to determine which of my computers my programs are running on. You can let your imagine wander in selecting names for your systems. The VALUE built-in function is used in REXX to interrogate the value of an environment variable. In the case of the machine name, I use: GBL.hostname = VALUE( 'HOSTNAME',, 'OS2ENVIRONMENT' )

My use of GBL. as a stem or compound variable is simply a convention I use in my REXX programs to indicate variables that I can expose by exposing the stem of GBL.

The first of the series of programs you create should be a on-time use program that will do whatever cleanup from the install that you want along with creating Desktop folders that you would normally create with Drag and Drop. The second task is easier than the first. Part of what I refer to as cleanup includes tasks like setting your Desktop background color or image. On my primary computer I have copies of Warp without Windows (red box), Warp With WIN-OS2 (blue box), a small Warp maintenance partition, and Warp Connect. I use a different color on each Desktop so I have a quick visual indication of which system is running.

I have two folders on my Desktop named OS/2 Applications and DOS Applications respectively. Each is used to hold miscellaneous program objects and folders that I use frequently and that don't necessarily justify having their own container. I also keep a folder on my Desktop for my FTPPM objects and I create a folder to contain all of the objects that Warp Connect strews around your Desktop. Fragment 1 shows an example of the code I use to set the Desktop background colors along with assigning some program paths to variables for each computer. Fragment 2 contains the setup strings used to create the four folders. The icons that are referenced in this code fragment are images that I have collected that I like on my Desktop. You can remove the ICONFILE and ICONNFILE statements or replace the icon file names with images of your choice.

Some of the other settings that I used to find annoying every time I installed a new copy of OS/2 are related to the Confirmation entries found in the System Setup folder and the Keyboard object. You can use one of the INI display utilities like LISTINI to see what your entries are. The PM_Control stanza in the OS2.INI files contains the entries that you might want to set in SysGen01. Fragment 3 contains the PM_Control values that I obtained by listing my OS2.INI file. Unfortunately, PM_Control keys are not included in the INI file unless they have been changed from their default value.

Including a complete copy of my SysGen01 program would exceed the space limitations of this column. However, it is available via anonymous FTP as sysgen01.zip. The copy on our FTP server is not intended to be run on any other system. I am making it available only as an example.

Additional functions included in my SysGen01 include setting the properties of all of the folders created by the install, building the four folders referenced above and creating the specific VDMs that I need for the few DOS programs I keep on the system, moving the Internet Access Kit (IAK) objects left on the Desktop by the installation into a single folder, and adding appropriate programs to the Startup folder.

With a little thought and planning, and keeping careful notes about the tasks you perform when you install a fresh copy of OS/2 you will have begin to build a list of the tasks you will want to perform in your own series of SysGen programs.

Resources

 * listini.zip Free for download
 * sysgen01.zip Free for download

Fragment 1
parse upper value VALUE( 'PATH',, 'OS2ENVIRONMENT' ) with, '\OS2\SYSTEM' -2 GBL.boot_drive +2 GBL.hostname = VALUE( 'HOSTNAME',, 'OS2ENVIRONMENT' ) select when GBL.hostname = 'AST01' then do         TAPCIS_drive = 'C:' WP51_drive  = 'C:' WP61_drive  = 'C:' XTALK_drive = 'C:' if GBL.boot_drive = 'D:' then do               /* Warp Connect */ red  = 128 green = 255 blue = 255 background_setup_string =, '(none),,,C,' red green blue end if GBL.boot_drive = 'F:' then do               /* Merlin */ red  = 0 green = 255 blue = 255 background_setup_string =, '(none),,,C,' red green blue end end when GBL.hostname = 'SABER' then do         /* customozed for SABER */ end otherwise do         say '   Unknown HOSTNAME value of' GBL.hostname exit end end desktop_setup_string =, 'BACKGROUND=' || background_setup_string call SysSetObjectData desktop_id, desktop_setup_string if RESULT = 1 then do      say '   Desktop background has been set' end else do      say '   Unable to set Desktop background' exit end

Fragment 2
OS2_misc_folder_ID     = '' DOS_misc_folder_ID     = '' INTERNET_misc_folder_ID = '' CONNECT_misc_folder_ID = '' OS2_program_folder_class   = 'WPFolder' OS2_program_folder_title   = 'OS/2^Applications' OS2_program_folder_location = '.' OS2_program_folder_setup_string =, 'TITLE='      || OS2_program_folder_title || ';'     ||, 'ICONFILE='   || GBL.program_path || 'SYSGEN_O.ICO;' ||, 'ICONNFILE=1,' || GBL.program_path || 'SYSGEN_O.ICO;' ||, 'ICONVIEW=FLOWED,NORMAL;'                            ||, 'ALWAYSSORT=YES;'                                    ||, 'OBJECTID=' || OS2_misc_folder_ID || ';'             ||, '' call SyscreateObject OS2_program_folder_class,, OS2_program_folder_title,, OS2_program_folder_location,, OS2_program_folder_setup_string,, 'UPDATE' if RESULT <> 1 then do      say '   Unable to create ' || OS2_program_folder_title end DOS_program_folder_class   = 'WPFolder' DOS_program_folder_title   = 'DOS^Applications' DOS_program_folder_location = '' DOS_program_folder_setup_string =, 'TITLE='      || DOS_program_folder_title || ';'     ||, 'ICONFILE='   || GBL.program_path || 'SYSGEN_D.ICO;' ||, 'ICONNFILE=1,' || GBL.program_path || 'SYSGEN_D.ICO;' ||, 'ICONVIEW=FLOWED,NORMAL;'                            ||, 'ALWAYSSORT=YES;'                                    ||, 'OBJECTID=' || DOS_misc_folder_ID || ';'             ||, '' call SyscreateObject DOS_program_folder_class,, DOS_program_folder_title,, DOS_program_folder_location,, DOS_program_folder_setup_string,, 'UPDATE' if RESULT <> 1 then do      say '   Unable to create ' || DOS_program_folder_title end INTERNET_program_folder_class   = 'WPFolder' INTERNET_program_folder_title   = 'Internet^Objects' INTERNET_program_folder_location = '' INTERNET_program_folder_setup_string =, 'TITLE='      || INTERNET_program_folder_title || ';' ||, 'ICONFILE='   || GBL.program_path || 'SYSGEN_I.ICO;'  ||, 'ICONNFILE=1,' || GBL.program_path || 'SYSGEN_I.ICO;' ||, 'ICONVIEW=FLOWED,NORMAL;'                             ||, 'ALWAYSSORT=YES;'                                     ||, 'OBJECTID=' || INTERNET_misc_folder_ID || ';'         ||, '' call SyscreateObject INTERNET_program_folder_class,, INTERNET_program_folder_title,, INTERNET_program_folder_location,, INTERNET_program_folder_setup_string,, 'UPDATE' if RESULT <> 1 then do      say '   Unable to create ' || INTERNET_program_folder_title end CONNECT_program_folder_class   = 'WPFolder' CONNECT_program_folder_title   = 'Warp^Connect' CONNECT_program_folder_location = '' CONNECT_program_folder_setup_string =, 'TITLE='      || CONNECT_program_folder_title || ';'  ||, 'ICONFILE='   || GBL.program_path || 'SYSGEN_C.ICO;'  ||, 'ICONNFILE=1,' || GBL.program_path || 'SYSGEN_C.ICO;' ||, 'ICONVIEW=FLOWED,NORMAL;'                             ||, 'ALWAYSSORT=YES;'                                     ||, 'OBJECTID='   || CONNECT_misc_folder_ID || ';'        ||,  if GBL.warp_peer <>  then do      call SyscreateObject CONNECT_program_folder_class,, CONNECT_program_folder_title,, CONNECT_program_folder_location,, CONNECT_program_folder_setup_string,, 'UPDATE' if RESULT <> 1 then do            say '   Unable to create ' || CONNECT_program_folder_title end end

Fragment 3
app_name = 'PM_ControlPanel' s=0 s=s+1; setting.s = 'Animation'                COPIES( '00'x, 3 ) s=s+1; setting.s = 'ConfirmCopyMoveEtc'       '0' s=s+1; setting.s = 'ConfirmDelete'            '0' s=s+1; setting.s = 'ConfirmRenameFilesWithExt' '0' s=s+1; setting.s = 'ConfirmSubDelete'         '1' s=s+1; setting.s = 'CursorBlinkRate'          '500' s=s+1; setting.s = 'DisplayProgressInd'       '1' s=s+1; setting.s = 'KeyRepeatDelay'           '0' s=s+1; setting.s = 'KeyRepeatRate'            '20' s=s+1; setting.s = 'LockStartInput'           '010000'x s=s+1; setting.s = 'LogoDisplayTime'           '2000' setting.0 = s do s = 1 to setting.0 parse value setting.s with, key_name, key_value key_value = STRIP( key_value ) call SysIni 'USER', app_name, key_name, key_value || '00'x   if RESULT = 'ERROR:' then do         say '   Error setting' key_name 'to' key_value 'in' app_name end end