Author Topic: Mozturbo help  (Read 54540 times)

xynixme

  • Guest
Re: Mozturbo help
« Reply #30 on: May 09, 2019, 11:23:01 am »
This is the version I'm testing
Modified accordingly. SysBootDrive() may require a newer version of Rexx. Probably not a real problem. I'm assuming SysBootDrive() is available, without RxFuncQuery()'ing it. Nor am I using older, alternative classic Rexx code to try to find the boot drive (required for CONFIG.SYS' LIBPATH line).

Some changes: list of DLL file names uppercased (so I can again see what you've added in lowercase later), Strip() surrounding lists of DLL file names to make sure its format remains "NAME<blank>NAME<blank>" if e.g. one of the list is empty, error checking w.r.t. SysFileTree(), no more other created objects, existence of DLLs checked in the usual order of the current directory (including relative paths of e.g. CLEARKEY.DLL), BEGINLIBPATH and LIBPATH, and a check if the number of DLLs is more than 0.

I did not add code to change the default browser settings of WPUrl objects (in OS2.INI or via WPS setup strings), because AFAICT the default browser doesn't support a possible BEGINLIBPATH setting of older versions of FF or SM, while InsTurbo.CMD does, but InsTurbo.CMD doesn't check the file date nor version of FF/SM.

The sample file checking Rexx code was more verbose than the inserted code.

Code: [Select]
/* InsTurbo.CMD */

CALL RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
CALL SysLoadFuncs

/* Find Mozilla product in the current directory */

SAY
product=''
IF Stream('MOZILLA.EXE','C','QUERY EXISTS')<>'' THEN product='Mozilla'
IF Stream('THUNDERBIRD.EXE','C','QUERY EXISTS')<>'' THEN product='TB'
IF Stream('FIREFOX.EXE','C','QUERY EXISTS')<>'' THEN product='FF'
IF Stream('SEAMONKEY.EXE','C','QUERY EXISTS')<>'' THEN product='SM'
here=Translate(Directory())
IF product='' THEN DO
   SAY 'Error, cannot find any main Mozilla executable in the current directory:'
   SAY '      ' here
   SAY
   CALL CharOut '','Press <ENTER>... '
   PULL .
   EXIT
END
SAY 'Product found:' product
IF product='Mozilla' THEN product='MOZ'

/* Compile a list of DLLs, with one space between relative full DLL file specs */

dlls=''
IF Length(product)=2 THEN DO
   
   /* DLLs shared by all non-legacy products */
   dlls=Strip('XUL.DLL LGPLLIBS.DLL MOZSQLT3.DLL FREEBL3.DLL NSPR4.DLL NSS3.DLL NSSCKBI.DLL NSSDBM3.DLL NSSUTIL3.DLL PLC4.DLL PLDS4.DLL SMIME3.DLL SOFTOKN3.DLL SSL3.DLL')
   
   /* Additional DLLs exclusive for FF only */
   IF product='FF' THEN dlls=Strip(dlls 'browser\components\BRWSRCMP.DLL gmp-clearkey\0.1\CLEARKEY.DLL')
   
   /* Additional DLLs exclusive for both SM and TB */
   IF product='SM' | product='TB' THEN dlls=Strip(dlls 'LDAP60.DLL LDIF60.DLL PRLDAP60.DLL')
   
   /* Additional DLLs exclusive for SM only */
   IF product='SM' THEN dlls=Strip(dlls 'components\SUITE.DLL')

END

dll.0=Words(dlls)
DO i=1 TO dll.0
   dll.i=Word(dlls,i)
END i

/* Find the matching TURBO.EXE in the same current directory */

turbo=product||'TURBO.EXE'
IF Stream(turbo,'C','QUERY EXISTS')='' THEN DO
   SAY 'Error, cannot find' turbo 'in the current directory:' here
   SAY
   CALL CharOut '','Press <ENTER>... '
   PULL .
   EXIT
END
SAY turbo 'found.'

/* Load DLLs high, if the product is not the legacy Mozilla? */

IF dll.0>0 THEN DO
   loadhigh=0
   IF Length(product)=2 THEN DO
      SAY
      SAY 'Do you want to use memory above 512 MiB for DLLs (default, recommended),'
      CALL CharOut '',"which doesn't require having more than 512 MiB of RAM installed (Y/n)? "
      PULL answer
      answer=Strip(answer)
      IF answer='' THEN answer='Y'
      IF Left(answer,1)='Y' THEN loadhigh=1
      SAY
   END

   /* Load DLLs high? Then first check if all expected DLLs can be found */

   IF loadhigh=1 THEN DO
      dircounter=0
      source=SysBootDrive()||'\CONFIG.SYS'
      DO WHILE Lines(source)>0
         line=Strip(LineIn(source))
         IF Left(Translate(line),8)='LIBPATH=' THEN DO
            PARSE VAR line 1 . 9 line
            begin=Strip(Value('BEGINLIBPATH',,'ENVIRONMENT'))
            IF Right(begin,1)<>';' THEN begin=begin||';'
            IF begin<>';' THEN line=begin||line
            DO WHILE line<>''
               dircounter=dircounter+1
               PARSE VAR line dir.dircounter ';' line
               dir.dircounter=Strip(dir.dircounter)
               IF Right(dir.dircounter,1)<>'\' THEN dir.dircounter=dir.dircounter||'\'
            END
         END
      END
      CALL LineOut source
      dir.0=dircounter

      errors=0
      DO i=1 TO dll.0
         /* DLL file in current directory? */
         
         IF Stream(dll.i,'C','QUERY EXISTS')='' THEN DO
           
            /* Otherwise DLL file in LIBPATH directory? */
           
            DO j=1 TO dir.0
               retry=Stream(dir.j||FileSpec('N',dll.i),'C','QUERY EXISTS')
               IF retry<>'' THEN DO
                  dll.i=dir.j||FileSpec('N',dll.i)
                  j=dir.0
               END
            END j   
            IF retry='' THEN DO
               SAY 'Error: required DLL file' dll.i 'not found in' here 'nor LIBPATH'
               errors=errors+1
            END
         END
      END i
      IF errors>0 THEN DO
         SAY
         CALL Charout '',errors 'fatal DLL file error(s). Press <ENTER>... '
         PULL .
         EXIT
      END
   END
   SAY 'All expected DLLs found.'
   SAY
END

/* Load high */

IF loadhigh=1 THEN DO
   
   /* Try to find ABOVE512.EXE or HIGHMEM.EXE, if the answer was (Y)es */

   file='ABOVE512.EXE'
   high=Stream(file,'C','QUERY EXISTS')
   IF high='' THEN high=Stream('HIGHMEM.EXE','C','QUERY EXISTS')
   IF high='' THEN high=SysSearchPath('PATH',file)
   IF high='' THEN high=SysSearchPath('PATH','HIGHMEM.EXE')
   IF high='' THEN DO
      SAY 'Please enter the full path to' file 'or HIGHMEM.EXE, or press nothing'
      CALL CharOut '','but <ENTER> to try to find it: '
      PARSE PULL high
      SAY
      IF Strip(high)<>'' THEN DO
         IF Right(high,1)<>'\' THEN high=high||'\'
         high=high||file
         IF Stream(high,'C','QUERY EXISTS')='' THEN DO
            SAY 'Error: cannot find file' high
            SAY
            CALL CharOut '','Press <ENTER>... '
            PULL .
            EXIT
         END
      END
   END
   IF Strip(high)='' THEN DO   
      SAY file 'or HIGHMEM.EXE not found in current directory nor PATH.'
      SAY 'Searching...'
      drives=SysDriveMap('A:')
      IF drives='' THEN DO
         SAY
         SAY 'Error: no drives found.'
         SAY
         CALL CharOut '','Press <ENTER>... '
         PULL .
         EXIT
      END
      drive.0=Words(drives)
      DO i=1 TO drive.0
         okay.i=0
         IF SysDriveInfo(Word(drives,i))<>'' THEN okay.i=1
      END i
      DO i=1 TO drive.0
         IF okay.i=0 THEN ITERATE i
         IF high='' THEN DO
            SAY 'Scanning drive' Word(drives,i)
            pattern1=Word(drives,i)||'\'||file
            pattern2=Word(drives,i)||'\HIGHMEM.EXE'
            IF SysFileTree(pattern1,'hit.','FOS')=2 THEN DO
               SAY
               SAY 'Error: not enough available memory to query a list of files.'
               SAY
               CALL CharOut '','Press <ENTER>... '
               PULL .
               EXIT
            END
            IF hit.0=0 THEN DO
               IF SysFileTree(pattern2,'hit.','FOS')=2 THEN DO
                  SAY
                  SAY 'Error: not enough available memory to query a list of files.'
                  SAY
                  CALL CharOut '','Press <ENTER>... '
                  PULL .
                  EXIT
               END
            END
            IF hit.0>0 THEN DO
               high=hit.1
               SAY
               SAY 'Found:' high
            END
         END
      END i
   END
   IF high='' THEN DO
      SAY
      SAY 'Error:' file 'nor HIGHMEM.EXE found.'
      SAY
      CALL CharOut '','Press <ENTER>... '
      PULL .
      EXIT
   END
   DO i=1 TO dll.0
     
      /* Is the DLL read-only? */
     
      restore=0
      IF SysFileTree(dll.i,'readonly.','F','***+*')=2 THEN DO
         SAY
         SAY 'Error: not enough available memory to query a list of files.'
         SAY
         CALL CharOut '','Press <ENTER>... '
         PULL .
         EXIT
      END
     
      /* If so, then (try to) toggle the setting */
     
      IF readonly.0=1 THEN DO
         restore=1
         IF SysFileTree(dll.i,'readonly.','F',,'***-*')=2 THEN DO
            SAY
            SAY 'Error: not enough available memory to query a list of files.'
            SAY
            CALL CharOut '','Press <ENTER>... '
            PULL .
            EXIT
         END
         IF SysFileTree(dll.i,'readonly.','F','***-*')=2 THEN DO
            SAY
            SAY 'Error: not enough available memory to query a list of files.'
            SAY
            CALL CharOut '','Press <ENTER>... '
            PULL .
            EXIT
         END
         IF readonly.0>0 THEN SAY dll 'unmarked as a read-only file.'
      END
      arguments=dll.i '-c'
      IF Translate(FileSpec('N',high))='HIGHMEM.EXE' THEN arguments='-c' dll.i
      '@'||high arguments
     
      /* (Try to) restore the read-only setting, if possibly changed */
     
      IF restore=1 THEN DO
         IF SysFileTree(dll.i,'readonly.','F',,'***+*')=2 THEN DO
            SAY
            SAY 'Error: not enough available memory to query a list of files.'
            SAY
            CALL CharOut '','Press <ENTER>... '
            PULL .
            EXIT
         END
         IF SysFileTree(dll.i,'readonly.','F','***+*')=2 THEN DO
            SAY
            SAY 'Error: not enough available memory to query a list of files.'
            SAY
            CALL CharOut '','Press <ENTER>... '
            PULL .
            EXIT
         END
         IF readonly.0>0 THEN SAY dll 'marked as a read-only file again.'
      END
   END i
END

name=''
IF product='FF' THEN name='Firefox'
IF product='MOZ' THEN name='Mozilla'
IF product='SM' THEN name='SeaMonkey'
IF product='TB' THEN name='Thunderbird'

name=name 'Turbo'
SAY
IF SysCreateObject('WPProgram',name,'<WP_DESKTOP>','EXENAME=CMD.EXE;PARAMETERS=/c detach' here||'\'||turbo '-l;STARTUPDIR='||here||';MINIMIZED=YES;OBJECTID=<TURBO_'||product||'>','R') THEN DO
   SAY 'Object created:' name
   IF SysCreateObject('WPProgram',name '(unload)','<WP_DESKTOP>','EXENAME='||here||'\'||turbo||';PARAMETERS=-u;STARTUPDIR='||here||';MINIMIZED=YES;OBJECTID=<TURBO_'||product||'_UNLOAD>','R') THEN DO
      SAY 'Object created:' name '(unload)'
      IF SysCreateShadow('<TURBO_'||product||'>','<WP_START>') THEN DO
         SAY'WPS shadow object of' name 'created in the startup folder.'
         SAY
         CALL CharOut '','Press <ENTER>... '
         PULL .
         EXIT
      END
   END
END
   
SAY 'Error: cannot create all 3 WPS objects.'
SAY
CALL CharOut '','Press <ENTER>... '
PULL .

EXIT

Syntax-checked by the Object Rexx interpreter. Possible tests are moving e.g. XUL.DLL to a LIBPATH directory, adding some irrelevant existing LIBPATH DLL, a BEGINLIBPATH DLL and a file which doesn't exist to the list of DLL files. Then the expected result is one fatal error. If it's MOZTURBO.EXE, then DLLs shouldn't be checked.

In theory the *TURBO.EXE can be searched for too, but e.g. installing the full FFTURBO.ZIP package in the directory of FIREFOX.EXE does make sense too if FFTURBO.EXE isn't distributed as a FF component. OTOH it's not that complicated to give the PATH a try if *TURBO.EXE cannot be found in the current directory.
« Last Edit: May 09, 2019, 12:05:18 pm by André Heldoorn »

xynixme

  • Guest
Re: Mozturbo help
« Reply #31 on: May 10, 2019, 06:58:31 pm »
Possible bug found on paper, while playing with a VX-REXX version:

Old section, when ABOVE512.EXE nor HIGHMEM.EXE can be found in the current directory nor PATH.

Code: [Select]
IF Strip(high)<>'' THEN DO
   IF Right(high,1)<>'\' THEN high=high||'\'
   high=high||file
   IF Stream(high,'C','QUERY EXISTS')='' THEN DO
      SAY 'Error: cannot find file' high
      SAY
      CALL CharOut '','Press <ENTER>... '
      PULL .
      EXIT
   END
END

New, untested:

Code: [Select]
IF Strip(high)<>'' THEN DO
   IF Right(high,1)<>'\' THEN high=high||'\'
   orghigh=high
   high=high||file
   IF Stream(high,'C','QUERY EXISTS')='' THEN DO
      high=orghigh||'HIGHMEM.EXE'
      IF Stream(high,'C','QUERY EXISTS')='' THEN DO
         SAY 'Error: cannot find file' high
         SAY
         CALL CharOut '','Press <ENTER>... '
         PULL .
         EXIT
      END
   END
END

The old version looks for ABOVE512.EXE, which may not work when the user typed the full directory spec "C:\NON-PATH\HIGHMEM" instead of the full directory spec "C:\NON-PATH\ABOVE512". In the existing version both ABOVE512.EXE and HIGHMEM.EXE should be fully supported, even when an user decided that HIGHMEM.EXE isn't worth being saved in a PATH directory.
« Last Edit: May 10, 2019, 07:01:49 pm by André Heldoorn »

xynixme

  • Guest
Re: Mozturbo help
« Reply #32 on: May 11, 2019, 07:56:20 pm »
Adjusted new code, still untested:

Code: [Select]
IF Strip(high)<>'' THEN DO
   IF Right(high,1)<>'\' THEN high=high||'\'
   orghigh=high
   high=high||file
   IF Stream(high,'C','QUERY EXISTS')='' THEN DO
      IF Stream(orghigh||'HIGHMEM.EXE','C','QUERY EXISTS')='' THEN DO
         SAY 'Error: cannot find ABOVE512 nor HIGHMEM.EXE in the directory' orghigh
         SAY
         CALL CharOut '','Press <ENTER>... '
         PULL .
         EXIT
      END
   END
END

xynixme

  • Guest
Re: Mozturbo help
« Reply #33 on: May 12, 2019, 02:39:26 am »
PM sample, based on about the same single classic Rexx code for the whole family. More flexibility may be an advantage of the UI, like an user of SM not having to have nor having to fully install FFTURBO.EXE, if the user just wants to mark the rarely used FF-specific DLL files as loadable above 512 MiB too.

Without overdoing it, like showing a list of WPUrl objects with a different browser setting to change that setting of selectable existing WPUrl objects.

MOZILLA.EXE is the system's current default browser, which explains why the MOZTURBO.EXE installer has a greyed-out option to change the default browser from (some) MOZILLA.EXE to (some) MOZILLA.EXE.

A minor visual change is that HIGHMEM.EXE is always selected. The user can only select or unselect ABOVE512.EXE, to safe time when InsTurbo has to find an ABOVE512.EXE which the user doesn't have at all. If you've got both, then ABOVE512.EXE still has the priority, while HIGHMEM.EXE perhaps is a more likely default.

Dunno what happens when the PM app is busy changing DLLs and the user closes any of the windows, but the same level of uncertainty applies to closing an InsTurbo.CMD window.

Not included as a sample image: ABOVE512.EXE is verbose, and will open a VX-REXX "log window".


Dave Yeo

  • Hero Member
  • *****
  • Posts: 4775
  • Karma: +99/-1
    • View Profile
Re: Mozturbo help
« Reply #34 on: May 12, 2019, 06:05:27 am »
I like it.
Sorry for not having time/energy to deal with this lately, I need to finish updating the readme's and such and pay more attention to mozturbo, but currently work and other stuff is interfering.
Thanks for the help.

xynixme

  • Guest
Re: Mozturbo help
« Reply #35 on: May 12, 2019, 01:43:37 pm »
I like it.
Then I'll actually complete it. One of the missing items is an icon (*.ICO, all classic sizes) for a InsTurbo.EXE, for one because I don't want to grab Graser's turbo image an put that on top of some boring public domain installer icon.

The concept is unchanged, one InsTurbo.EXE for all members of the Mozilla family. Most of the extra "work" is related to managing the UI correctly to guide the user, like disabling "load high"-settings when the product is the legacy MOZILLA.EXE. And possibly to changing some of the RexxUtil calls to matching VX-REXX alternatives.

The only extra requirement is the usual VROBJ.DLL, which is shipped with e.g. eCS 1.x. To maintain and build it Watcom VX-REXX is required, and optionally PACKVXRX (lxLite for VX-REXX apps). The same DLL lists still can be found in a single Rexx source file, albeit with the VX-REXX IDE you'd probably edit nothing but the section "Init".

No attached sample source code and EXE yet, because it's unfinished.

Neil Waldhauer

  • Hero Member
  • *****
  • Posts: 1020
  • Karma: +24/-0
    • View Profile
    • Blonde Guy
Re: Mozturbo help
« Reply #36 on: May 12, 2019, 04:37:32 pm »
For automated install users, it's nice to provide a command line version of install that expects no user feedback in any form. Usually this is trivial for the developer to do.
Expert consulting for ArcaOS, OS/2 and eComStation
http://www.blondeguy.com

David Graser

  • Hero Member
  • *****
  • Posts: 869
  • Karma: +84/-0
    • View Profile
Re: Mozturbo help
« Reply #37 on: May 12, 2019, 04:56:04 pm »
I like it.
Then I'll actually complete it. One of the missing items is an icon (*.ICO, all classic sizes) for a InsTurbo.EXE, for one because I don't want to grab Graser's turbo image an put that on top of some boring public domain installer icon.

The concept is unchanged, one InsTurbo.EXE for all members of the Mozilla family. Most of the extra "work" is related to managing the UI correctly to guide the user, like disabling "load high"-settings when the product is the legacy MOZILLA.EXE. And possibly to changing some of the RexxUtil calls to matching VX-REXX alternatives.

The only extra requirement is the usual VROBJ.DLL, which is shipped with e.g. eCS 1.x. To maintain and build it Watcom VX-REXX is required, and optionally PACKVXRX (lxLite for VX-REXX apps). The same DLL lists still can be found in a single Rexx source file, albeit with the VX-REXX IDE you'd probably edit nothing but the section "Init".

No attached sample source code and EXE yet, because it's unfinished.

I created a generic turbo.ico and a PNG that can be included with the install.  The same icon could be used for instTurbo.exe and the Turbo.exe.  Done in 8 bit since Dave mentioned problems in earlier posts about problems with the 24 bit icons and Mozilla.

Went ahead and made a separate install turbo icon.
« Last Edit: May 12, 2019, 06:06:55 pm by David Graser »

xynixme

  • Guest
Re: Mozturbo help
« Reply #38 on: May 13, 2019, 12:20:41 am »
Yes, that turbo-image. Brilliant; thanks. It's now an embedded resource, so a.o. no more default icon in the top left corner of the window of the PM executable. I'll include the PNG version in a "fully functional sample version ZIP file", which still is "under construction".

xynixme

  • Guest
Re: Mozturbo help
« Reply #39 on: May 13, 2019, 12:50:30 am »
Oh, and I'll assign the Turbo.ICO file to WPS Turbo objects created by the installer (WPS setup string: ICONFILE=...), unless Dave links an own icon resource to the *TURBO.EXEs. I can imagine he won't, if recompiling that C source code preferably remains as simple as possible.

Dave Yeo

  • Hero Member
  • *****
  • Posts: 4775
  • Karma: +99/-1
    • View Profile
Re: Mozturbo help
« Reply #40 on: May 13, 2019, 02:55:20 am »
Yes, no plans to add any resources.
Neil has a good point about automated installs.

xynixme

  • Guest
Re: Mozturbo help
« Reply #41 on: May 13, 2019, 11:02:14 am »
One more *.ICO file (and matching *.PNG file) required then: for the "unload" object. I'd propose a turbo unit without a flame and with the small red arrow pointing to 0, or a turbo unit with e.g. a red cross, off-switch or some stop-sign.

David Graser

  • Hero Member
  • *****
  • Posts: 869
  • Karma: +84/-0
    • View Profile
Re: Mozturbo help
« Reply #42 on: May 13, 2019, 12:21:51 pm »
One more *.ICO file (and matching *.PNG file) required then: for the "unload" object. I'd propose a turbo unit without a flame and with the small red arrow pointing to 0, or a turbo unit with e.g. a red cross, off-switch or some stop-sign.

xynixme

  • Guest
Re: Mozturbo help
« Reply #43 on: May 13, 2019, 12:26:38 pm »
For automated install users, it's nice to provide a command line version of install that expects no user feedback in any form. Usually this is trivial for the developer to do.
Not fully possible, because I have no way to assign nor test 80x08 icons, and the installer requires a third-party utility.

An alternative, which I'm using, for a BEEP and return code 7 is to optionally repackage FF/SM/TB with DLLs marked as > 512 MiB and with a matching *TURBO.EXE, to distribute other qualifying LIBPATH DLLs marked as > 512 MiB, and to create the 3 WPS programs objects with an own SysCreateObject() install script in folders of your own choice.

Presumably the install works, so e.g. checking DLLs shouldn't have an added value.

A recent change is that more DLLs (NSS/NSPR) were added to a list of "approved" DLLs. Such an event may be less trivial, compared to shipping a more generic update of files (e.g. a CMD batch file which just successfully marks NSPR4.DLL as > 512 MiB). Actually my next "internal FixPak" includes doing just that, without updating the whole packages.

It could introduce an own standard EA too, to avoid that an automated installers marks the same DLL twice. If all DLLs are already marked, themn an automated installer shouldn't beep when HIGHMEM.EXE is missing.

Finally members of the product family (FF/Mozilla/SM/TB) itself have no guaranteed automated installer. I could order a virtual system with eCS 1.2 NL, which typically will only include Mozilla with an outdated MOZTURBO.EXE (i.e. not Dave's) which may produce SYS2070s. So even then you may have to update MOZTURBO.EXE afterwards.

There is no need to advocate an automated install option as such, trivial or not, and in general it's worth being kept in mind, but I'm not sure what the added value is when an alternative is to distribute fully updated DLL files and to create 3 WPS objects by yourself (excluding the installer/uninstaller). For a single install the installer has an added value, due to checks, taking care of read-only settings, marking DLLs, and so on.

Indeed changing the default WPUrl browser settings via changing OS2.INI does touch the system, but even then it may be better to write an own script which sets those probably fixed settings (fixed per browser) in an early phase of a full install. Because it may not be the only "fix".

Nevertheless I can change a generic default browser selector to include support for arguments, so that becomes an automated installer. If so, with or without showing an error message (file not found, directory not found)?

In this case I'm not sure what the added value is. You'll have full control when you ship DLLs already marked as > 512 MiB, which almost reduces the added value of the installer to a common WPS object creator. Which has to be executed in the right environment. With an own alternative you can even move the *TURBO.EXE files to an own directory, without Dave's (implied) defaults (like the *TURBO.EXE in the main directory of the Mozilla product, and no support for the turbo's directory parameter). Point taken, but are you sure that an automated install option has an added value compared to the alternative? In this case you can distribute repackaged marked files, and you may have to append 2 SysCreateObject()-lines, 1 SysCreateShadow()-line and 2 SysIni()-lines to an own Rexx install script.

I'm not using automated installers that frequently myself, but I cannot recall any glorified WPINSTALL.CMD which requires a third-party product (ABOVE512.EXE or HIGHMEM.EXE) anyway, but only during the install.The installer could try to find ABOVE512.EXE or HIGHMEM.EXE, which may take a long while when a customer has 26 drives including a few slow, TiB-sized ones. If you ship patched DLLs, then you can always skip this too. Then it's always just a glorified WPINSTALL.CMD.

In the case of a single user with a limited number of old or new installs the added value is more clear. Once you got it right, it's quite easy to copy and reproduce such a working and verified install.

xynixme

  • Guest
Re: Mozturbo help
« Reply #44 on: May 13, 2019, 12:31:58 pm »
Wow, that's fast! [insert your own turbo-joke here]... I've got all generic Turbo icon files I need now.