Customizing your latest OS/2 install

From EDM2
Jump to: navigation, search

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 anytime 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

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