OS/2, eCS & ArcaOS - Technical > Storage

JFS failing in a disastrous way - without the user knowing

<< < (3/8) > >>

Martin Iturbide:
Hi Dave

Checking the WarpIn wpi_prg.inf file.

--- Code: ---UNIQUE[(statement2)]
This makes sure that the statement part of the CONFIGSYS attribute occurs only once, i.e. will be unique in CONFIG.SYS, by searching for a similar line and replacing that line with the new line. If no such similar line is found, the new line is appended to the bottom of CONFIG.SYS (that position can be changed with ADDTOP, ADDBEFORE, ADDAFTER ).

All searching is case-insensitive.

This assumes that statement contains a "=" character, as all CONFIG.SYS statements do. The exact behavior of UNIQUE depends on the syntax:

If UNIQUE is specified all alone (without the brackets and statement2), CONFIG.SYS is searched for a line containing the part before the "=" char of statement.

This is only useful for single CONFIG.SYS statements such as SET xxx= whose left part (before "=") will occur only once in CONFIG.SYS.

Example: CONFIGSYS="PROTECTONLY=YES | UNIQUE" would replace any "PROTECTONLY=" statement with the new line. If no such line exists, a new line is added to the bottom (that position can be changed with ADDTOP, ADDBEFORE, ADDAFTER).

If UNIQUE is specified with the (statement2) part, CONFIG.SYS is searched for a line which contains the part before the "=" character of statement and statement2 after the "=" character as a substring.

Example:

CONFIGSYS="BASEDEV=DANIS506.ADD | UNIQUE(IBM1S506.ADD)"

would search for a line containing both BASEDEV= and IBM1S506.ADD and replace that line with BASEDEV=DANIS506.ADD.

This syntax is required for adding device drivers, because there will surely be more than one BASEDEV statement in CONFIG.SYS.

This also works with the DEVICE= statements which can have a full path specification, as follows:

CONFIGSYS="DEVICE=$(1)\bin\crashsys.drv | UNIQUE(stable.drv)"

This would replace a line containing both DEVICE= and stable.drv with DEVICE=[path_of_package_1]\bin\crashsys.drv, using macro resolution.
--- End code ---

Do you mean that it should be used on the WarpIn script like...
  "CONFIGSYS="DEVICE=?:\OS2\rdmsr.sys | UNIQUE(rdmsr.sys)"
to avoid getting the Unicode.sys replaced?

Regards

Dave Yeo:

--- Quote from: Martin Iturbide on December 01, 2022, 12:27:50 am ---Do you mean that it should be used on the WarpIn script like...
  "CONFIGSYS="DEVICE=?:\OS2\rdmsr.sys | UNIQUE(rdmsr.sys)"
to avoid getting the Unicode.sys replaced?


--- End quote ---

I'm not an expert with Warpin, it seems that would still not add rdmsr.sys if it wasn't in config.sys to begin with but would avoid replacing unicode.sys. Guess that is why Digi ended up with a bit of Rexx to do it.

Martin Iturbide:
Thanks for the feedback.

The second thing.
Will it makes sense to request Arca Noae to put a "Boot Warning Text" for JFS.IFS if it does not find UNICODE.SYS loaded ? Does it makes sense? Can it be possible in boot time to detect this for JFS.IFS?

Regards

Remy:

--- Quote from: Martin Iturbide on December 01, 2022, 02:10:33 pm ---Thanks for the feedback.

The second thing.
Will it makes sense to request Arca Noae to put a "Boot Warning Text" for JFS.IFS if it does not find UNICODE.SYS loaded ? Does it makes sense? Can it be possible in boot time to detect this for JFS.IFS?

Regards

--- End quote ---

Does it have sense to have unicode if language is EN only ?

Lars:

--- Quote from: Martin Iturbide on December 01, 2022, 02:10:33 pm ---Thanks for the feedback.

The second thing.
Will it makes sense to request Arca Noae to put a "Boot Warning Text" for JFS.IFS if it does not find UNICODE.SYS loaded ? Does it makes sense? Can it be possible in boot time to detect this for JFS.IFS?

Regards

--- End quote ---

Yes, that would definitely make sense.

I would need to check the OpenJFS source code, but I would think that JFS.IFS uses the KEE API calls "KernCreateUConvObject", "KernStrToUCS" and "KernStrFromUCS" to create a UConv object, convert from an ASCII string to a Unicode string (taking into account active system codepage), convert from a Unicode string to an ASCII string, respectively.

I would suspect that "KernCreateUConvObject" is called very early, in the IFS loading/initialization stage (but not already on FS_INIT as that executes in Ring 3 whereas calling "KernCreateUConvObject" requires executing in Ring 0). The call will definitely return with an error if UNICODE.SYS is not loaded (these KEE API calls are the ones that require UNICODE.SYS to be loaded !!!) and that would be the indirect way to find out.

If it is not possible to already display a message on boot, then there are options:
1) have a daemon executing that could show a warning message. But that requires to implement a daemon interface in JFS.IFS and also to start the daemon application itself which of course can also go wrong.
2) Another, potentially better option is to write to the system log (the syslog.exe thing that nobody ever uses ...) because that would be a persistent logging (logging happens to a file) but that in turn also requires an additional device driver and daemon (log.sys and logdaem.exe) when the logging is to be done from a device driver or IFS. I also do not know if that conflicts with the role of the IFS giving access to files (if log.sys buffers to memory and logdaem.exe writing much later in the process, then that could work). In that case, AN should ensure that LOG.SYS and LOGAEM.EXE are always added to config.sys on each install.
3) last but not least to use the low level file system device driver calls to write a file in the root directory (say with fixed string: "Attention: UNICODE.SYS NOT LOADED !"). I guess that is the best option as it requires no further components to be up and running. But I seem to remember that also requires ring 0 execution which again would mean, you'd need to delay the logging until the first IFS call executing in Ring0 and also after the filesystem has been mounted (obviously).

But the problem should be solvable.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version