home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: WPS_PM
/
WPS_PM.zip
/
xf084cz.zip
/
xfldr421.inf
(
.txt
)
< prev
Wrap
OS/2 Help File
|
1999-02-05
|
298KB
|
6,302 lines
ΓòÉΓòÉΓòÉ 1. XFolder Online Reference ΓòÉΓòÉΓòÉ
Notices
Introduction -- start here
Installation
Context menu features
Folder features
Folder status bars
Extended Shutdown
The new "System" objects
The Netscape DDE Interface
New XFolder system sounds
New default icons
Frequently Asked Questions (FAQ)
Related files
Version information
XFolder's internals
Appendices
ΓòÉΓòÉΓòÉ 2. Notices and Legalese ΓòÉΓòÉΓòÉ
Licence (CHANGED!)
GNU Public Licence
Comments and suggestions
Thank you's: you know who you are...
Credits
Trademarks
ΓòÉΓòÉΓòÉ 2.1. Licence And Disclaimer ΓòÉΓòÉΓòÉ
February 1999
With V0.80, the licence agreement of XFolder has changed.
While previous versions were "plain" freeware, the XFolder package is now
placed under the GNU General Public Licence (GPL) Version 2.
The GPL is a general licence agreement which was developed by the Free Software
Foundation to protect the rights of programmers who wish to publish the source
code of their software. The GPL is mostly used with software of the GNU project
and has become more widely known with the evolution of Linux, which is mostly
published under the GPL too.
You can find the full text of the GPL in the plain-text file COPYING in the
XFolder installation directory. I have added a formatted version of this on the
next page of this document.
By installing XFolder on your system, you declare your agreement to the terms
and conditions of the GNU General Public Licence, Version 2, as contained in
the file COPYING in the XFolder installation directory.
The GPL means more Legalese, but also more rights for you as a user and, if
applicable, developer. The most obvious change is that XFolder's source code is
now also released.
The following brief explanations are intended as an introduction to the terms
and conditions of the GPL only. They are not part of the licence agreement, for
which only the terms and conditions in the COPYING file shall prevail.
If you are an XFolder user, not much has changed. You may still use
XFolder without any payment to Ulrich MФller. The GPL does not restrict
you on this matter. However, there is still no warranty whatsoever. If
XFolder ruins your system and your work of the last 30 years is lost,
sorry. (This is not very probable though). Refer to the bottom of the GPL
for the detailed disclaimer.
If you're a distributor, you may still distribute the whole XFolder
package. However, the GPL might require you to also distribute the
XFolder source code, which is available in a separate package from the
author's WWW homepage.
If you're a developer, you now have the source code. However, if you base
your own software on XFolder's source code, the GPL might require you to
place your work under the GPL also, especially make your software
freeware and publish the source code.
Even though I'm publishing the source code, I retain the copyright to
what I've written.
The GPL deals with these issues extensively. Before you use or modify any
code parts of XFolder, make sure you read the GPL thoroughly. If you have
any questions, feel free to contact me.
XFolder contains some code which has been placed into the public domain
by its respective authors. These sections are marked in the source files
and also listed on the "Credits" page. Naturally, the GPL does not apply
to those sections, because I have not written them.
This licence does not necessarily cover future releases. Ulrich MФller retains
the right to modify the licence agreement for future versions.
I have chosen to publish the source code because XFolder has become a fairly
complex application by now, and it becomes increasingly difficult to find
bugs, because many of these simply do not show up with my system
configuration, and I am not willing to buy new hardware to debug XFolder. I
hope that now some users will be able to find bugs in the code themselves.
In addition, as I have stated several times, I think that the only chance for
OS/2 to survive is that more free software is needed. By publishing the source
code I hope that more developers will take the step to develop their own WPS
classes, because WPS programming only seems to be completely wild in the
beginning. After a while, it's really fun.
I chose the restrictive GPL in this respect because then other developers will
also have to release their software as GPL freeware.
And now: have fun with XFolder!
(C) Copyright 1997-98 Ulrich MФller.
ΓòÉΓòÉΓòÉ 2.2. GNU Public Licence ΓòÉΓòÉΓòÉ
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share
and change it. By contrast, the GNU General Public License is intended to
guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This General Public License applies to
most of the Free Software Foundation's software and to any other program whose
authors commit to using it. (Some other Free Software Foundation software is
covered by the GNU Library General Public License instead.) You can apply it
to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom to
distribute copies of free software (and charge for this service if you wish),
that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs; and that you know you
can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny
you these rights or to ask you to surrender the rights. These restrictions
translate to certain responsibilities for you if you distribute copies of the
software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for
a fee, you must give the recipients all the rights that you have. You must
make sure that they, too, receive or can get the source code. And you must
show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy, distribute
and/or modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If the
software is modified by someone else and passed on, we want its recipients to
know that what they have is not the original, so that any problems introduced
by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We
wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program proprietary.
To prevent this, we have made it clear that any patent must be licensed for
everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification
follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms of
this General Public License. The "Program", below, refers to any such program
or work, and a "work based on the Program" means either the Program or any
derivative work under copyright law: that is to say, a work containing the
Program or a portion of it, either verbatim or with modifications and/or
translated into another language. (Hereinafter, translation is included
without limitation in the term "modification".) Each licensee is addressed as
"you".
Activities other than copying, distribution and modification are not covered by
this License; they are outside its scope. The act of running the Program is
not restricted, and the output from the Program is covered only if its contents
constitute a work based on the Program (independent of having been made by
running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as
you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this License
and to the absence of any warranty; and give any other recipients of the
Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may
at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus
forming a work based on the Program, and copy and distribute such modifications
or work under the terms of Section 1 above, provided that you also meet all of
these conditions:
a) You must cause the modified files to carry prominent notices stating
that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole
or in part contains or is derived from the Program or any part thereof,
to be licensed as a whole at no charge to all third parties under the
terms of this License.
c) If the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive use in
the most ordinary way, to print or display an announcement including an
appropriate copyright notice and a notice that there is no warranty (or
else, saying that you provide a warranty) and that users may redistribute
the program under these conditions, and telling the user how to view a
copy of this License. (Exception: if the Program itself is interactive
but does not normally print such an announcement, your work based on the
Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Program, and can be reasonably
considered independent and separate works in themselves, then this License,
and its terms, do not apply to those sections when you distribute them as
separate works. But when you distribute the same sections as part of a whole
which is a work based on the Program, the distribution of the whole must be on
the terms of this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise the
right to control the distribution of derivative or collective works based on
the Program.
In addition, mere aggregation of another work not based on the Program with
the Program (or with a work based on the Program) on a volume of a storage or
distribution medium does not bring the other work under the scope of this
License.
3. You may copy and distribute the Program (or a work based on it, under
Section 2) in object code or executable form under the terms of Sections 1 and
2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source
code, which must be distributed under the terms of Sections 1 and 2 above
on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to
give any third party, for a charge no more than your cost of physically
performing source distribution, a complete machine-readable copy of the
corresponding source code, to be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to
distribute corresponding source code. (This alternative is allowed only
for noncommercial distribution and only if you received the program in
object code or executable form with such an offer, in accord with
Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all
the source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and
installation of the executable. However, as a special exception, the source
code distributed need not include anything that is normally distributed (in
either source or binary form) with the major components (compiler, kernel, and
so on) of the operating system on which the executable runs, unless that
component itself accompanies the executable.
If distribution of executable or object code is made by offering access to
copy from a designated place, then offering equivalent access to copy the
source code from the same place counts as distribution of the source code,
even though third parties are not compelled to copy the source along with the
object code.
4. You may not copy, modify, sublicense, or distribute the Program except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it.
However, nothing else grants you permission to modify or distribute the
Program or its derivative works. These actions are prohibited by law if you
do not accept this License. Therefore, by modifying or distributing the
Program (or any work based on the Program), you indicate your acceptance of
this License to do so, and all its terms and conditions for copying,
distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program),
the recipient automatically receives a license from the original licensor to
copy, distribute or modify the Program subject to these terms and conditions.
You may not impose any further restrictions on the recipients' exercise of the
rights granted herein. You are not responsible for enforcing compliance by
third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or otherwise)
that contradict the conditions of this License, they do not excuse you from
the conditions of this License. If you cannot distribute so as to satisfy
simultaneously your obligations under this License and any other pertinent
obligations, then as a consequence you may not distribute the Program at all.
For example, if a patent license would not permit royalty-free redistribution
of the Program by all those who receive copies directly or indirectly through
you, then the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply and
the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or
other property right claims or to contest validity of any such claims; this
section has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many
people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose that
choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an explicit
geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In
such case, this License incorporates the limitation as if written in the body
of this License.
9. The Free Software Foundation may publish revised and/or new versions of the
General Public License from time to time. Such new versions will be similar
in spirit to the present version, but may differ in detail to address new
problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any later
version", you have the option of following the terms and conditions either of
that version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of this License,
you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs
whose distribution conditions are different, write to the author to ask for
permission. For software which is copyrighted by the Free Software
Foundation, write to the Free Software Foundation; we sometimes make
exceptions for this. Our decision will be guided by the two goals of
preserving the free status of all derivatives of our free software and of
promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible
use to the public, the best way to achieve this is to make it free software
which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach
them to the start of each source file to most effectively convey the exclusion
of warranty; and each file should have at least the "copyright" line and a
pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 675 Mass
Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it
starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain
conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may be
called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General Public
License instead of this License.
ΓòÉΓòÉΓòÉ 2.3. Contact -- Comments and Suggestions ΓòÉΓòÉΓòÉ
Ulrich MФller
e-mail: ulrich.moeller@rz.hu-berlin.de
www: http://www2.rz.hu-berlin.de/~h0444vnd/os2.htm
The above WWW address always carries both the newest release of XFolder and its
complete source code. You can also find other software there, including the
OS/2 CommandPak, which will enhance your command line environment.
Please read through the "Frequently Asked Questions" section before contacting
me; maybe you will already find what you're looking for in there.
I am also now maintaining a public bug list on the XFolder homepage.
Important note: I will not respond to mails any more which address problems
which are already described at the above locations. XFolder is just becoming
too popular by now, and I keep spending half of the time which could go into
enhancing XFolder writing to people who are too lazy to read the documentation.
Sorry.
Reporting bugs:
If however you still wish to contact me, either because you think you have
found a new bug or you think you have found a solution (which is still very
welcome), please include the following information:
Please describe the situation in which the error occured and whether it
is reproduceable.
Include the OS/2 version you are running (Warp 3 or 4, and possible
fixpaks installed).
Include a list of other WPS enhancers you are running.
Look in the root directory of your boot drive for a file named
"XFLDTRAP.LOG"; if it exists, please include it in your message.
If you are running into problems with the eXtended Shutdown / Restart WPS
features, please switch on the automatic log function on the "XDesktop"
page of the Desktop's settings notebook. This will create a file named
"XSHUTDWN.LOG" in the same location during shutdown. Please include this
file also.
If you're a programmer, you might want to take a look at the source code also.
Maybe you can find a bug yourself.
ΓòÉΓòÉΓòÉ 2.4. Thank You's ΓòÉΓòÉΓòÉ
Thanks to the following people for paying me in naturals:
Glauco Ippolitoni, Italy, for sending me the Win95 keyboard
Mark Mellin, USA, for sending me VisualAge C++
The following people deserve a special thank you for reporting me problems and
incompatibilities and giving useful hints for future versions (in alphabetical
order). Thanks also to everyone else who has contacted me; you are too many to
be mentioned here separately. Please feel addressed with a global thank you!
ARAKAWA Atsushi, Japan, for filling in the APM power-off code and finding
bugs
Carsten Arnold, Germany, for finding bugs in the source code
Harvey Braun, Australia, for first detecting an embarassingly obvious
installation bug
John Buckley, UK, for the WPDrives suggestion and a better NEWOBJ.CMD
Duane A. Chamblee for supplying the BOOTMGR.CMD code
James "Lithium" Church for the templates idea, submitting Kris Kwilas'
OS/2 wishlist, and testing for the hotkey bugs
Yuri Dario, Italy, for sending me all that Win95 keys information
Bjorn Fahler, Sweden, writer at EDM/2, for lots of technical tips and his
very helpful programming columns
Christian Gaarden, Denmark (I believe), for useful suggestions
Diane Gardner, USA, for her very favorable reviews of XFolder in the Land
of Beyond, useful suggestions and detailed bug reports
Reinhard Giesen, Germany, for useful suggestions
Marcus de Geus, Netherlands, for useful suggestions for the Netscape DDE
Interface
Jens Glathe, Germany, for technical information and you-know-what
Torsten Balle Koefoed, Denmark, for detecting incompatibilities, bugs,
and making useful suggestions
Gerhard Hahn, Austria, for the Clipboard suggestion
Tomas Hajny, Czech Republic, for finding lots of little mistakes in the
sources
Jim Hruska, USA (I believe), for detecting incompatibilities
Henk Kelder, Netherlands, developer of a whole buch of valuable OS/2
utilities and uncrowned guru of OS/2 Extended Attributes, for
comprehensive support on .ICONPOS and other EAs; check his homepage for
his software
Kris Kwilas for his very thoughtful OS/2 wishlist about what needs to be
improved with OS/2
Martin Lafaix, France, for finding errors and detailed tips and
suggestions about menus, notebooks, and other things
Hauke Laging, Germany, for detecting incompatibilities, making LOTS of
suggestions, his OS/2 initiatives and bragging about his computer
Christian Langanke, Germany: developer of "Animated Mouse Pointers for
OS/2", the famous WPS enhancer (check his homepage) for comprehensive
suggestions, technical tips, and continuing support
Roger Lindmark, Sweden, for finding a lot of mistakes in the
documentation and other useful hints
Macarlo, Brazil, benedictine monk and system analyst, for inspiring
correspondence
Eric Norman, Montana, USA, for finding bugs in the subfolder handling and
"Snap to grid"
Andrea Penna, Italy, for supplying the SmartSuite / NetscDDE trick.
Michael Reinsch, Germany, for lots of detailed bug reports
Larry Salomon, Jr., USA (I guess), writer at EDM/2, for lots of helpful
articles about PM programming
Andrea Scagni, Italy, for detailed bug reports
Ralph Scharpf, Germany, for the video driver hints
Bernd Schemmer, Germany, for detecting incompatibilies and for his
fabulous "Rexx Tips & Tricks" INF book
Trevor Smith, former editor-in-chief of OS/2 e-zine, for support and the
configurable reboot idea (they now also have a review of XFolder in
volume 3 issue 7)
Thomas Unverzagt, Germany, for the "full path in title" idea
Rich Walsh, USA, author of "Rwx" and "DragText", for help on some SOM
internals
Steve Wendt, USA, for advertising for XFolder on his valuable "OS/2
Wishlist" page and for useful suggestions
Stefan Zechmeister, Germany, for figuring out how to get Object Desktop
2.0 to work
Super-duper thanks go out to the following people for their software:
Dennis Bareis, Australia, for his amazing PMPRINTF package. Couldn't have
programmed XFolder without it. Check out
http://www.ozemail.com.au/~dbareis/, where you'll also find tons of other
developer's stuff.
Andrew Pavel Zabolotny for his very valuable HTML2IPF tool, with which I
created this online documentation. (I hate IPF.) He is also the developer
of lxLite. (No WWW address for this.)
The development team of GIMP for Linux the most impressive graphics
package available, and to those capable people who have made the OS/2
version. This is what I've created most graphics with.
ΓòÉΓòÉΓòÉ 2.5. Credits ΓòÉΓòÉΓòÉ
XFolder contains original or modified code developed by the following people
(in alphabetical order):
ARAKAWA Atsushi, Japan (arakaw@ibm.net): porting APM power-off code for
XFolder
John Buckley, UK: better NEWOBJ.CMD for XFolder
Monte Copeland, IBM: exception handling (1993)
Chris Hanson, MIT, USA: Extended Attributes handling (1995) (EALIB.ZIP at
Hobbes)
Henk Kelder, Netherlands: OS2.INI/OS2SYS.INI WPS entries and WPS EAs
handling (1998)
Gilles Kohl: C string handling routines (1992)
Ekkehard Kraemer, Germany: hard drive detection found at
http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt6364.HTML
Dan Libby: PM container helper function found at
http://zebra.asta.fh-weingarten.de/os2/Snippets/Isdr8319.HTML (1996)
Kai Uwe Rommel, Germany: DosQProcStatus handling code (1992-94) (PROC.ZIP
at Hobbes)
Roman Stangl, Austria: rebooting OS/2, taken from EDM/2 vol. 5, issue 9;
his APM/2 code (from apm2v14.zip at Hobbes); exception handling code from
Program Commander/2
Mark Stern, Belgium: C string handling routines (1993)
Uri J. Stern, USA (?): killing the tasklist window
(http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt8881.HTML)
plus parts of the code samples from IBM's OS/2 Warp 3 Developer's Toolkit. If
XFolder should contain any more bugs, they're probably from there. ;-)
If anybody thinks that I have forgotten him or her, this is not intentional.
Drop me a note and I'll add you to this page.
The information about the CONFIG.SYS settings is mostly based on the OS/2
command reference and on the descriptions in the CNFGINFO package available at
Hobbes.
Most of the information about the WPS classes is also taken from the OS/2 Warp
3 Developer's Toolkit, some of it I've found out myself.
ΓòÉΓòÉΓòÉ 2.6. Trademarks ΓòÉΓòÉΓòÉ
The following terms are trademarks of the IBM Corporation in the United States
or other countries or both:
C-Set/2
IBM
Operating System/2
OS/2
OS/2 Warp
Presentation Manager
SOM
System Object Model
VisualAge
WarpCenter
Workplace Shell
Netscape and Netscape Navigator are trademarks of Netscape Communications
Corporation.
Other company, product, or service names may be trademarks or service marks of
others. They are not specifically marked.
Any mention of a product in this publication does not constitute an endorsement
or affiliation.
ΓòÉΓòÉΓòÉ 3. Introduction -- Start Here ΓòÉΓòÉΓòÉ
Welcome!
Overview
Request for help
ΓòÉΓòÉΓòÉ 3.1. Welcome to XFolder! ΓòÉΓòÉΓòÉ
Welcome to XFolder!
XFolder was written to give the OS/2 Workplace Shell (WPS) some features which
I have always missed.
In my view, the WPS ist still the one feature which makes OS/2 stand out
compared to other operating systems. While other operating systems (especially
Linux) have by now reached a stability which is at least comparable, if not
greater than OS/2's, there is nothing that I know of which can compare to the
WPS in terms of productivity, flexibility and superior overall concept.
However, IBM has -- even after the last update, OS/2 Warp 4 -- not fully
exhausted the WPS's potential, especially with respect to the following:
Even thouth the OS/2 "templates" concept is very powerful, it is not very
comfortable to always have to drag objects from the Templates folder in
order to create objects -- especially since this folder takes ages until
all objects are displayed. On the other hand, although Windows 95 is a
truly evil operating system, its folders there have a handy function: you
can put links into the "\Windows\ShellNew" directory, and these can then
be created from all folders.
The truly superior object-oriented concept falls short of its potential
when it comes to context menus. There is just no function to modify
context menus globally for all objects.
The same applies to folder sorting.
OS/2 traditionally does not like keyboard shortcuts.
The OS/2 Shutdown is a sensible feature, but it can neither be terminated
nor configured in any way.
In many places the WPS is not as productive as it could be, because in
certain situations, the user always has to perform the same actions
sequentially, which could be abbreviated. For example, one almost always
changes the title after creating an object, one almost always goes
through 18 menu pages to change a certain folder setting, and after
expanding a folder tree view, one needs to scroll down the folder
contents manually.
Oh yes, and folder status bars would be handy too, without having to load
extra software which slows down performance.
XFolder addresses these problems by introducing a number of WPS class
replacements. Among others, XFolder replaces the WPS folder class ("WPFolder")
to introduce the many features which are described in this online reference.
Previous versions of XFolder pretty much dealt with context menus "only"; by
now, however, XFolder has come to a point where it's improving many aspects of
the Workplace Shell at many different places. To implement this, XFolder by
now not only replaces the WPFolder class, but many others too. These
replacements should be totally transparent to you: they just introduce new
features, and you don't have to deal with any WPS internals.
XFolder contains exactly those features I have missed working daily with OS/2;
I hope that you consider XFolder just as useful as I do.
XFolder does not primarily intend to be a replacement for other popular WPS
enhancers. It is intended to fill gaps, not to be competition for other
freeware utilities. You might however find features in XFolder which are
otherwise available only in shareware or commercial programs, because I
strongly feel that OS/2 needs more freeware programs. After all, this is what
makes Linux alive.
ΓòÉΓòÉΓòÉ 3.2. Overview ΓòÉΓòÉΓòÉ
Among others, XFolder extends your Workplace Shell by introducing the following
features:
1. New standard context menu items for folders and data files, such as quick
folder settings, "Select by name", "Snap to grid", "Copy filename" etc.
2. Creating objects from context menus.
3. Folder context menu items are freely configurable by placing objects into
a special configuration folder.
4. Display of folder contents in context menus for quicker access without
having to open a folder.
5. Display of the full folder path in a folder's window title.
6. The prettiest and most flexible folder status bars on the planet. ;-)
7. Extended folder sort functions: additional sort criteria and system-wide
sort settings.
8. Auto-scroll Tree views feature.
9. Preparing folders for QuickOpen at WPS startup.
10. Folder hotkeys for frequently used folder/file operations.
11. Replaceable system icons for the most common object types.
12. "Restart WPS" feature which doesn't ruin your WPS settings.
13. Extended Shutdown with a number of useful enhancements: automatic reboot
options with BootManager support ("boot to Linux"), Shutdown can be
cancelled, and hanging applications can be skipped.
14. New Startup / Shutdown folders.
15. User-friendly WPS class list for class manipulations.
16. "OS/2 Kernel" object for CONFIG.SYS settings.
Note: A few features are disabled per default to prevent problems already
after XFolder has been installed, because these might cause problems on some
systems. These features are:
the Extended Shutdown; this can be found in a new settings page of the
Desktop's Settings notebook;
folder status bars; these can be enabled on the "Status bars" page in the
new "Workplace Shell" object;
the extended sort functions; these can be enabled on the "Sort" page in
the new "Workplace Shell" object;
display of icons in the new "folder content" functions; this can be
enabled on the "Context menus" page in the new "Workplace Shell" object.
ΓòÉΓòÉΓòÉ 3.3. Request For Help ΓòÉΓòÉΓòÉ
If you like XFolder and would like to contribute to it, your support will be
very welcome. XFolder is slowly beginning to become too complex to be handled
by one person all alone.
You don't have to be a programmer to help. I'd appreciate any support in the
following areas:
Translations. XFolder is designed to be translateable in a fairly easy
way. All language-dependent parts have been separated from the actual
"intelligence" of the program into separate files, which can be
translated independently.
If you're interested in translating XFolder to your language, you can
simply download the XFolder sources from my homepage, which contain
everything neccessary for this. You don't have to be a programmer to do
this, but it would be of great help if you knew HTML, since both
XFolder's Online Reference and the help file were originally written in
HTML and then simply converted to the IBM format, which I dislike very
much.
In this case, please contact me, so I can add you to my mailing list to
allow you to get news about changes in time.
Documentation. I am looking for someone to take over maintenance of the
XFolder INF and HLP files. It just takes too much time away from
programming to always have to add documentation while adding new
features, and I tend to overlook stuff sometimes. This applies especially
to the German documentation. So if you know German and/or English and
HTML, please contact me.
If you're a programmer and have some experience in PM and/or WPS
programming, please contact me also. I have great plans for XFolder's
future and would like to turn it into more of an "XWPS" package to
overcome the most obvious WPS limitations which exist today. Since
there's little hope that IBM will do anything about this, I believe the
OS/2 community needs to do it themselves. The following major things are
on my to-do list (I am not listing the "little" features that I'll add
myself soon):
1. WPS file handling. This needs some serious reworking. I cannot
believe that the WPS hangs every other time one copies more than a
dozen files. File handling is the main task of an operating system's
shell, and the current implementation needs at least the following
enhancements: thread-safety, speed, proper progress bars when
copying, a "Cancel" button that's not always disabled, more
meaningful error messages etc.pp. This will require all of the WPS
file-handling methods to be reworked (wpCopy, wpMove etc.).
2. Populating folders. One of the reasons that the WPS has become so
much slower in Warp 4 is that the WPS now seems to create object
handles for every single file while populating a folder, which
wasn't the case with Warp 3. Object handles are a thoughtful
mechanism which is neccessary for program objects and shadows, but
they should only be created when neccessary. I suspect this
misbehavior is situated in wpPopulate, which therefore needs some
rework too.
3. Icon handling. Drag'n'drop in the WPS always causes icons to be
arranged in a fairly random way. This should be improved.
4. WPProgram. I have never understood why there's an object for global
DOS/Win-OS/2 settings if the program objects don't respect the
settings there. We need support for global settings and also global
and individual environment variables in program objects so that
CONFIG.SYS does not always have to be modified.
5. WarpCenter. That thing is instable, slow, and does not conform very
well with the rest of the WPS. This should be completely
reprogrammed. Since XFolder already has code for those "folder
content" menus, this shouldn't be too hard to to.
6. Multi-user support. The WPS is already designed to support multiple
users thru the use of multiple OS2.INI files and Desktop
hierarchies, so I cannot quite understand why IBM is not
implementing this. XFolder could do this; I am thinking of replacing
the PROTSHELL and/or RUNWORKPLACE statements in CONFIG.SYS with some
XFolder executable, which will then start PMSHELL.EXE with a bunch
of preset environment variables, most importantly OS2.INI settings
and a UNIX-like HOME environment variable to support multiple
configurations for applications in a "home" directory for each user.
XFolder should then offer a context menu item to "logoff" or
something.
7. OS/2 also needs to be able to restart Presentation Manager somehow
without having to reboot, for example to change display resolutions.
The current solution is a joke. If you have any ideas about this,
especially how to terminate and restart PM without blocking the
system, please contact me.
So if you're interested in adding any of these features to XFolder (or if
you have other suggestions), you'd be very welcome to join the project!
Any help is appreciated.
ΓòÉΓòÉΓòÉ 4. Installation ΓòÉΓòÉΓòÉ
Please select one of the following topics:
1. Requirements
2. Compatibility with other software
3. Installation
4. Deinstallation -- how to get rid of XFolder
5. Updating from a previous version of XFolder
6. Installing National Language Support
ΓòÉΓòÉΓòÉ 4.1. Requirements ΓòÉΓòÉΓòÉ
XFolder requires at least OS/2 Warp 3. It will NOT run on previous versions,
for it calls OS/2 API functions not present on OS/2 version 2.x and before.
I have tested XFolder with the following configurations myself (all German
versions):
OS/2 Warp 3 no fixpaks installed
OS/2 Warp 3, fixpak 35 installed
OS/2 Warp 4, no fixpaks installed
OS/2 Warp 4, fixpaks 5 and 7 installed
I strongly recommend installing newer fixpaks. See the FAQ section for
details.
Note: I was reported that installation fails under Warp 3, fixpak 31. In this
case, you should install a newer fixpak.
ΓòÉΓòÉΓòÉ 4.2. Installation ΓòÉΓòÉΓòÉ
Before installing XFolder, please read the "Compatibility with other software"
page in the appendices to this reference.
1. Unzip the package in a directory of your choice, where you wish XFolder's
files to be permanently.
This directory does NOT have to be on the PATH or LIBPATH. Choose
whatever you like best.
Note: Do not use a directory with spaces in its path, e.g. "D:\WPS
enhancers\XFolder", or the installation will fail.
2. If you have downloaded a National Language Support package also, unzip
this package into the same directory. This should automatically place the
neccessary files into their subdirectories, e.g. zB. XFLDR049.DLL into
the /BIN directory.
3. Start INSTALL.CMD by double-clicking on it or typing "install" at the
command prompt. If you have installed NLS packages, you will also need to
enter the code for the language to install. This will only register the
XFolder WPS classes (residing in XFLDR.DLL) and NOT copy any files.
4. The install script offers you to restart the WPS. This saves you from
rebooting, since only the WPS process will be restarted. Alternatively,
you can shut down and reboot yourself. After doing one of the two, the
WPS will recognize the XFolder classes.
Please be aware of the fact that once the class is recognized by the WPS
(after the restart), you CANNOT move the XFolder directory to a different
place, since the WPS locks the XFLDR.DLL file. So, before running
INSTALL.CMD, move the XFolder files to the location where you want them
to remain permanently (step 1 above).
That's all!
After the restart, XFolder will automatically create a default configuration
folder. If you wish to recreate this default configuration, simply delete the
existing configuration folder; as soon as you press the right mouse button on
a folder, XFolder will complain and recreate the default configuration folder.
XFolder neither changes CONFIG.SYS settings nor does it copy any files into
OS/2 system directories. Everything XFolder needs is situated in its own
directory. The only things XFolder needs to work properly are a number of
settings in OS2.INI, which will be removed when you uninstall XFolder.
ΓòÉΓòÉΓòÉ 4.3. De-installation ΓòÉΓòÉΓòÉ
Simply run INSTALL.CMD again. When prompted for whether you wish to register or
unregister XFolder, select "unregister".
Reboot, and everything will be as it was. You can then delete the XFolder
directory, if you wish.
If you wish to remove XFolder because you don't consider it to be of any use
for you, that's fine.
However, if you remove it because it does not seem to be working right or
messes up your system, please contact me so I can improve it.
ΓòÉΓòÉΓòÉ 4.4. Updating from a Previous Version of XFolder ΓòÉΓòÉΓòÉ
Basically, you only have to use INSTALL.CMD as described in the Installation
section.
However, there are a few extra rules you must follow when updating:
1. Since the WPS has locked the XFLDR.DLL file, DO NOT unzip the new version
in the same directory where you placed the old version; since XFLDR.DLL
is locked by the WPS, it cannot be overwritten.
Instead, unzip the new version in a DIFFERENT directory of your choice
(name it "NewXFolder", for example).
Alternatively, you can de-install the old XFolder version and restart the
WPS. This should unlock the XFolder files. Then copy the new files into
the old XFolder directory and then install the new version.
2. After you have done so, run INSTALL.CMD. This will automatically
de-register the old version of XFolder and register the new version.
3. After restarting the WPS, you can delete the old XFolder directory (the
one with XFolder's old files, not the configuration folder).
Important notes: A few things change with every XFolder version, sometimes
causing incompatibilities when updating XFolder.
1. Do not be surprised that since V0.60, the "Recreate default
configuration" item has been removed from the install program. XFolder
now handles this itself; if you wish to recreate the default
configuration folder, simply delete your existing one, and XFolder will
offer you to recreate it.
2. Starting with version 0.50, the XFolder Global Settings have been moved
into OS/2's System notebook. Please see Global Settings for details. The
"XFolder Global Settings" program (XFSETUP.EXE) which was provided with
XFolder 0.4x will have no effect on settings of this version. In other
words, you can start it, but whatever you configure in there will not
influence this version of XFolder in any way.
3. Unfortunately, since the internal settings format changes with every new
version, your existing settings will be lost when you're upgrading from a
previous version.
4. Starting with version 0.30, XFolder has changed the way program objects
are handled. The name of the folder whose context menu was used is now by
default sent as an additional parameter to the started application.
If you're updating from XFolder V0.21 and the applications defined in
your existing configuration folder start displaying error messages, you
may need to put an extra "%" sign into the parameters list of the
corresponding program object in the configuration folder. See "Program
Objects" for details on this.
If you experience anything unexpected with your new version of XFolder, please
look in the "Revision history" section to find out what has been added to
XFolder.
ΓòÉΓòÉΓòÉ 4.5. Installing National Language Support ΓòÉΓòÉΓòÉ
Starting with V0.52, XFolder is capable of supporting other languages than just
English. While XFolder versions before V0.82 containes NLS support for both
English and German, German NLS support has now been placed into a separate
package.
For languages other than English however, you will need an XFolder National
Language Support (NLS) package. Such a package will contain a number of files,
among them a new Dynamic Link Library (DLL) for XFolder itself, a new help file
(.HLP) and a new Online Reference (.INF). Each of these files carries a
three-digit language code in its respective file name, as defined in the OS/2
Online Reference. For example, the English files, which are already included
with XFolder, all have a "001" code (for US English) in their names.
Please check my homepage for available NLS packages.
In order to install an NLS package after you have installed the main XFolder
package, perform the following steps:
Unzip the NLS package and place the resulting files in the corresponding
subdirectories of the XFolder installation directory.
In the "Workplace Shell" object, select the "XFolder Internals" page
(which comes after the first "XFolder" page).
In the "Language" field you should now find the new language of the NLS
package. Select it, upon which the "Workplace Shell" object should be
closed and the language should change.
I don't have much influence on NLS DLLs, except for the German one. If you're
interested in translating XFolder to your language, you can simply download
the XFolder sources from my homepage, which contain everything neccessary for
this. You don't have to be a programmer to do this, but it would be of great
help if you knew HTML, since both XFolder's Online Reference and the help file
were originally written in HTML and then simply converted to the IBM format,
which I dislike very much. If you're interested in translating, please contact
me, so I can add you to my mailing list to allow you to get news about changes
in time.
ΓòÉΓòÉΓòÉ 5. Context Menu Features ΓòÉΓòÉΓòÉ
Default extensions to folders' context menus
Creating objects with XFolder
Configuring context menus
Extra features with program objects
The order of menu items
The "Folder content" functions
"Select by name"
"Snap to grid"
"Copy filename"
ΓòÉΓòÉΓòÉ 5.1. Default Additions to the Context Menus ΓòÉΓòÉΓòÉ
The XFolder WPS class enables you to freely add new items to the context menu
of all folders on your system.
Here's a screenshot for the preset XFolder configuration (as defined by the
install script):
(Obviously, this screenshot was taken on a German OS/2 version, but this
shouldn't make any difference.)
You will see the same new popup items on all folders on your system. What
happens now if you press one of the items in the submenu is that XFolder
performs the selected action on just the folder that the context menu was
opened for.
The default options installed by installation script are:
The "Command lines" submenu contains four items for OS/2 and DOS command
lines, in a window and in fullscreen, respectively. If you select any of
these, a command session will be started with the directory of the folder
already changed to. This way you don't have to "cd" your way through a
whole directory tree in order to perform command line actions on a
certain folder.
The "Create another" submenu contains items for quickly creating certain
objects in the selected folder, without having to open the Templates
folder every time. Presently, you can create folders and (empty) program
objects this way.
See "Creating objects with XFolder" for more.
The "Quick Settings" submenu offers a few handy settings for folders with
a single mouse click, instead of having to go into the settings notebook
and click through several pages. Here you will find "Always sort this
folder" and items for changing the icon sizes and such.
The "XFolder" submenu contains items for opening this online help and
opening the XFolder Configuration Folder, which is described on a
separate page.
The "Netscape (DDE)" item will make Netscape display the directory of the
respective current folder. (This item was only installed if Netscape was
found on your PATH.) For this, XFolder uses its "Netscape DDE Interface"
(NETSCDDE.EXE), which is included with the XFolder package and will check
if Netscape is already running; if so, the running instance will be used
for displaying the folder instead of always starting a new copy of
Netscape. (See "Related files" for more.)
The "Treesize" item (which is new with XFolder V0.81) will display a new
window showing you the subdirectory tree of the current folder with the
disk usage for each subdirectory. For this, XFolder uses the TREESIZE.EXE
program, which is also included with the XFolder package. (See "Related
files" for more.)
XFolder lets you freely modify these context menu items. See "Configuring
context menus" for details.
ΓòÉΓòÉΓòÉ 5.2. Creating Objects with XFolder ΓòÉΓòÉΓòÉ
In the default configuration, the "Create another" context submenu contains
items for creating WPS objects. By selecting one of the items in this submenu,
XFolder will create a new object in the folder whose context menu was used.
Per default, if the folder is open, XFolder will make the title of the new
object editable, just as if you had clicked on it with the Alt key pressed:
However, if you hold down the Shift key while selecting the menu item, XFolder
will automatically open the Settings notebook of the new object after creation.
You can change this behavior on the "Context menus" pages in the new "Workplace
Shell" object.
ΓòÉΓòÉΓòÉ 5.3. Configuring Context Menus ΓòÉΓòÉΓòÉ
What makes XFolder different from other folder enhancements is that you can
FREELY CONFIGURE popup menus without having to reboot.
This is done with the use of a separate Configuration Folder, which looks just
like any normal WPS folder. The installation script placed it on your desktop,
but you may move it anywhere you like.
Whatever you put into this configuration folder will immediately appear in the
context menus of all the folders on your system.
Let's clarify this by taking a look at the pre-set configuration again:
The pre-set configuration folder looks like this:
As you can see, the folders and program objects in the XFolder Configuration
folder correspond to the items in the context menu.
However, the action which XFolder performs upon selecting a context menu items
depends on the type of object that corresponds to the menu item. You need to
differentiate between the following types of objects:
1. Program objects will be started when the corresponding menu item is
selected. (Actually, not the program object will be started, but the
program defined in the program object's Settings notebook.)
The four "command line" objects are pretty much copies of the ones that
are also installed by OS/2 itself. The objects in the "Create a~nother"
folder all point to a little REXX script in the XFolder installation
directory, which can create folders and program objects.
XFolder can perform a number of useful tricks on program objects. Please
read through the "Extra features for program objects" page to learn more.
2. Putting another folder in the configuration folder will create a
cascading submenu in the context menus. In this "subfolder", you can
place more objects and folders. This way, you can create a whole popup
menu hierarchy (as can be seen in the default setup above).
3. A template or shadow of a template will result in the creation of a new
object from it when the respective menu item is selected. The new object
will be created in the folder whose context menu was used.
For example, if you have created a folder template with special settings
for fonts, colors, etc., you can put a shadow of it into a configuration
folder, and when you select its corresponding menu item from a folder's
context menu, a new folder will be created in this folder, just as if you
had dragged a folder from the template.
See "Creating objects with XFolder" for more.
4. All other objects will simply be opened when their corresponding menu
item was selected. This includes shadows of program objects, shadows of
folders, "real" files, shadows of them, and so on.
For example, you can put a shadow of your favorite data file (e.g. "To-do
list") into the context menus. Another example is the shadow of the OS/2
System notebook in the "XFolder" submenu, with which you can access the
XFolder Global Settings.
5. Starting with version 0.50, you can insert menu separators by putting a
program title with the exact title of "---" into a configuration folder.
See the next page for details.
Note that the "~" character within an object's title turns into an underlined
character in the context menu, allowing for keyboard shortcuts.
As simple it may seem, the combined folder/object approach of the XFolder
configuration folder is very powerful. You can add all your favorite programs,
templates, and data files here which make sense to be executed in any
directory.
If you know how to program REXX, you're even better off: you can write your
own scripts that manipulate the WPS, create program objects for them and put
these in the configuration folders. On the "Frequently Asked Questions" page,
you can find out more about this.
ΓòÉΓòÉΓòÉ 5.4. Extra Features with Program Objects ΓòÉΓòÉΓòÉ
While you can put any object into the configuration folders, the use of program
objects is recommended for starting programs from context menus. I mean "real"
program objects, as opposed to shadows of your existing program objects.
The reason for this is the following: Whenever XFolder starts a program object
in the configuration folders (that is, when you select the respective menu item
in a context menu), it can perform a few tricks on them.
The tricks are the following:
1. If the startup directory of the program object is empty, XFolder will
temporarily insert the directory of the folder whose context menu was
used therein. This means that you can start the same program from all
folders' context menus, but with a variable startup directory, being the
directory of the folder whose context menu was used.
Take the default configuration again: the four command line objects have
empty startup directories. This is why you can start command lines "in"
the folder whose context menu was used.
If you wish to disable this behaviour, simply specify a startup directory
in a program object (e.g. "C:\"), and XFolder will leave it alone.
Instead, it will always use the startup directory which you have
specified.
2. If the parameter list of the program object does not contain a trailing
"%" sign, the directory of the folder you used will be passed as a
parameter to the program.
This is used by the "Netscape" menu entry of the default configuration:
this way, Netscape will display the contents of the folder which it was
called from.
You can disable this feature completely in the XFolder Global Settings.
If you wish to disable this behaviour for one menu item only (not all
programs can handle directories as parameters), add a "%" sign to the
"Parameters" list of the respective program object. XFolder will omit
passing the additional parameter. This is the case, for example, with the
four command line objects of the default configuration.
Examples: Putting only "%" in the parameters list will not pass any
parameters at all; putting "text.txt %" in the parameters list will
always pass "text.txt" without the folder name as a parameter.
I know this way of configuring XFolder's behaviour is not very intuitive,
but I implemented it for compatibility with the WPS's behaviour when
calling context menu items that were added with the "Menu" page in the
settings notebook. I then found out that it works with Netscape as well,
so even better.
3. You can append the contents of the clipboard to the parameter list of the
clipboard by putting a "%**C" symbol into the parameter list. This can
appear at any position of the parameters. This is case-sensitive; "%**c"
(in lower case) will NOT work.
Example: Path and filename = "e.exe"; parameters = "%**C" will start the
system editor, interpreting the contents of the clipboard as a file name.
Note that the contents of the clipboard will be truncated so that the
maximum length of the parameter list will not be exceeded. With OS/2, the
maximum path length is 260 characters. This limitation avoids passing 64
K to the program, in the worst case.
4. If the program title contains a "~" character (which you have probably
inserted to add a keyboard shortcut, as described on the previous page),
XFolder will remove it when starting the program. You can also switch off
this behavior in the XFolder Global Settings, where you will find
additional help on this.
5. You can now (V0.51) insert a separator into a menu by specifying "---"
(exactly, three dashes) in a program object's title. (A separator is a
horizontal line to optically separate groups of menu items.) In this
case, XFolder will ignore the program object's settings (such as the
executable, parameters etc.) and simply insert a separator into the menu.
This works for the main context menu as well as submenus.
Note: If you are using the (outstanding) WPTOOLS by Henk kelder, you
should enter a valid program executable even with these separator program
objects, or otherwise CHECKINI will keep complaining that the object is
not valid. Even though an executable exists, XFolder will then only
insert a menu separator.
XFolder implements the features 1.-4. by actually changing the program
object's settings for a tenth of a second: the settings are changed, the
program object is opened, and then the settings are reset to the original
values.
Please note that XFolder only performs these described actions on "real"
program objects in the configuration folders, NOT on shadows pointing to other
program objects. I am not planning to implement this behaviour on shadows too,
because I do not intend to modify objects which are situated elsewhere in your
desktop hierarchy, ouside the configuration folders.
As a consequence, you ought to put COPIES of your program objects into the
configuration folders, instead of creating shadows for them. Again: shadows of
program objects are opened too, but without changing any settings.
Please consult the "Frequently Asked Questions" section for a few more hints
on creating program objects.
ΓòÉΓòÉΓòÉ 5.5. The Order of Menu Items ΓòÉΓòÉΓòÉ
Since V0.60 you may (finally) change the order of menu items within a context
menu or one of its submenus. (Previously, this was really tiresome to
accomplish.)
Simply open the XFolder Configuration Folder or one of its subfolders
either in Details view
or in Icon view; for this, however, you will have to enable "Flowed" or
"Nonflowed" on the "Display" page in this folder's settings notebook.
(This is more quickly to accomplish with the XFolder "Small icons in icon
and tree views" menu items, by the way.)
If you now change the order of the objects in this folder with the mouse (drag
and drop) and then close this configuration folder, you will see that the
order of menu items has changed accordingly.
ΓòÉΓòÉΓòÉ 5.6. The "Folder Content" Functions ΓòÉΓòÉΓòÉ
Starting with V0.70, XFolder offers you to view the contents of folders from
the context menus without having to open them. This can be very handy if you
need to open a single file from a folder, but you do not want to open a dozen
folders in order to reach it.
Here's an example (the XFolder development directory from the author's
harddisk):
As you can see, the content of the "XFolder" folder is displayed; the
subfolders in this folders lead to subsequent submenus.
The "Folder content" menus behave just like the WarpCenter's do: if you click
on an item, its default view will be opened. If you click on a folder menu
item, another submenu with the contents of this folder will be opened; if you
click on it with mouse button 2, the WPS folder will be opened as a window
instead.
The "Folder content" functions are used in two different contexts:
For one, you can decide to always have the contents of the folder whose
context menu you have opened displayed in this very context menu. The
respective context menu item is then called "Folder contents" (how
surprising). As a result, the "Folder contents" menu is different for
each context menu.
In the above screenshot, this can be seen with the "Ordnerinhalt" menu
item (which is German for "Folder content"; sorry, I was just too lazy to
do a second screenshot).
The folder content menus can be switched on and off on the "Context
menus" page in the new "Workplace Shell" object.
Second, you can declare a certain folder to be one of your "favorite"
folders. This can be done on the "XFolder" page in every folder's
Settings notebook. All "favorite" folders will be displayed in all
context menus; you can, for example, switch this feature on for the
Desktop, and you will be able to reach the Desktop and everything that
resides on and below its folder hierarchy from all context menus. (This
works for the Drives folder also, by the way.)
In the above screenshot, the "frequent" menu item is a folder on my
Desktop in which I put things I access frequently. I have declared this
folder to be my only "favorite" folder, so everything I put in this
folder will appear in all context menus.
ΓòÉΓòÉΓòÉ 5.7. "Select by name" ΓòÉΓòÉΓòÉ
XFolder now (V0.70) allows you to select only some objects in a folder
according to a typical specification.
This is done by using the "Select by name" menu item, which resides in the
"Select" menu on Warp 3; on Warp 4, this menu item can be found in the "View"
menu.
You then get a dialog window where you may enter a file specification such as
"*.txt" and select or deselect files according to this specification.
Per default, XFolder also defines Ctrl+S as a folder hotkey for this function.
ΓòÉΓòÉΓòÉ 5.8. The "Snap to Grid" Feature ΓòÉΓòÉΓòÉ
XFolder can add a "Snap to grid" menu item to all folder context menus. When
selecting it, all objects in the folder will "jump" onto an invisible grid.
The "Snap to grid" feature is a bit hard to explain. Just think of a folder
whose objects are pretty messed up: how many times have you found yourself
trying to align those objects below or next to each other?
The "Arrange" menu item doesn't help here, since it reorders the objects
completely. Now imagine a set of invisible equidistant lines spread over the
folder window, which attract the objects therein when you select "Snap to
grid".
The "Snap to grid" menu item will only be visible when the following applies:
1. the folder must be open;
2. the folder must have the no-grid icon view (the default for most
folders); it will not be visible for folders in details or tree view or
if you have changed the icon view to "flowed" or "non-flowed" in the
folder's settings dialog;
3. the folder must not have the "Always maintain sort order" setting
enabled.
You can specify the grid's origin and spacing on the "Grid" page in the new
"Workplace Shell" object.
Note: With V0.81, the "Snap to grid" behavior has changed slightly. Per
default, XFolder will only let the currently selected objects snap on the
grid. However, if you hold down the Shift key while selecting that menu item,
all items will be snapped (like in previous versions).
ΓòÉΓòÉΓòÉ 5.9. The "Copy Filename" Feature ΓòÉΓòÉΓòÉ
Since V0.60, XFolder can copy the filename of any file into the clipboard after
you select "Copy filename" from the object's context menu. Note that this
applies to all file-system objects, not just folders; however, this does not
apply to abstract WPS objects (shadows, program objects etc.), because these
just don't have a filename.
If you select "Copy filename" without holding down the "Shift" key, XFolder
will only copy the filename itself.
If you hold down the "Shift" key while selecting "Copy filename", XFolder will
copy the fully qualified filename, i.e. the drive letter, the path and the
filename itself.
Assuming that the folder in the above screenshot resides on the Desktop, "Copy
filename" would copy "C:\Desktop\Folder" into the clipboard, if you hold down
the "Shift" key, "Folder" otherwise.
This now (V0.80) also works when you have more than one object selected in the
folder. In this case, the filenames of the selected objects are all copied to
the clipboard, separated by spaces.
XFolder now also defines Ctrl+Insert as a default folder hotkey for copying the
filename(s) of the currently selected object(s).
You can disable the menu item and change the hotkey(s) in the Global Settings.
ΓòÉΓòÉΓòÉ 6. Folder Features ΓòÉΓòÉΓòÉ
Full path in window titles
Extended sort options
Auto-scroll Tree views
"Quick Open" folders
Folder hotkeys
Individual settings for the Desktop and folders
ΓòÉΓòÉΓòÉ 6.1. Show Full Path in Folder Title ΓòÉΓòÉΓòÉ
XFolder can now (V0.40) display the full path of the folder in the title of an
open folder window.
Example:
You can even tell XFolder not to exceed a certain number of characters when
adding the folder path to the title. XFolder can then truncate the path display
like this:
You can configure this feature in the XFolder Global Settings dialog.
ΓòÉΓòÉΓòÉ 6.2. Extended Sort Options ΓòÉΓòÉΓòÉ
XFolder now (V0.70) can also enhance the "Sort" functions of the Workplace
Shell.
Important note: In order to avoid confusion, the sort extensions are disabled
by default. You can enable them on the new "Sort" page in the Global Settings.
Warning: After you enable the new sort functions, your previous folder sort
settings will get lost successively as the WPS activates folders.
Unfortunately, this is inevitable, because IBM has barely documented at all how
the WPS sort functions are working internally. As a result, you'll have to
reconfigure the sort settings for certain folders (which will be explained
below).
The new XFolder sort features are:
Finally, there are global sort settings, which previously did not exist
in the WPS. While it was possible to set a number of folder settings
globally, until now sorting could only be influenced for each individual
folder, which was quite annoying. XFolder introduces a "Sort" page to the
"System" object for global sort settings, which can be overridden
individually for each folder.
XFolder also gets rid of some of the strange sort settings which nobody
used anyway, such as the "sort class". (This setting did not make much
sense, because WPFolder is the only class which introduces meaningful
sort criteria anyway.)
There is a new item in the "Sort" context submenu for enabling the
"Always maintain sort order" setting quickly.
You can quickly change the default sort criterion for a certain folder by
opening the "Sort" context submenu and holding down the "Shift" key while
selecting a sort criterion.
Most importantly, XFolder introduces three new options to the "Sort" menu
of every folder, which are "Sort by object class", "Sort by extension"
and "Sort folders first":
1. The "Sort by object class" feature sorts the folder content
according to the classes of the contained objects, as they are
visible in the third column of a folder's Details view.
2. The "Sort by extension" option sorts the folder contents by file
name extension, i.e. the characters after the last dot in the object
title. For example, ".BMP" files would be sorted before ".HTM",
".HTML" and ".ICO" files, in this order. If two files have the same
extension, they are sorted alphabetically within their extension
group. Although file extensions make sense mostly for file-system
objects, abstract objects are sorted in this way too.
3. The "Sort folders first" sorts the folder alphabetically, but puts
all folder objects on top of the list. Shadows of folders are
treated just like regular folders.
Per default, XFolder defines "Ctrl+E" as a folder hotkey for the "Sort by
extension" function. You may also set up a hotkey for the "Sort folders first"
function in the Global Settings, if you wish.
ΓòÉΓòÉΓòÉ 6.3. Auto-Scroll Tree Views ΓòÉΓòÉΓòÉ
XFolder can now (V0.60) monitor open Tree views of folders and automatically
scroll down the folder window if neccessary.
You have probably encountered this situation a zillion times: you wish to
expand a tree of a folder Tree view which is visible at the bottom of the
folder window.
Normally, if you click on the "plus" sign next to the "dll" directory, the tree
will expand, but you will not be able to see its contents. This default OS/2
behavior is really tiresome, because almost every other time that a Tree view
is expanded, you'll have to scroll down manually to actually see the contained
objects.
XFolder will now automatically scroll down the folder window if the newly
appearing items begin to appear outside the currently visible window area:
XFolder does this by internally monitoring the Tree view in the background
after you click on the "plus" sign and then, as soon as the WPS is done
populating the folder, automatically scrolls down. This "monitoring" does not
cause an additional CPU load, because XFolder simply intercepts a single window
notification message internally. (For this reason it is totally inconceivable
that IBM has not implemented this behavior already.)
XFolder will make the bottom-most item that was displayed visible, unless the
tree below the folder you clicked on contains too many items to fit into the
window. In this case, XFolder will scroll the item which you expanded to the
very top of the visible window area.
It is probably the best thing to try out this function yourself, in order to
get used to it. The OS/2 directory is a good candidate for this. Although this
behavior might seem confusing at first, I'm sure that after a while, you'll
probably don't want to miss it.
You can still disable this feature in the Global Settings.
ΓòÉΓòÉΓòÉ 6.4. "Quick Open" Folders ΓòÉΓòÉΓòÉ
Starting with V0.80, you can tell XFolder to prepare certain folders to display
their contents more quickly when you open them. After the WPS has booted,
XFolder will go through all folders which have this feature enabled and read in
their contents. If you then open one of these folders, its contents will be
displayed almost immediately.
In order to enable this feature, open the Settings notebook for the folder for
which you wish to enable this feature. On the "XFolder" page therein, check the
"QuickOpen" flag.
After the next WPS startup, XFolder will then read in the contents of that
folder and load all the icons. Note that XFolder only does this right after the
WPS has booted, so changing the "QuickOpen" flag of a folder has no immediate
effect.
Depending on how many folders have the "QuickOpen" flag set, WPS bootup might
take quite a while. Reading all the icons does not become faster by using this
feature. The only difference is that the icons are read earlier.
ΓòÉΓòÉΓòÉ 6.5. Folder Hotkeys ΓòÉΓòÉΓòÉ
XFolder can now (V0.50) add new keyboard accelerators (or hotkeys, or
shortcuts, whatever terminology you prefer...) for use within folders. Note
that these keys ONLY work when a folder has the focus. They do not work when
any other window is currently active.
All the following keys are just shortcuts to certain menu items.
The default configuration adds the following keys for use within folders:
F5 will refresh the folder contents.
Ctrl+A will select all objects in the folder.
Ctrl+D will de-select all objects in the folder.
Ctrl+S will select objects by name.
Ctrl+N will sort the folder contents by name.
Ctrl+W will sort the folder contents by last write date.
Ctrl+Y will sort the folder contents by type.
Ctrl+Z will sort the folder contents by size.
Ctrl+E will sort the folder contents by file name extension.
Ctrl+Shift+D will open the Details view of the same folder.
Ctrl+Shift+I will open the Icon view of the same folder.
Backspace will open the parent folder (i.e. the folder in which the
currently open folder resides itself).
Shift+Backspace will open the parent folder and close the current folder
also.
Ctrl+Shift+S will open the settings of the current folder.
Ctrl+Insert will copy the filename(s) of the currently selected object(s)
in the folder to the clipboard.
The above keys are part of the XFolder default configuration. You can quite
freely re-assign hotkeys in the Global Settings, where you will find more than
30 configurable items, including many OS/2 Warp 4 menu items. Press the "Help"
button on the settings page for details.
ΓòÉΓòÉΓòÉ 6.6. Individual Settings for the Desktop and Folders ΓòÉΓòÉΓòÉ
While the Global Settings affect all folders at once (hence the name), some
settings may also be changed individually for each folder.
To accomplish this, XFolder adds a new notebook page to every folder's settings
notebook, in which you may override what is specified in the Global Settings.
This means, if you configure a certain setting for a single folder, for this
folder the Global Settings have no further effect.
In addition, XFolder adds a new notebook page to the Desktop only. On this page
you may configure the Desktop's menu items, the "Restart WPS" feature, and the
eXtended Shutdown procedure. By pressing the "Action" button on this page, you
may define your own user reboot actions for the eXtended Shutdown.
All of these settings are throughly explained on several help panels which
appear when you press the "Help" button on one of these pages.
ΓòÉΓòÉΓòÉ 7. Folder Status Bars ΓòÉΓòÉΓòÉ
Introduction
Not-so obvious features
Configuring status bars
Common codes for all modes
Common codes for one-object mode
Additional file-system object codes
Additional disk object codes
Additional program object codes
Additional URL object codes
ΓòÉΓòÉΓòÉ 7.1. Folder Status Bars ΓòÉΓòÉΓòÉ
Since V0.70, XFolder offers you the prettiest and most flexible folder status
bars (in my view, that is). These are highly configurable on the "Status bars"
pages in the new "Workplace Shell" object and can also be switched on and off
individually for each folder.
Note: Folder status bars are disabled per default to prevent side-effects in
case you already have software which adds folder status bars. Go to the
"Workplace Shell" object to turn the XFolder status bars on, but make sure to
disable this feature in other software first; otherwise results are
unpredictable.
Status bars operate in three modes, that is, they can display different
information depending on how many objects are currently selected in the folder
container:
"No-objects mode": this applies when no object is selected at all. Per
default, this displays the total number of objects in the folder and
their total size as well as the free space on the folder's drive.
"One-object mode": this applies when exactly one object is selected.
Depending on the class of the object, different information is displayed.
For example, folders and data files will display file system information
(real name, class, size, date, and time).
"Multiple-objects mode": this applies when more than one object is
selected. Per default, this displays the number of selected items, the
total number of objects in the folder and the added size of the selected
items (as in the above screenshot).
For each of these three modes you may configure freely what will be displayed
in the status bars. This is explained in detail on the "Configuring status
bars" page.
ΓòÉΓòÉΓòÉ 7.2. Not-So Obvious Features ΓòÉΓòÉΓòÉ
The general appearance of status bars is determined by the first "Status bars"
page in the in the "Workplace Shell" object. You may switch between four
different status bar styles. Just try out which one you like best; if you
change settings there, all currently visible status bars on your system will be
immediately updated.
You may also drop fonts and colors from the respective palettes in the OS/2
System Setup folder. If you drop a font or a color on a status bar, all
currently visible status bars on your system will be updated. The font and
color settings will be saved.
As usual, when dropping colors, holding down the "Ctrl" key will change the
foreground (text) color; otherwise the background color will be changed.
There are two handy mouse features with folder status bars:
1. If you double-click on a status bar, the folder's settings notebook will
be opened. (New with V0.84.)
2. If you click on a status bar with mouse button 2, the folder's context
menu will be opened.
ΓòÉΓòÉΓòÉ 7.3. Configuring Status Bars ΓòÉΓòÉΓòÉ
Page 2 of the "Status bars" pages in the "Workplace Shell" object lets you
determine in detail what information will be displayed in status bars.
As explained in the Status bar introduction, status bars display different
information depending on whether no object, exactly one object or several
objects have been selected in a folder.
For each of these modes you may define what exactly will be displayed. XFolder
uses certain (not very intuitive, however flexible) codes to display folder
information.
It is recommended to have both the status bar settings page and a sample folder
open while experimenting with these settings.
All numeric output is formatted according to your settings in the "Country"
object in your System Setup folder. That is, XFolder uses those settings to
determine the thousands separator for values greater than 1000 and the display
format for date and time output.
The status bar codes are different depending on the mode in which a status bar
currently operates:
Common codes for all three modes: see this page
Additionally, in "one-object mode", XFolder can now (V0.80) display
different information depending on the object class that the selected
object belongs to. Certain object classes have been extended to be able
to display status bar information and translate additional codes.
On the status bar settings page there is a button with which you may
select the object class for which you wish to set status bar information
in "one-object mode".
Currently, five classes support status bar information: WPObject,
WPFileSystem, WPDisk, WPProgram, and (on Warp 4) WPUrl.
Note that the following codes are all supported in addition to those for
all modes:
- Common codes for all objects in one-object mode: see this page
- Additional codes for file-system objects in one-object mode: see
this page
- Additional codes for disk objects in one-object mode: see this page
- Additional codes for program objects in one-object mode: see this
page
- Additional codes for URL objects in one-object mode: see this page
ΓòÉΓòÉΓòÉ 7.4. Common Codes for All Modes ΓòÉΓòÉΓòÉ
The following codes work in all three modes:
$c
number of currently selected objects
$C
total number of objects in folder
$sb
total size of selected objects in bytes
$sk
total size of selected objects in kBytes, i.e. bytes / 1000
$sK
total size of selected objects in KBytes, i.e. bytes / 1024
$sm
total size of selected objects in mBytes, i.e. bytes / 1000000
$sM
total size of selected objects in MBytes, i.e. bytes / 1048576
$Sb
total size of folder content in bytes
$Sk
total size of folder content in kBytes, i.e. bytes / 1000
$SK
total size of folder content in KBytes, i.e. bytes / 1024
$Sm
total size of folder content in mBytes, i.e. bytes / 1000000
$SM
total size of folder content in MBytes, i.e. bytes / 1048576
$fb
free space on drive in bytes
$fk
free space on drive in kBytes, i.e. bytes / 1000
$fK
free space on drive in KBytes, i.e. bytes / 1024
$fm
free space on drive in mBytes, i.e. bytes / 1000000
$fM
free space on drive in MBytes, i.e. bytes / 1048576
$x(xxx)
Left-oriented tabulator: print the following information at X
position "xxx" (relative to the left border of the status bar).
Example: $x(300)$sK will always print the total size of the selected
objects at X position 300.
$x(-xxx)
like before, but relative to the right border of the status bar.
Example: $x(-150)$sK will print the total size of the selected
objects at X position 100, if the status bar is currently 250 pixels
wide.
$x(xx%)
like before, but the X position will be calculated using "xx" as a
percentage relative to the current width of the status bar.
Example: $x(50%)$sK will always print the total size of the selected
objects in the center of the status bar.
ΓòÉΓòÉΓòÉ 7.5. Common Codes for One-Object Mode ΓòÉΓòÉΓòÉ
All objects support the following codes in one-object mode (in addition to the
codes for all modes):
$t
object title
$w
WPS class default title, i.e. the one which is visible in the third
column of folder Details views (e.g. "Data file")
$W
WPS internal class name (e.g. "XFldDataFile")
ΓòÉΓòÉΓòÉ 7.6. Additional File-System Object Codes ΓòÉΓòÉΓòÉ
File-system objects (WPFileSystem class, i.e. folders and data files) support
the following additional codes:
$r 1)
object's "real name"
$y 1)
object type (.TYPE Extended Attribute)
$a 1)
object filesystem attributes; this will insert four characters
("ahrs") for the archived, hidden, read-only and system filesystem
attributes, with the ones capitalized which are set for a file (e.g.
"Ahrs")
$D 1)
object last write date
$T 1)
object last write time
$Eb 1,2)
Extended Attribute size in bytes
$Ek 1,2)
Extended Attribute size in kBytes, i.e. bytes / 1000
$EK 1,2)
Extended Attribute size in KBytes, i.e. bytes / 1024
Notes:
1) These codes will only display the data which is held in the internal WPS
buffers. This means when this data changes, e.g. because a file has been
altered by some other program, the status bar information will only change
when the WPS buffer data is refreshed, for example if you select "Refresh
now".
2) The WPS has always had a bug due to which an extended attribute size larger
than 32767 will always return 32767, although a size of 64 KB is technically
possible. As a result, XFolder will also display this wrong value.
ΓòÉΓòÉΓòÉ 7.7. Additional Disk Object Codes ΓòÉΓòÉΓòÉ
Disk objects (WPDisk class, i.e. the objects in the "Drives" folder) support
the following codes in addition to the codes for all objects:
$fb
free space on drive in bytes
$fk
free space on drive in kBytes, i.e. bytes / 1000
$fK
free space on drive in KBytes, i.e. bytes / 1024
$fm
free space on drive in mBytes, i.e. bytes / 1000000
$fM
free space on drive in MBytes, i.e. bytes / 1048576
$F
file-system type (FAT, HPFS, CDFS, ...)
Notes: If you are using these keys, you should make sure that you have OS/2's
hardware error messages disabled, because otherwise you'll get a "drive not
ready" message every time no disk is inserted. The new "OS/2 Kernel" object
lets you do this on the "Errors" page.
Note also that the $f codes are redefined for disk objects. Normally, they
display the free space on the drive on which the folder resides, which, for
the "Drives" folder, would of course always return the same value for the
drive on which your Desktop resides. Thus this code has been redefined for
drive objects.
ΓòÉΓòÉΓòÉ 7.8. Additional Program Object Codes ΓòÉΓòÉΓòÉ
Program objects (WPProgram class) support the following codes in addition to
the codes for all objects:
$p
executable program file (as specified in the Settings)
$P
parameter list (as specified in the Settings)
$d
working directory (as specified in the Settings)
ΓòÉΓòÉΓòÉ 7.9. Additional URL Object Codes ΓòÉΓòÉΓòÉ
Starting with V0.84, URL objects (WPUrl class) support the following codes in
addition to the codes for all objects and the codes for file-system objects:
$U
the URL which is stored in the URL object
ΓòÉΓòÉΓòÉ 8. Extended Shutdown ΓòÉΓòÉΓòÉ
Restart WPS
Extended Shutdown
Startup and Shutdown folders
Shutting down from the OS/2 command line
ΓòÉΓòÉΓòÉ 8.1. Restart WPS ΓòÉΓòÉΓòÉ
XFolder can now (V0.60) add a "Restart WPS" item to the context menu of the
Desktop.
After selecting "Restart WPS", a dialog box similar to the one of the Extended
Shutdown will appear. The difference is that after all windows have been
closed, not the whole computer is restarted, but only the Workplace Shell
Process (PMSHELL.EXE).
To understand the difference it might be helpful to know that the OS/2 user
interface is structured into three "layers", so-to-say, which sit on top of
each other:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé Workplace Shell (WPS) Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé Presentation Manager (PM) Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé OS/2 Kernel Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
The OS/2 Kernel provides the basic functionality of the operating system, such
as device access and multitasking. Without it, nothing would work on your
system.
The Presentation Manager (PM) is responsible for the graphics on your system,
such as windows, icons, menus, pictures, and a few more non-graphical things,
such as INI files. OS/2 can run text-mode applications (e.g. the OS/2 command
line, CMD.EXE) without PM, but all other applications require that PM be
running. A typical PM application is Netscape, for example.
The Workplace Shell (WPS) is just another, however very complex PM application.
It is responsible for displaying folders, starting programs when you
double-click on their icons, associating files to programs, in short:
everything you see after your OS/2 has finished booting. This is the context in
which XFolder is running.
The "Restart WPS" menu item now terminates the topmost layer of the
aforementioned three only, the Workplace Shell. This takes a lot less time than
rebooting your whole computer, because PM and the Kernel need not be reloaded
and initialized.
Restarting the WPS can be helpful when your system has become really slow (for
some reason, at least judging from my personal experience, the WPS eats up more
and more memory when you work with files a lot) or if you have installed
software which changes WPS classes.
Important notes:
Please keep in mind that this is not the way of restarting the Workplace
Shell that IBM intended when developing it. "Restart WPS" forces the WPS
to restart by simply terminating it. Since XFolder is part of the WPS
process, it can simply exit. OS/2 will then restart this process
automatically. The result is almost the same as if the WPS had crashed
and was restarted, although the WPS data will be saved before restarting.
On my system, the icons of executables in folders get scrambled after a
WPS restart. This applies to all program objects and executable files
which are not assigned an individual icon to (via their Settings
notebooks). Either icons get completely lost or wrong icons are
displayed. This is a bug in the Presentation Manager, on which I have no
influence. After a complete reboot, the correct icons are restored.
Neither Presentation Manager nor CONFIG.SYS settings are re-read upon
restarting the WPS. If these settings have changed, a WPS restart will
not recognize these changes. Reboot instead.
As a general rule, the more WPS classes you have installed, the more
problems are likely to arise when restarting the WPS. This can be due to
many reasons, which I don't fully understand, but for one certain
third-party WPS classes do not seem to clean up allocated resources
properly when the WPS is terminated. Second, the SOM kernel does seem to
get confused sometimes with WPS class replacements, and some parts of the
WPS then crash about 20 seconds after the Desktop has been populated.
In these cases, you will be reported fairly random crashes in certain
DLLs, which are just symptoms of something going wrong internally. If
this happens, you will have to reboot. Candidates for these random DLL
crashes that I have unveiled are INSTALL.DLL (contains WPInstall),
WPPRINT.DLL (contains the printer and spooler classes), and also the
WorkFrame which comes with the various IBM compilers. (Amusingly, all
those DLLs have been programmed by IBM.)
Depending on your system, the number of WPS restarts you may successfully
execute will be limited. Some users have reported that this works only
once, on my system I've successfully restarted the WPS many times (about
30) before the system crashed. (This sounds like many times, but when
programming XFolder, this is neccessary, unfortunately.)
You can turn this feature off on a new settings page of the Desktop's Settings
notebook.
ΓòÉΓòÉΓòÉ 8.2. Extended Shutdown ΓòÉΓòÉΓòÉ
Since V0.60 XFolder can also improve the shutdown procedure of OS/2.
Important note: XShutdown is disabled per default in order to prevent
confusion. You will need to enable XShutdown in the Settings notebook of your
Desktop.
After enabling XShutdown, selecting "Shutdown" from the Desktop's context menu
will start XFolder's shutdown procedure instead of OS/2's shutdown.
After selecting "Shutdown", a dialog box similar to the following will pop up:
The main new features of XShutdown are:
You can choose to automatically reboot your computer after shutdown has
completed.
You may even create your own reboot options, e.g. reboot to a certain
Boot Manager partition directly. This is explained in detail when you
press the "Actions" button on page 1 of the "XDesktop" pages in the
Desktop's settings notebook.
XShutdown can be cancelled.
XShutdown will display the progress of the shutdown procedure, and if
some application "hangs", i.e. it cannot be closed, you can choose to
skip it and continue the shutdown sequence without waiting for this
application to close:
The automatic reboot requires that DOS.SYS be installed through CONFIG.SYS. On
Warp 4, this is done per default. On OS/2 Warp 3, you might need to add the
following line to CONFIG.SYS:
DEVICE=X:\OS2\BOOT\DOS.SYS
with X: being your OS/2 boot drive.
You can configure (and turn off) the eXtended Shutdown on a new settings page
of the Desktop's Settings notebook.
ΓòÉΓòÉΓòÉ 8.3. Startup and Shutdown Folders ΓòÉΓòÉΓòÉ
XFolder can now (V0.70) handle separate startup and shutdown folders.
Note: The startup and shutdown folders are not automatically created by the
install program to avoid confusion. Please go to page 2 of the "XDesktop"
settings page in the Desktop's settings notebook to create them manually.
If XFolder finds the XFolder Startup Folder upon WPS startup, it will process
its contents in a way much similar to what the WPS does with its own startup
folder. The main differences are:
You may set a certain time which XFolder will wait in between starting
objects. The conventional startup folder sometimes leads to problems if
you have many objects in there, which are normally all started at the
same time, sometimes causing the WPS to hang at startup. The XFolder
Startup Folder's delay may also be set on "XDesktop" settings page 2.
You will be able to watch the progress of the startup process in a
separate window (which can also be turned off on "XDesktop" settings page
2, if you don't like it).
Startup can be cancelled while it is running.
Startup can completely be skipped by holding down the "Shift" key until
the WPS has displayed the Desktop completely.
The XFolder Startup Folder is also processed after a WPS restart, while
the regular WPS startup folder is not. This applies only if you had
selected the respective checkbox in the "Restart WPS" confirmation dialog
box.
The XFolder Startup Folder now (V0.80) has a "Start folder content" menu
item which allows you to have its contents started even after the WPS is
up.
On the other hand, the XFolder Shutdown Folder will be processed before the
eXtended Shutdown (and not before the regular shutdown). As apposed to with
the Startup Folder, you may not set a delay here, but XFolder waits before
starting the next object until the currently opened object has been closed
again. Only if all objects started from the Shutdown Folder have been closed,
the eXtended Shutdown actually begins.
The Shutdown folder can be useful if you need to have certain programs
executed before turning off your system. (I have no use for this, but
apparently many people have.) You could, for example, create some REXX script
which does some cleanup before shutting down, such as properly logging off
your network, deleting TEMP files, or whatever you can think of.
For both the XFolder Startup and Shutdown folders, you may define the order in
which objects are started. This works just the same way as described on the
respective page for the XFolder Configuration Folders.
ΓòÉΓòÉΓòÉ 8.4. Shutting Down from the Command Line ΓòÉΓòÉΓòÉ
Starting with V0.80, XFolder contains a little program in the BIN subdirectory
of the XFolder installation directory to initiate the eXtended Shutdown from
the command line. This program is called XSHUTDWN.EXE.
Please note that this program alone is not capable of shutting down your
system. All it does is to tell XFolder that and how shutdown should be
performed. As a result, it will only function if:
XFolder V0.80 or greater is installed;
the WPS is up and running
and no other errors occur. ;-)
On the other hand, you can put XSHUTDWN.EXE in any directory you like, for
example some directory along your PATH, to be able to access XShutdown from
any command line. XSHUTDWN.EXE does not require the XFolder DLLs or any other
XFolder resource, because it contacts XFolder via inter-process communication.
XSHUTDWN.EXE overrides most of the settings you have specified for XShutdown.
If you simply call it without parameters, certain default values will be used,
no matter what your WPS settings are for XShutdown.
However, you can specify something different on the command line (these
switches will not affect your WPS settings for XShutdown, but only one
execution of it):
-r
will cause XShutdown to reboot your computer, using the built-in
reboot function. The default is not to reboot.
-R <cmd>
will cause XShutdown to reboot your computer using the user-defined
reboot action <cmd>.
-v
will auto-close VIO windows. Default is not to close them.
-a
will show an animation when XShutdown is done. Default is not to
show the animation.
-f
will show no confirmation window. Default is to have XShutdown
confirmed.
-l (new with V0.83)
will turn on shutdown logging in the XSHUTDWN.LOG file.
-w (new with V0.84)
will do a WPS restart instead of a "real" shutdown. This can be used
in conjunction with -f.
-W (new with V0.84)
will also do a WPS restart instead of a "real" shutdown, but also
close all open windows and reuse the startup folder after the WPS
restart. This can be used in conjunction with -f and -v.
ΓòÉΓòÉΓòÉ 9. The New "System" Objects ΓòÉΓòÉΓòÉ
Introduction
Global settings in the "Workplace Shell" object
The WPS class list
The OS/2 Scheduler
OS/2 memory management
File-system caches
ΓòÉΓòÉΓòÉ 9.1. Introduction ΓòÉΓòÉΓòÉ
Starting with V0.80, XFolder separates the default OS/2 "System" object in the
"System setup" folder into two objects:
The new "Workplace Shell" object contains those pages from the old
"System" object which deal with the Workplace Shell only. I felt these
are not really "System" settings and deserve a separate object.
XFolder also adds most of its own settings pages here, because these
mostly affect the Workplace Shell. This is described in more detail on
the "Global Settings" page in this reference.
In this object you will also find the "WPS Classes" page with which you
may manipulate the WPS class list. You will find an introduction to WPS
classes on a separate page.
The new "OS/2 Kernel" object contains those pages from the old "System"
object which deal with OS/2's internals, e.g. the "Screen" settings.
In this object you'll find several new settings pages to change a number
of settings in the CONFIG.SYS file in the root directory of your boot
drive. Since these settings are a bit hard to remember and since
erroneous settings in this file might even lead to OS/2 not booting any
more, XFolder tries to help you by setting this up automatically.
On each of these new settings pages, which will be explained in more
detail on the following pages, you will find a button called "Update
CONFIG.SYS" instead of the usual "Undo" and "Default" buttons. Pressing
this button will cause the CONFIG.SYS file to be rewritten according to
the settings you've changed.
The different settings are explained in detail when you press the "Help"
button on one of the settings pages. Please read the following pages to
obtain a general introduction of what these settings do with certain
parts of the OS/2 kernel:
- The OS/2 Scheduler
- OS/2 memory management
- File-system caches
The old "System" object continues to work, in case other WPS enhancers try to
insert anything into this object. Such extensions will also appear in the new
"OS/2 Kernel" object, which inherits the "System" characteristics.
Please note that you should not open the old "System" object and one of the
new objects together to change settings. The settings pages are not prepared
for this, and this might mess up the WPS settings.
ΓòÉΓòÉΓòÉ 9.2. XFolder Global Settings ΓòÉΓòÉΓòÉ
In the XFolder Global Settings, you can make XFolder behave differently. Here
you will find settings which affect XFolder in general, such as its language
support, as well as settings which will affect your computer as a whole. This
is why they're called "global settings", as opposed to individual folder
settings, which are explained on a separate page.
With XFolder V0.50, the Global Settings were moved into OS/2's System object,
which resides in the OS/2 System Setup folder. I believed this was a good place
to set up XFolder also, because most of the System folder settings can also be
found in this object.
System object on Warp 3
System object on Warp 4
Now, with XFolder V0.80, because there were finally too many settings pages in
the "System" object, I have decided to split the "System" object into two
objects. Please see the respective pages in the "Introduction" section for
more.
XFolder adds the settings pages for its Global Settings to the new "Workplace
Shell" object, which you will find in your "System setup" folder.
New "Workplace Shell" object
The different settings pages are not explained in detail here. You will find
extensive help by pressing F1 or the "Help" button, which exists on every page.
ΓòÉΓòÉΓòÉ 9.3. The WPS Class List ΓòÉΓòÉΓòÉ
In the "Workplace Shell" object, XFolder creates a page called "WPS Classes"
with which you may influence the WPS class list.
In order to use this page successfully, it might be helpful to have a general
understanding of what WPS classes actually do. The following information is
supposed to assist you in this.
You have probably heard many times that the OS/2 Workplace Shell is
"object-oriented". This term suggests that -- opposed to other user interfaces,
such as that of Windows 3.1 -- everything the Workplace Shell deals with is
supposed to be an "object": this applies, for example, to files, folders,
printers, drives etc. All these objects have certain common characteristics,
such as context menus and settings notebooks, but differ in certain others:
e.g. what you see in a context menu is different depending on the selected
object.
In order to better be able to handle these common and different
characteristics, the WPS uses "classes". This term has been taken from
object-oriented programming; a class is, so-to-say, an abstract concept for an
object. A class is therefore not visible on the Desktop, it thus does not
"exist" in the same sense as objects do, but it contains all the information
about properties and capabilities of an object.
Now, every object on the Desktop is a so-called "instance" of a class. The
names of most of the WPS classes start with "WP": for example, a printer is an
instance of the "WPPrinter" class, a folder one of the class "WPFolder", a
datafile of "WPDataFile" and so on.
The reason for the power and flexibility of the class concept is that the
different classes may descend from each other. A class which is descended from
an other class inherits all of its properties and capabilities. It is thus
possible to make certain features of the user-interface more abstract,
according to the old principle: the best way to handle complexity is
abstraction.
One can also apply the concept of classes to things in the "real" world to
clarify it: for example, think of several classes named "Animal", "Mammal",
"Dog", and "Bird". The classes "Mammal" and "Bird" would then be descendants of
the "Animal" class, while "Dog" would descend from "Mammal". Your own dog would
then be an instance of the "Dog" class, so-to-say. Its behavior would be
determined by the classes "Animal", "Mammal", and "Dog" altogether.
The WPS now contains many classes, which make up a very thoughtful inheritance
hierarchy. The following excerpt from the WPS class list may make the general
structure more lucid (where the lines signify inheritance):
WPObject
Γö£ΓöÇΓöÇ WPAbstract
Γöé Γö£ΓöÇΓöÇ WPPrinter
Γöé Γö£ΓöÇΓöÇ WPProgram
Γöé ΓööΓöÇΓöÇ WPShadow
Γö£ΓöÇΓöÇ WPFileSystem
Γöé Γö£ΓöÇΓöÇ WPDataFile
Γöé Γöé Γö£ΓöÇΓöÇ WPIcon
Γöé Γöé ΓööΓöÇΓöÇ WPProgramFile
Γöé ΓööΓöÇΓöÇ WPFolder
Γöé Γö£ΓöÇΓöÇ WPDesktop
Γöé ΓööΓöÇΓöÇ WPStartup
ΓööΓöÇΓöÇ WPTransient
You see that all classes are descendants of WPObject. This is the so-called
"root class" of all WPS classes and contains all the features that are common
to all WPS objects: as mentioned before, e.g. context menus and settings
notebooks. However, the WPObject class is too abstract to have instances of it:
this class was only implemented to have other descendant classes. Objects of
this class will not function.
WPObject has only three descendant classes. All these classes are -- like
WPObject -- only meant to be abstract parent classes, of which no objects
should exist directly.
WPAbstract is the common parent class for so-called "abstract" objects,
i.e. those objects which do not physically exist on disk, but only store
their data in OS2.INI and OS2SYS.INI. The most well-known examples for
this are the above-shown classes WPPrinter for printer objects, WPProgram
for program objects, and WPShadow for shadows. All these objects do
appear in folders, but are not visible if you enter DIR at the command
line, for example.
By contrast, WPFileSystem is the common superclass for objects which do
exist physically in a file system of a drive. There are two subtypes:
folders (WPFolder class) and data files (WPDataFile). In turn, there are
several subclasses of WPDataFile, like WPIcon for icon files (.ICO
extension) and WPProgramFile for program files (e.g. .EXE extension). All
data files for which no more specific subclass exists are instances of
WPDataFile.
Finally, WPTransient is used by the WPS for objects which need not save
their data at all, but only exist temporarily for representing something.
Examples of this are print jobs in a printer object and all the devices
in Warp 4's Hardware Manager.
The WPS also offers an exceptional mechanism called class replacements. This
feature is used extensively by XFolder to hook all of its features into the
WPS by replacing a number of WPS classes. For ecample, the XFolder class
itself replaces the WPFolder class to implement the new folder features. Such
a replacement class must always be a descendant of the class which it should
replace; "replacing" the class then means that the WPS will always use the
replacement class whenever the original class would normally be used. As a
result, if you have XFolder installed, all folders of your system are no
longer instances of WPFolder, but of XFolder. But since XFolder is a
descendant of WPFolder, only those folder characteristics change for which
XFolder provides additional functionality.
All WPS classes reside in dynamic link libraries (file extension .DLL). For
example, most of the default WPS classes reside in the large PMWP.DLL file in
the \OS2\DLL directory. All XFolder classes reside in XFLDR.DLL in the XFolder
installation directory.
Using this feature enables programmers to implement new features for a class
without having to know in detail how a certain class works internally. As was
said before, this is an outstanding and powerful concept, which still only
OS/2 offers.
Please note that if you attempt to deregister certain OS/2 system classes
(which you normally shouldn't do anyway), this will probably have no effect if
the DLL containing that class contains other WPS classes which are still
registered. This applies especially to the OS/2 Warp 4 Multimedia classes: all
those are contained in MMPARTS.DLL, and as long as one of these classes is
still registered, all the multimedia classes will still be loaded, even if
they don't appear in the WPS class list.
Again, this is only a short introduction to the WPS class list. If you open
the "WPS classes" page in the "Workplace Shell" object, all of the classes
installed on your system will be displayed. Regularily, these will be more
than 100 classes, which will appear in a tree structure. Using context menus,
you may register and replace classes here and also deregister classes and undo
class replacements.
Please note that you should be very careful when manipulating the WPS class
list. With the aid of this page you may render your OS/2 system unusable in
seconds!
Press the "Help" button on that page to receive more detailed information.
ΓòÉΓòÉΓòÉ 9.4. The OS/2 Scheduler ΓòÉΓòÉΓòÉ
The Scheduler is a part of the OS/2 kernel and as such works on the lowest
level of the system (for more on this, see the explanations on the Restart WPS
page).
The Scheduler is responsible for multitasking and multithreading in OS/2. Since
you normally have only one processor, but expect several programs to run at the
same time, the Scheduler switches between these programs several dozen times a
second, so that these programs appear to run in parallel.
To understand the different settings on the "Scheduler" page in the "OS/2
Kernel" object, the following explanations about how OS/2 manages processes and
threads might be helpful. On that settings page, you will receive more specific
information on the different settings if you press the "Help" button there.
A thread is the smallest unit for administrating program switches which OS/2
provides. A program can contain several threads, but needs to have at least one
thread. The term "thread" was chosen because within one thread program
instructions are executed sequentially, while between threads you may never be
sure which instruction of one thread will be executed before or after an
instruction of another thread.
Well-programmed OS/2 software uses several threads to ensure that the user gets
a quick response to his input and mouse actions. For example, if you execute a
command in a program which will take a long time, a program should start a
secondary thread for this task. While this new thread is working in the
background, the user interface (on the main thread of the program) is ready
again for new input.
Not-so-well-programmed OS/2 software uses only one thread for both the user
interface and executing tasks. As a result, while executing a task, the user
interface is blocked. A good example of this stems from IBM themselves: in
VIEW.EXE, if you search the whole bookshelf, your computer is blocked
completely until the search is completed. This task would have been perfect for
multithreading.
Now, threads can have different priorities. In general, a thread with a higher
priority gets more processor time that one with lower priority. This is
especially true if several threads actually have work to do, i.e. compete for
processor time; this does not apply for threads that are "blocked" because they
currently have nothing to do. A blocked thread needs no processor time and its
priority thus doesn't matter.
OS/2 is capable of controlling thread priorities in a very refined way. It
differentiates between four priority classes:
1. "Idle time priority" is the lowest priority class. This means that a
thread only gets processor time if no threads of higher priority classes
require it. Such threads are helpful for offloading work that needs to be
done, but can be delayed until the computer has time for it. An example
of such a thread is the XFolder Worker thread which keeps track of the
awake WPS objects on your system. This is fairly time-consuming, but not
time-critical, so it's done with idle-time priority.
2. "Regular priority" is the priority class that most threads use. It is
also the default OS/2 priority class if nothing different is specified.
Between threads of this class, OS/2 dynamically varies priority levels
(more on this below) to make sure that no thread of this class "starves",
i.e. gets no processor time.
3. "Fixed-high priority" is the second-highest priority class for threads
that need to prepare data for "regular" class which needs to be done
quickly without being influenced by the dynamic priority variations for
"regular" threads. This is frequently done for message dispatchers.
4. "Time-critical priority" is the highest priority class for threads that
need to be executed immediately when there's work to do. Such a thread
will be given processor time immediately and will not be interrupted
until its work is done. This priority class is frequently used for
time-critical tasks, for example by network and other communications
software.
Within each priority class one can now set a priority level. This is a value
from -31 to +31 which determines the precedence of a thread within a priority
class.
A few examples:
A "regular" thread with priority level +31 supercedes a "regular" thread
with priority level 0.
Within the "regular priority" class however OS/2 ensures that no thread
"starves", i.e. never gets processor time, by dynamically raising each
thread's priorities after a certain time automatically. This period of
time is determined by the MAXWAIT CONFIG.SYS setting. Moreover, OS/2
raises a thread's priority if it is to receive keyboard input, if the
process of the thread runs in the foreground, or if the thread is
currently accessing devices.
These dynamic adjustments are only then performed if CONFIG.SYS does not
contain the command PRIORITY=ABSOLUTE, which is not recommended. (This is
why you will not find that setting in the "OS/2 Kernel" object.)
A "time-critical" thread with priority level -31 still supercedes a
"regular" thread with priority level +31 because it belongs to a higher
priority class. For this case, the dynamic priority adjustments will have
no effect, because they only affect the execution of "regular" threads.
The same applies, for example, to a "regular thread" with priority level
0 and an "idle-time" thread with priority level +31.
Two threads with exactly the same priority however run "against" each
other, i.e. they alternate with respect to processor usage.
On the other hand side, a process is the OS/2 term for an application which
has been loaded into memory. Each process must have at least one thread. Each
process contains common data as well as controls access to system resources.
Processes are protected against each other in that OS/2 prohibits access to
memory which does not belong to the process attempting to access it ("memory
protection"). By contrast, several threads within a process may all access the
process's memory, because memory is administered on a per-process basis. The
same applies to other system resources such as open files.
ΓòÉΓòÉΓòÉ 9.5. OS/2 Memory Management ΓòÉΓòÉΓòÉ
Memory management is done by the OS/2 Kernel also. It takes care that processes
may acquire memory, protects processes against each other's memory accesses,
and most importantly manages "virtual memory".
"Virtual memory" is the common term for memory which does not exist physically
in a computer, which may however still be allocated by using a swap file on the
hard disk. As a result, an application may use more memory than what is
physically installed in the computer.
If an OS/2 application allocates memory and not enough physical memory is
available, OS/2 takes an area of the main memory (RAM) which is not currently
used and stores it into the swap file on the hard disk. This part of memory is
then available and given to the requesting application.
By contrast, if another application, to which the swapped memory region
belongs, needs the swapped memory again, OS/2 intercepts this memory access
(because the "memory" now resides on the hard disk) and loads that region back
into memory from the hard disk before the application actually accesses it. (If
neccessary, OS/2 will have to swap another memory region to the swap file first
to make room for the memory region which is to be loaded back into memory.)
Naturally, a hard disk is much slower than physical RAM: an average hard disk
might have a throughput of 2 to 7 MB per second, while RAM might have a
throughput of 20 to several 100 MB per second, depending on your processor
speed and on whether that portion of memory has already been loaded into the
processor memory caches.
This is why plenty of RAM is the most important prerequisite for an acceptably
fast OS/2 installation. Even though you may install OS/2 with only 8 MB of RAM
(OS/2 Warp 3 allegedly even with 4), you will then only hear the hard disk
rattle because OS/2 has to permanently swap in and out.
Even if you have a relatively large amount of RAM installed (for example, I
have 32 MB), OS/2 will need to swap a lot, depending on how much memory your
applications demand. For example, one complete build of XFolder using VisualAge
C++ will make my swap file grow to more than 40 MB, meaning that OS/2 is
actually using 32+40 = 72 MB of memory.
OS/2's memory management, especially the swap file management, may be
influenced by a number of CONFIG.SYS commands. Even though there several of
these commands, I recommend that you only change the SWAPPPATH command, for
which the "Memory" page in the "OS/2 Kernel" object offers you an interface.
Press the "Help" button there to receive a more detailed description of the
different settings.
ΓòÉΓòÉΓòÉ 9.6. File-System Caches ΓòÉΓòÉΓòÉ
File-system caches are a mechanism used by most of today's operating systems to
avoid redundant disk access. In order to accomplish this, a part of the
computer's physical memory (RAM) is used to buffer data that is read from and
written to disk. This memory region is then called a "cache".
Now, if an application accesses disk data that is still residing in the
file-system cache, the operating system does not have to read it from the disk,
but can simply take it out of the cache, which is a lot faster.
On the other hand side, if an application is writing data to disk, OS/2 can
copy this data to the cache first and delay writing it to disk until the disk
is ready for accepting it. This is called "lazy writing".
Do not confuse the file-system caches, which we are dealing with here, with the
other caches that exist on your system, such as the processor caches and maybe
other caches that are built into your hard disks. These are part of the
computer's hardware and not described here.
OS/2 implements different caches for each file system that is installed. This
means that all FAT drives will use one cache, and all HPFS drives a different
one. These caches are separately configured with different CONFIG.SYS settings,
which you may alter on the "HPFS" and "FAT" pages in the "OS/2 Kernel" object.
Press the "Help" button there to receive a more detailed description of the
different settings.
ΓòÉΓòÉΓòÉ 10. New XFolder System Sounds ΓòÉΓòÉΓòÉ
If you have the OS/2 multimedia subsystem (MMPM/2) with any sound card
installed, XFolder can introduce new system sounds to your Workplace Shell.
Notes: These new system sounds are disabled per default, because if these
malfunction, the whole Workplace Shell might run into trouble. In order to
activate this new XFolder function, you will need to execute "SOUND001.CMD" in
the INSTALL subdirectory of the XFolder directory. If, on your system, the new
system sounds do not work correctly, you can execute "SOUNDOFF.CMD" in the same
directory, which will disable sounds again.
With V0.82, sound support has been moved to a separate DLL (SOUND.DLL) to allow
XFolder to work on systems where MMPM/2 is not installed too. If you're running
into problems with sound support, you can simply delete that DLL.
Please note also that the XFolder system sounds will make your system slower,
just as the regular system sounds do too. Even on my Pentium-133 with 32 MB
RAM, this is noticeable, even though XFolder uses a separate thread to play its
sounds.
Anyway, if the new system sounds are enabled, you will be able to configure
these in the "Sound" object, which per default resides both in the "Multimedia"
and "System setup" folders.
"Sound" object
Configuring these sounds is not too spectacular: XFolder just adds a few more
items to the list box on the left. All the XFolder items start with "XFolder",
so you'll be able to view them grouped together. By clicking on one of them,
you will be able to select a sound from the list box on the right. XFolder
comes with one little sound for the Shutdown and Restart WPS features to get
you started. ;-)
ΓòÉΓòÉΓòÉ 11. New Default Icons ΓòÉΓòÉΓòÉ
Starting with V0.84, XFolder allows you to freely replace a number of default
WPS icons. This is an improvement over previous versions, where only the
default folder icons could be replaced with new fixed XFolder icons; this can
now be done more freely, and for more WPS default icons.
The icon replacements are turned on per default. Icon replacements can be
configured as follows:
1. If you don't want the icons to be replaced at all, uncheck the
corresponding setting in the "Workplace Shell" object, page 1.
2. If you'd like default icons different from the ones that XFolder
provides, you need to replace the icons in the /ICONS subdirectory of the
XFolder installation directory and rebuild the ICONS.DLL file. This is
explained below.
Note: All these changes require a WPS restart because it is impossible to
replace icons which are already in use by the WPS.
Now, replacing the default icons with your own favorites is fairly easy. Look
into the /ICONS subdirectory of the XFolder installation directory, and you
will find a number of icon files:
Replace any of these files with your own favorites and execute the ICONS.CMD
script in the same directory. This will create a file ICONS.DLL, which will be
copied by XFolder to its /BIN subdirectory at the next WPS restart.
Note that the script expects the icon file names to be exactly as they are
now. Also, you cannot replace ICONS.DLL in /BIN yourself, because once the WPS
has started, that DLL is locked. So always use ICONS.CMD.
The icons which can be replaced are the following:
Program files (WPProgramFile class). These are the files in the top row
in the above screenshot. They represent the following executable types:
- default.ico will be used for program files whose executable type
cannot be determined by XFolder. This shouldn't happen very often.
- dll.ico will be used for Dynamic Link Libraries (DLL's). Note that
not all .DLL files will be given this icon (especially not Windows
DLL files), and some files will be given this icon even though they
have a different extension. XFolder actually reads the file header
of a file to determine whether the file is actually a DLL.
- dosfull.ico and doswin.ico will be used for DOS executables in
full-screen and windowed mode, respectively.
- driver.ico will be used for virtual and physical device drivers. Not
all device drivers will be given this icon however, since many of
them are assembled as DLL files, and will therefore carry the DLL
icon.
- os2full.ico and os2win.ico will be used for OS/2 text-mode (VIO)
programs in full-screen and windowed mode, respectively.
Data files (WPDataFile class). These is the xfdataf.ico file. Note that
this icon is only used for files which have no programs associated with
them; otherwise the program icon will be used. (That's just the default
WPS behavior.)
Desktop (WPDesktop class). These are the xfdesk1.ico and xfdesk2.ico
files, for closed and open desktops, respectively. (While the WPS uses
the same icon for both closed and open desktops, you can now use a
different one for an open desktop.)
Folders (WPFolder class). These are the xfldr1.ico and xfldr2.ico files,
for closed and open folders, respectively.
Known limitations. Some default icons presently cannot be changed. Most
notably, PM programs without a built-in icon will always be given some dull
default icon for PM programs.
Also, XFolder can only change the icons as they are displayed in folders.
Icons of running programs will not be affected, i.e. those in the title bar of
a program window or when a program is minimized to the Desktop.
This might improve in a future XFolder release.
ΓòÉΓòÉΓòÉ 12. The Netscape DDE Interface ΓòÉΓòÉΓòÉ
Introduction
Installation
Command Line Parameters
Tips & Tricks
How it works
Revision history
ΓòÉΓòÉΓòÉ 12.1. Introduction ΓòÉΓòÉΓòÉ
Are you too annoyed too by the fact that double-clicking on a URL or HTML file
on your hard disk will always start a new instance of NETSCAPE.EXE, although
Netscape is already running? This is a waste of time, memory, and system
resources.
The Netscape DDE Interface is the solution. You can associate it with HTML and
URL files, so that when you double-click on them, either Netscape will be
started or, if it's already running, the HTML file or URL will simply be passed
to the running instance.
NetscDDE works with both Navigator 2.02 and Communicator 4.04 for OS/2.
ΓòÉΓòÉΓòÉ 12.2. Installation ΓòÉΓòÉΓòÉ
There is no real installation for NetscDDE because XFolder comes preconfigured
to let you use it. The default configuration adds a "Netscape DDE" item to all
folder context menus which displays the contents of that folder in Netscape.
However, there are a few extra things you can do with NetscDDE.
1. Create a program object for the NETSCDDE.EXE file in the /BIN
subdirectory of the XFolder installation directory. Associate this
program object with *.HTM and *.HTML files, and you can then double-click
on HTML files on your hard disk and have NetscDDE open them.
2. You can also specify NetscDDE as your default browser in the OS/2 Warp 4
URL objects.
ΓòÉΓòÉΓòÉ 12.3. Command Line Parameters ΓòÉΓòÉΓòÉ
The Netscape DDE Interface is configured by using command line parameters. This
is not very intuitive, but flexible. Besides, it means less work for me. ;-)
The command line syntax is (simply double-click on NETSCDDE.EXE for a summary):
netscdde [-[x|X]n]] [-p <exe>] [-P <params>] [-m[h]] <URL>
As you can see, <URL> is the only required parameter.
The parameters mean the following:
<URL>
a Uniform Resource Locator; you can even open files on the Internet
with NETSCDDE by specifying http:// or ftp:// and such. This is why
NETSCDDE also works with URL objects. For local HTML files, Netscape
tolerates the plain path and file name, so that a simple
C:\docs\text.html will open this file in Netscape. Example:
NETSCDDE C:\docs\text.html
Options:
-x
If Netscape is not running yet, do NOT open a new instance of it.
NETSCDDE will then simply exit.
-X
If Netscape is not running yet, DO open a new instance of it without
asking.
If neither -x nor -X is specified, NETSCDDE will prompt you for
whether you wish to open a new instance of Netscape.
-n
Request a new browser window for <URL> from Netscape, if it's
already running. (If Netscape is not yet running and a new instance
is opened, a new window will always be opened, of course.) Per
default, <URL> will be opened in the last active Netscape browser
window.
-p <exe>
Here you can specify the full path of NETSCAPE.EXE, if it's not on
your PATH. This is only evaluated if Netscape is not yet running and
needs to be started. Per default, NETSCDDE will search the PATH for
NETSCAPE.EXE. Example:
NETSCDDE -p "C:\NETSCAPE\NETSCAPE.EXE" <URL>
The use of quotes is only neccessary for paths which contain spaces,
but never hurts.
For an interesting side-effect of this option, check the "Tips &
Tricks" section.
-P <params>
Here you can specify command line parameters for a newly opened
instance of Netscape, such as "-3" for Netscape 3.0 identification
(see the Netscape documentation for details.) Example:
-P "-3"
Again, the use of quotes is only neccessary if the parameter list
contains spaces, but never hurts.
-m
start Netscape minimized.
-mh
start Netscape minimized and hidden (see the "Tips & Tricks"
section).
ΓòÉΓòÉΓòÉ 12.4. Tips & Tricks ΓòÉΓòÉΓòÉ
1. Here's an unintended, but maybe useful side-effect: Since OS/2 can share
its DDE environment with a Win-OS/2 session, NETSCDDE can even pass URLs
to a running Win-OS/2 copy of Netscape Navigator. This includes
Communicator (Netscape 4). The only thing you have to do is enable
WIN_DDE in the Win-OS/2 session settings of your Windows Netscape program
object. By specifying your Windows Netscape EXE file with -p <exe> (see
above), NETSCDDE.EXE even provides for proper WPS integration of Windows
Netscapes.
2. You can now (V1.1) also specify a .CMD file with -p and -P to have
certain commands executed before and after Netscape is actually started.
You should specify the -m or -mh options so that no ugly VIO window
appears. Here is an example NETSCAPE.CMD:
@echo off
rem do some initialization here, e.g. change directory
cd D:\WebStuff
rem now call Netscape
netscape.exe
rem now the .cmd file is put to sleep until Netscape is
rem terminated; subsequent calls to NETSCDDE will contact
rem this running Netscape instance
rem after Netscape is terminated, execute this:
call cleanup.cmd
rem or whatever you want
Thanks, Marcus de Geus, for this suggestion.
3. Here's a trick from Chris Wenham, senior editor of OS/2 e-zine, found in
the SmartSuite Mailing List (smartsuite-os2@makelist.com):
"If you need to change the web browser that Smartsuite apps call when you
click one of their Internet buttons (like Organizer's button to go to the
Almanack page), or send the URL to the currently running copy of Netscape
instead of launching a new instance, you need to do this:
Launch REGEDIT2.EXE in the /OS2/SYSTEM directory. Expand the
HKEY_CLASSES_ROOT tree. Scroll down to "http" and expand it all the way
down (through "shell" and "open") until you come to "command".
Right click on the data in the "(Default)" key, pick "Modify", and change
the path to the new browser, making sure it's followed with a "%1" (which
represents the URL). Close RegEdit.
You shouldn't need to reboot, but you might need to restart any SS
components that are running.
Chris then states that you can enter NETSCDDE.EXE as your browser in this
section.
ΓòÉΓòÉΓòÉ 12.5. How It Works ΓòÉΓòÉΓòÉ
This is done with the use of Dynamic Data Exchange (DDE), for the OS/2 version
of Netscape 2.02 understands just the same DDE commands as the Windows versions
do. These commands are (horribly) documented at
http://developer.netscape.com/library/documentation/communicator/DDE
These documents assume a detailed knowledge of how DDE works, and believe me,
some things ARE different on OS/2.
ΓòÉΓòÉΓòÉ 12.6. NetscDDE Revision History ΓòÉΓòÉΓòÉ
V1.2 (July 8, 1998)
Finally created this INF file for documentation. NetscDDE is now exclusively
distributed with XFolder and is published under the GNU General Public Licence.
V1.1 (May 15, 1998)
NETSCDDE can now start any program specified with -p, for example a batch file.
New -m and -h parameters.
V1.02 (May 1, 1998)
NETSCDDE does not any longer block the PM while waiting for Netscape to answer.
V1.01 (March 8, 1998) Bugfix for local files which contain spaces.
V1.0 (March 5, 1998)
Initial release.
ΓòÉΓòÉΓòÉ 13. Frequently Asked Questions (FAQ) ΓòÉΓòÉΓòÉ
This section contains questions which have frequently been asked to XFolder's
author. Please read these texts before notifying the author of potential
problems or bugs. Maybe you'll find the answer here already.
General questions
Installation questions
Menu questions
XShutdown questions
ΓòÉΓòÉΓòÉ 13.1. FAQ: General Questions ΓòÉΓòÉΓòÉ
First of all: look into the "Workplace Shell" object, where you will find a lot
of useful levers to make XFolder behave.
If you don't find the answer to your question here, please look at XFolder's
web homepage also. XFolder's author is now maintaining a public bug list, which
might answer your question too.
1. Does XFolder slow down the WPS?
I don't think this is true in general. I have not done any tests, but in
general, XFolder only slows down certain WPS features, but not the WPS in
general.
The most obvious slowdown is opening context menus. Although the
50-objects limit which existed in XFolder versions prior to 0.70 has been
lifted, you should still not put too many objects into the configuration
folders. Since these folders are re-read every time a context menu is
opened, XFolder might slow down the system too much.
With the other functions, I don't know. Naturally, painting the status
bars does take some time, but this is normally not noticeable.
Also, XFolder doesn't use that much memory. I have checked this on my
system, and in addition to the size of the XFolder DLLs, XFolder acquires
only some 100 to 400 KB, depending on how long the WPS has been running.
2. Why are the XFolder dialog windows so ugly on Warp 3?
XFolder now uses the WarpSans font for most of its dialogs, because it's
so much prettier than "System Proportional". This font only comes with
OS/2 Warp 4, so on Warp 3 it's not found, and the system uses the default
system font (System Proportional) instead. If you can get hold of some
Warp 4 \OS2\DLL\DSPRES.DLL file, simply copy it over the same file in
your Warp 3 \OS2\DLL directory. This file contains many system resources,
among others the WarpSans font. Warp 3 will work with the Warp 4 version
without problems. (This only works if you boot OS/2 to the command line,
using Alt-F1 at startup.)
3. Why are the new system sounds not playing?
You will need to install them first. See the corresponding page for more.
4. Why do I keep getting crashes in SOM.DLL?
If you're using VisualAge C++ or any other software which installs SOM
runtimes, make sure that SOM.DLL is loaded from \OS2\DLL. This DLL has
been updated with more recent Warp fixpaks. VAC++ puts additional
directories at the beginning of the LIBPATH statement in CONFIG.SYS,
which still causes the old DLL to be loaded. Put those directories behind
\OS2\DLL in the LIBPATH.
5. Why do XFolder's features only work with some folders and not with
others?
This is tricky. Some people have reported this in all variations, i.e.
hotkeys work for the Desktop only, or not in URL folders, or not in Group
Folders (an IBM EWS utility), etc.pp.. The same applies to status bars.
From what I can see, this is related to folder subclassing. XFolder needs
certain window messages to introduce these features, and if some other
WPS class intercepts these messages, XFolder's features behave funny or
cause crashes or do simply not work.
In general, the more WPS class replacements you have installed, the more
likely these errors are likely to appear. With a "clean" WPS, XFolder
usually works fine, but the people who have reported these errors
sometimes had four folder class replacements installed, and it's really
difficult for me to track down these errors then. Try to de-install some
WPS extensions which you don't absolutely need.
Also, the more messed up your INI files are, the more likely the WPS is
going to become unstable in general. I strongly recommend Henk Kelder's
WPTOOLS package, which you should run from time to time anyways, to clean
up the INI files. This is still continually updated and available at
Hobbes.
I have also found that installation order is important. Some WPS
extensions seem to simply "swallow" messages which they don't need,
assuming that they are the only WPS extension on the system. (This might
apply to XFolder also, but I have tried to avoid this.) Now, if XFolder
comes before this greedy WPS extension in the WPS class replacement list,
which is the case if XFolder was installed first, it does get the message
before the other WPS extension.
6. Does XFolder cooperate with Object Desktop?
In theory, yes. Practically, sometimes. For details about this (and for
other WPS utilities also), see the separate "Compatibility" page.
7. Why do I hear the disk drives running every time I open the "Drives"
folder?
The reason for this is that the XFolder status bars query the free space
on a drive. If the first object in your "Drives" folder represents a
floppy drive, it's this drive that's queried.
To avoid this, change the status bar information for WPDisk objects in
the "Workplace Shell" object, page 2 of "Status bars". Then this
information will not be queried.
Alternatively, you can disable status bars for the "Drives" folder only
on the "XFolder" page in the Drives folder's settings notebook.
8. Does XFolder run on Macintosh systems?
No.
Shameless self-advertisement: XFolder cooperates perfectly with the fantastic
CommandPak from the same author, available also at my homepage. This package
will improve the OS /2 command line dramatically, among others offering some
WPS support from the command line also.
ΓòÉΓòÉΓòÉ 13.2. FAQ: Installation Questions ΓòÉΓòÉΓòÉ
1. The WPS crashes/keeps rebooting after the WPS restart. What is this?
Difficult to say. If it keeps rebooting, this is a sure sign that the WPS
is trapping, i.e. exceptions occur when it's booting up. Same thing as on
the previous page, XFolder seems to be conflicting with other WPS
extensions.
Otherwise, it might simply be that restarting the WPS is not working on
your system. The WPS restart is only intended as a shortcut, but if it
doesn't work, try rebooting instead.
Some people have reported that removing XFolder INI keys seems to help.
Take some INI editor and look in OS2.INI for application names starting
with "XFolder". Delete them all. With V0.81, XFolder does not rely on INI
keys any more. This will delete all your settings and reset the language
to English, but maybe XFolder will run.
In addition, it is always recommended to have more recent OS/2 fixpaks
applied, that is, at least Fixpak 35 for Warp 3 and fixpak 5 for Warp 4.
XFolder will run without fixpaks, but this might lead to problems. IBM
has changed many things with the SOM kernel over time, which the WPS uses
for its class management. I have tried my best to enhance compatibility,
but I cannot test all possible configurations myself. I have found, for
example, that the standard Warp 3 SOM kernel is extremely buggy, so at
least for Warp 3 I strongly recommend applying fixpaks. (Although with
V0.82, XFolder now does install on Warp 3 even without fixpaks.)
2. The install program says that some of the classes could not be installed.
What can I do?
There were serious installation problems with the previous V0.8x
versions. Apperently, with V0.82, things have become much better since
I've removed SOM multiple inheritance, which the WPS apparently doesn't
like too much on some systems.
If installation still fails, even if only some of the classes could not
be installed, please deregister all the XFolder classes. Get rid of
XFolder altogether until these problems have been solved. The classes are
designed to interact, and your WPS is really likely to crash all the time
if only some of the classes are installed.
3. The install program does not create the "OS/2 Kernel" and "Workplace
Shell" objects.
With V0.80, the install script failed to create the new system objects if
the XFolder config folder already existed. This should be fixed now, but
if problems persist, simply delete your config folder, and all the
objects should be created.
Otherwise, you can still execute the INSTLxxx.CMD and CROBJxxx.CMD
scripts in the INSTALL subdirectory, with "xxx" being your three-digit
language code, as described on the "NLS" page.
However, this might also be due to the fact that the "XFldSystem" and
"XFldWPS" classes could not be properly registered. I have seen this
happen on a Warp 3 system without any fixpaks installed.
ΓòÉΓòÉΓòÉ 13.3. FAQ: Menu Questions ΓòÉΓòÉΓòÉ
1. My menus have become so crowded. What can I do?
If you consider your context menus too crowded, you can tell the WPS to
omit displaying those menu entries which are only "doubles" to mouse
operations ("Copy", "Move", etc.).
On Warp 3, putting a SET MENUSTYLE=SHORT into CONFIG.SYS will do the
job.
On Warp 4, there is a new setting in the "System" object in the
"System Setup" folder. You should find it on the "Menu" tab. This
setting is also found in every folder's own settings notebook; there
is also folder Setup String to set this for folders individually.
See "WPFolder Setup Strings" for more.
Moreover, you can remove many default menu items individually in the
"Workplace Shell" object on the "Context menu" pages.
The folder content functions are helpful, but can crowd your context
menus too much also if you declare many folders to be your favorites. On
my system, I have created a separate folder called "frequent", which I
have declared to be my only favorite folder. In this folder, I can put
all those folders which I frequently access, so I only have one context
menu entry, but a submenu with all my favorite folders.
2. When I select a context menu item, not the XFolder function, but some
other function gets executed. What is this?
Probably a menu ID conflict with some other WPS extension. This is a
known problem with Network logins. Go to the "Workplace Shell" object,
"XFolder page", then to page 2 ("XFolder Internals"), and raise the "Menu
item ID offset". Press "Help" there for details.
3. When I select a non-XFolder context menu item, XFolder still executes one
of its own functions. What is this?
Same thing as above.
4. When I open a context menu, my system crashes/hangs. What can I do?
Versions prior to V0.82 served as a test for video drivers in this
respect. ;-) I have found out that some video drivers do not support
transparent background mix for bitmaps, which XFolder used to use. While
some drivers silently ignored the transparency, other drivers crashed
badly and stopped the whole system (especially Matrox Millenium). With
V0.82, I have changed the icon painting for folder content menus to use
regular icons instead of bitmaps. Icon painting is still disabled per
default in case something should still go wrong. Turn on "Show icons" on
the "Context menus" pages in "Workplace Shell" to enable icon painting.
If you still have problems, Ralph Scharpf reported that one could install
the IBM GRADD drivers for MGA video cards instead, which appear to be
working. Unfortunately, those cards do not support 1024x768 with more
than 60 Hz, but if you can live with 800x600, this appears to be a
solution.
5. Why do folder content menus not work with folders on the Launchpad?
I don't know. They're always empty. I guess the Launchpad fails to call
XFolder's window procedure, but uses its own one instead. I have found no
way to figure out from where the context menus were opened yet, because
the Launchpad uses regular shadows for displaying objects.
6. I have added something to the config folder, but it doesn't appear in the
menus. Is this a compatibility conflict?
Probably no. Since V0.70, XFolder uses the .ICONPOS extended attributes
of the config folder and its subfolders to determine the order of objects
in a folder. Trouble is, these are only written by the WPS when the
folder is closed, and only if the folder was open in Icon or Details
view. So simply open the folder in Details view and close it again. That
should work.
7. How do I get the underlined characters in menu items for keyboard
shortcuts?
Put a tilde character ("~") in front of a certain character in the
program object's title. This will underline the following character in
the menu entry, allowing you to type this character as a keyboard
shortcut when the context menu is displayed.
(This is different from the folder hotkeys which XFolder adds to open
folders.)
Example: OS/2 ~command window will make "c" a keyboard shortcut in the
context menu.
For this, be sure to check "Suppress ''~'' in window title" in the
"Workplace Shell" object on the "Context menus" pages.
8. I have added a program object to the config folder, but when I select the
menu item, I get error messages from the program. What am I doing wrong?
You will probably need to put a "%" character into the "Parameters" field
of the program object to prevent XFolder from passing the folder as a
parameter. See "Extra features for program objects" for details.
9. I have added a shadow to the config folders, but opening it doesn't work
like with the other objects. What am I doing wrong?
XFolder does open shadows of program objects in the configuration
folders, but it does not change their directories or parameters. This is
not a bug, it's an intentional limitation for security. COPY your program
objects to the configuration folders instead of creating shadows. See the
bottom of the "Extra features for program objects" page for details.
10. How can I execute CMD.EXE commands?
For commands which are built into CMD.EXE (such as REN, COPY, DEL, CD),
put a program object into the XFolder Configuration Folder. Then specify
CMD.EXE in the program object with /C <commands> in the "Parameters"
field.
Example for deleting the folder's whole content: put CMD.EXE in the "Path
and filename" field and /C DEL * in the "Parameters" field. This is, of
course, just a stupid example and NOT recommended.
11. How can I use REXX for WPS manipulation?
I have included extra information in the appendices of this
documentation, which might be useful to you:
a complete list of all the WPFolder settings strings;
a collection of OS/2's default Object ID's.
a diagram of the WPS Class Hierarchy.
If you're not too familiar with REXX, you can copy and modify the
ALWSSORT.CMD file in the XFolder directory to test some of the folder
settings. Please see the "Related files" page for more.
In addition, I strongly recommend the INF book "Rexx Tips&Tricks" by
Bernd Schemmer, which is available as "rxtt28.zip" (or newer) on Hobbes.
;
12. Why can't I open my new config folder object more than once?
If you create programs objects which need to be opened several times from
different directories (namely for command line objects), be sure to check
the "Create new window" flag on the "Window" tab in the object's
notebook. Otherwise OS/2 will not start a new window but simply resurface
the already opened one.
13. I have deleted the XFolder Configuration Folder. How do I get it back?
Don't worry: As soon as you try to open a context menu, XFolder will
notify you and automatically create a new, empty one on your desktop or
recreate the default configuration, which you may then choose.
Note that this behavior implies that you MUST have a Configuration Folder
somewhere on your system while XFolder is installed. It may be empty, but
it must exist.
ΓòÉΓòÉΓòÉ 13.4. FAQ: XShutdown Questions ΓòÉΓòÉΓòÉ
1. Why does automatic reboot not work on my system?
I don't know, on some systems it just doesn't, for example my Warp 3 with
FixPak 35, but it does on my Warp 4. I was unable to figure out what the
reason for this is, but a few users have also reported this, and the
problem also occurs with the WarpEnhancer reboot feature, so I guess it's
not XFolder's fault. (The reboot feature uses an undocumented trick
anyway, so there is probably no guarantee by IBM that it will always
work.) If you have the IBM BootManager installed, you can circumvent this
problem by specifying SETBOOT.EXE as a user reboot option (Desktop
settings notebook -> "XDesktop" page 1 -> "Actions").
2. Is there anything which XShutdown does not properly save?
Yes. XShutdown does not save positions of folders which have changed just
before XShutdown was initiated, because the WPS delays saving folder
positions in some background thread to which I have found no access, and
the format of the folder position entries in OS/2.INI is not documented,
so I cannot do it myself. The same applies to folders which are closed by
XShutdown itself. If you want folder positions to be saved, close them
manually and wait a few (about 10-20) seconds before starting XShutdown.
(With "folder positions", I mean the position of an open folder window
itself, not the positions of the icons in a folder. These are properly
saved.)
Also, XShutdown cannot save changes to the Tasklist window (e.g. fonts or
colors being dropped on them). If you want these changes saved, you'll
have to use OS/2's regular shutdown just once.
3. Why do I keep getting errors while the INI files are being saved?
This is probably due to INI keys which do not contain any data, which
shouldn't happen. Try deleting the offending INI key, since it contains
no data anyway.
4. Why is APM power-off is not working on my system?
I don't know. My computer does not support APM power-off, so I cannot
test this myself. Please contact ARAKAWA Atsushi, arakaw@ibm.net, who has
written the APM code.
Some users have reported that using APM power-off causes a CHKDSK at the
next reboot of OS/2. Apparently, only newer OS/2 kernels have file system
functions which support this features. IBM has introduced a newer APM
support with Warp 4 Fixpak 6, so maybe installing that fixpak will solve
that problem. The "XShutdown" page in the Desktop's settings notebook
displays the version number of the installed APM driver, which should be
at least 1.2 to make APM power-off work.
ΓòÉΓòÉΓòÉ 14. Related Files ΓòÉΓòÉΓòÉ
There are a number of files in the different subdirectory of the XFolder
installation directory that might be useful to you:
BOOTMGR.CMD is new with V0.83. This script was supplied by Duane A.
Chamblee and will automatically add all the current BootManager choices
to the XFolder user-reboot actions for XShutdown. This is done by
modifying the XFolder keys in OS2.INI directly. No guarantee that this
will actually work on your system!
CROBJxxx.CMD (with xxx being a three-digit language code, as described in
National Language Support) are used by XFolder to create the default
Configuration Folders. These are just plain REXX scripts which create a
number of objects on your desktop.
These scripts are called both after XFolder has been installed (after the
first WPS restart) and also whenever XFolder fails to locate its
Configuration Folder.
You may modify these scripts to have a different default configuration
created. However, you should be very careful in changing the various
object settings, especially the OBJECTID keywords, because XFolder might
rely on these.
NEWOBJ.CMD was used in previous versions of XFolder (before 0.52) to
create objects. This is now done with templates, but this script is still
included, for those who got used to it.
It needs the following parameters on the command line:
newobj <wpsclass> <name>
It will create a new instance of <wpsclass> with the title <name> in the
current directory. Please see the "WPS Classes" page for a list of WPS
classes. Not all of these make sense when creating objects though.
Here's an example:
newobj WPFolder New_Folder
will create a new folder called "New_Folder" in the current directory.
Note: Starting with V0.41, XFolder can also create objects from
templates. This has the advantage that you can create objects with
certain default settings (namely for folders).
NETSCDDE.EXE (The Netscape DDE Interface): see the separate chapter in
this documentation.
REPCLASS.EXE is used by the installation script to register the XFolder
class and replace WPFolder with it. It needs the following parameters on
the command line:
repclass <oldclass> <replacewithclass> [<dllname>]
<oldclass> is the WPS class that you wish to replace. This is
case-sensitive.
<replacewithclass> is the new WPS class that you wish to register and at
the same time replace <oldclass> with. This is also case-sensitive.
<dllname> is the dynamic link library (DLL) that contains
<replacewithclass>. If the DLL is not on the LIBPATH (as with XFolder),
you will need to specify the full path.
If <dllname> is omitted, <replacewithclass> will be de-registered and
removed from the replacement list for <oldclass>.
Example for XFolder itself: the classes to be replaced are WPFolder,
WPDisk, and WPSystem, the new XFolder classes are XFolder, XFldDisk, and
XFldSystem , which all reside in the XFLDR.DLL file.
All action performed with this program will only have an effect after
rebooting or restarting the WPS with WPSRESET.EXE (see below).
Warning: Do not attempt to replace single XFolder classes or to undo a
certain XFolder replacement manually. The XFolder classes are designed to
work together and are depend on each other. If you register / deregister
not all of them, the WPS might hang itself up already at boot-up. For
registering or deregistering of the XFolder classes, always use the
install script.
SOUNDxxx.CMD (with xxx being a three-digit language code, as described in
National Language Support) must be started by you to activate the new
XFolder system sounds. These little scripts will write a few
language-dependent strings into the INI files of the OS/2 Multimedia
Subsystem (MMPM/2), which will then be visible in the OS/2 "Sound"
object. Only if XFolder finds these, it will play system sounds at all.
SOUNDOFF.CMD will turn sounds off again by deleting the respective
entries from the MMPM/2 INI files. XFolder will then stop playing system
sounds.
Note: The SOUND files assume that that your MMPM/2 directory is \MMOS2 on
your boot drive. If it is not, you must alter the files yourself.
TREESIZE.EXE is used by the new default menu item of the same name and
displays the disk usage of a folder and all its subfolders in a Tree
view. If Treesize is started with a directory name as a parameter, this
directory is displayed, or the current directory otherwise.
After Treesize is done with its calculations, you may drag and drop new
WPS folders onto the main window, whose size will be calculated then
also.
Treesize offers you some settings using context menus.
All settings are saved when Treesize is closed.
WPSRESET.EXE can restart your WPS without rebooting your computer
altogether (see the "Restart WPS" page for details). It is now (V0.71)
only used by the install script any more, while XFolder does its own WPS
restarting internally. In order to prevent accidental execution,
WPSRESET.EXE must be started with a "-D" parameter on the command line.
(I have forgotten what "-D" stands for, but I'm sure it used to have a
meaning.)
XHELP.CMD is a powerful REXX script which can display language-dependent
messages, both in HTML and simple ASCII format. It was taken out of the
"OS/2 CommandPak" by the same author, also available at my homepage. In
that package, you will find extensive documentation of xhelp.
In XFolder's context, xhelp is only used by the install program and has
no further function.
XSHUTDWN.EXE: see the respective separate page.
All the other .CMD files in the XFolder directory are REXX scripts used
by the default XFolder configuration to quickly set certain folder
settings (they can be found in the "Quick Settings" submenu). The scripts
are very similar, varying only in the settings that are applied to a
folder. ALWSSORT.CMD is commented, so you can look through it and see
what it is doing. Copy ALWSSORT.CMD to some other filename and change the
settings that are applied to the folder in order to apply customized
settings to folders. See the "WPFolder Setup Strings" page for a list of
applicable settings.
ΓòÉΓòÉΓòÉ 15. Version Information ΓòÉΓòÉΓòÉ
This chapter offers you information which changes with every XFolder version:
Compatibility with other software
XFolder revision history: here you will find a compilation what exactly
has changed with each XFolder release
ΓòÉΓòÉΓòÉ 15.1. Compatibility with Other Software ΓòÉΓòÉΓòÉ
As you might have experienced, sometimes several WPS enhancers don't seem to
like each other too much. Or maybe they do like each other, but just don't get
along.
However, I have tested XFolder with several system utilities that I could reach
at this time (on both Warp 3 and 4), and a number of users reported other
utilities to me. The following programs seemed to be cooperative:
CandyBarZ 1.01 / 1.10
CommandFolder 1.50
Desktop Wizard 1.41 (mind the notes below)
DragText 2.5
Extended Desktop 1.4
FeelX (installs a WPS class)
Hot Scroll 0.80 / 1.00
NPS WPS 1.81 / 1.82 (mind the notes below)
Object Desktop Professional 1.5.2 (mind the notes below)
WatchCat 2.1 (installs a WPS class)
WPAnimatedMousePointer 1.01
WPS Trashcan 2.5.2
X.file 1.1 / 1.2
X.it 2.4 / 2.5
General note. As XFolder is providing more features with every released
version, chances are that it offers functions which other WPS enhancers also
provide for. Depending on which software was installed first (and thus appears
first in the WPS class replacement list), XFolder or the other product may not
get a chance to actually change the WPS's behavior.
Moreover, since XFolder offers a number of features which are also contained
in other WPS packages, you should make sure that these features are not
enabled in several packages at the same time. For example, you should not
enable folder status bars in both XFolder and Object Desktop, which can only
lead to problems.
Warnings. The following list of incompatibilities is based on reports by users
of XFolder. I have not verified these yet and include them only to save you
from trouble.
Object Desktop. OD manipulates the WPS just as intensively as XFolder
does (maybe even more), so it's just natural that most problems have
arised with this software.
Note: I do not have Object Desktop. The following is all I know. If you
find out something, you're welcome to tell me, and I'll add that to this
section. But please do not write me that OD does not cooperate well with
XFolder. I know, and there's little I can do about it.
For all versions, the following rule applies: If you have trouble,
XFolder probably conflicts with OD's folder replacement class,
TSEnhFolder. If nothing else works, you can always deregister that class
(using the "WPS Class list" in the "Workplace Shell" object), and you'll
probably get XFolder to work.
But before that, mind the following notes:
The install program now offers you to alter the order of XFolder and the
"TSEnhFolder" class in the WPS class list which is the WPS class
responsible for most of the Object Desktop folder functions. I believe
this should help, because then XFolder gets the chance to subclass the
folder windows before Object Desktop.
Object Desktop 1.x.
I was reported that XFolder does not cooperate with the "Browse mode"
feature of Object Desktop. You will have to switch this feature off,
sorry.
Also, you should make sure to have the "Folder status bars" disabled in
Object Desktop before enabling the respective XFolder function, or the
funniest things might happen.
Finally, I was reported that XFolder keeps adding status bars to Object
Desktop's "Launchpads" even where they don't belong. Apparently, these
things are derived from the WPFolder class also; they have an "XFolder"
page in their settings notebooks though, so you can turn off XFolder's
status bars for them.
Object Desktop 2.0. Stefan Zechmeister got OD 2.0 to work with XFolder
doing this:
1. Install OD 2.0.
2. Install OD fixkit #1.
3. Install XFolder. Reverse the order of TSEnhFolder class as proposed
by the install script.
4. Go to the "Workplace Shell" object, "XFolder" page 2 and raise the
"Menu item ID offset" to above 700.
If you then move XFolder's installation folder to another folder, make
sure the target folder has OD's extra features turned off. Otherwise
XFolder will complain that its Configuration Folder does not exist.
If you are using NPS WPS, you must make sure to have its "Select by name"
and "Sort by extension" features disabled, because XFolder offers these
features also and gets confused if these features are added by NPS WPS
also.
XFolder does not work with the automatic menu selection of NPS WPS, at
least not if you are using the "Folder content" functions. Sorry, you'll
have to turn that feature off.
I was reported that XFolder seems to have problems cooperating with
Program Commander/2. Apparently, this can be solved by switching off the
"SmartIcons" feature for title bars.
XFolder also seemed to have problems with DragText on some systems. There
must be a setting somewhere in that software to start DragText delayed,
which should solve this.
I was told by Hauke Laging that Extended Clipboard (EClip) by Hinnerk
Becker does not cooperate with XFolder. On Hauke's Warp 4 system, the WPS
hung at startup and did not respond to anything. Hauke then told me that
the problem can be resolved by removing EClip from the startup folder. (I
was unable to reproduce all this, but I'm reporting this to you anyway.)
Several users also reported that the "Snap to grid" function did not seem
to work. I have tested both Warp 3 and 4 and encountered no problems;
these users all had some version of Object Desktop installed, so I
suspect in respect to the "Snap to grid" feature, XFolder and Object
Desktop seem to be colliding somehow.
Bernd Schemmer reported that XFolder seems to be using the same menu ID's
as the LAN Server GUI. If you're using LAN Server (or other software that
might suffer from this), you can now change XFolder's menu IDs in the
"Workplace Shell" object. The default menu ID offset has now (V0.51) been
raised from 100 to 300 to avoid these conflicts.
Michael Holzapfel reported that installing GRADD drivers for the ELSA
Winner 2000FC video card crashed his system when XFolder V0.71 was
installed, causing a CHKDSK at the next reboot, which in turn damaged the
newly installed drivers, so the system wouldn't start at all. He told me
that de-installing XFolder helped.
Dirk Schulz reported that Desktop Wizard and XFolder don't like each
other too much. On his system, he was able to increase the WPS's
stability by de-installing Desktop Wizard. Glad he didn't de-install
XFolder. ;-)
ΓòÉΓòÉΓòÉ 15.2. XFolder Revision History ΓòÉΓòÉΓòÉ
"A designer knows he has arrived at perfection not when there is no longer
anything to add, but when there is no longer anything to take away."
Antoine de Saint-Exupery
Version 0.84 (February 4, 1999)
First non-beta. Hope this works better.
New features:
Implemented new drive checking when Disk objects ("root folders") are
opened to avoid the annoying system error messages of OS/2. You'll get a
slightly more comfortable message box now with the default OS/2 SYSxxx
error message. That's a bit better, I think.
Finally, a number of WPS default icons can be freely replaced.
Status bar support for WPUrl objects; they display the URL in the status
bar per default.
Double-click on status bar opens folder settings notebook.
XSHUTDWN.EXE can finally do a WPS restart too.
Miscellaneous changes:
Reworked thread and exception handling once more. Added exception
handling to status bars (fnwpSupplObject, xfldr.c).
Reworked the folder subclassing to speed up processing and added more
checks for error conditions (fnwpSubclassedFolderFrame, xfldr.c).
Bugfixes:
V0.83 reported a wrong version number of itself. Fixed. Well, we're at
V0.84 now anyways.
Removal of context menu items broke for abstract objects in V0.81. Fixed.
"File attributes" menu didn't work when several data files were selected.
Fixed.
Fixed a few keyboard focus problems with status bars.
Also changed the way status bars save whether the size of a folder window
has been increased already. This is now stored together with the other
folder pos data in OS2.INI, "PM_Workplace:FolderPos". The status bar keys
end in "@XFSB". This should fix the problem that folder windows were
frequently too small when folder positions were not properly saved.
When users tried to move the XFolder Configuration Folder, they got the
"Config folder does not exist" message all the time. Fixed.
Also, that message is only opened once now.
Fixed a few problems with the "File exists" dialog: 1) XFolder's "does
file exist" algorithm behaved differently from the default WPS behavior
when files were copied from HPFS to FAT or from FAT to FAT and the long
name was different from the real name; 2) on FAT drives, the proposed
name were in 8+3 format, which is not very useful; 3) the proposed names
used to be based on the existing real names, not file titles. 4) Also,
"rename" behaved funny on FAT drives sometimes. Ooouuuargh. Fixed.
Folder views behaved really strange with some CD-ROM directories,
especially with the new Joliet support of CDFS.IFS. I suspect this was
due to some of my DosDevIOCtl's, which I have removed now.
On some systems, opening folder content menus for removeable drives hung
the system when those drives were empty (e.g. because no floppy disk was
in the drive). Added drive checking for folder content menus.
In rare occasions, previous versions would mess up the CONFIG.SYS file by
not setting the correct file size after writing, which led to garbage
characters at the end of the file. Fixed, thanks to ARAKAWA, Atshushi.
The Worker thread was frequently given "regular" priority, which slowed
down the other WPS threads. Fixed; Worker thread priority is now properly
set to "idle".
SOUND.DLL was missing in the V0.83 distribution. Sorry, fixed.
Playing of system sounds was always interrupted when a new sound was to
be started, even if the new sound file did not exist. Fixed
(fntQuickThread, xthreads.c).
XFolder would sometimes fail to process its startup folders even though
it should have processed it. Fixed (fnwpWorkerObject, xfdesk.c).
In rare occasions, e.g. with ObjectREXX's WPS support, saving the WPS
objects during shutdown would crash. I've now added even more "quiet"
exception handling, maybe this helps.
Version 0.83 beta (December 14, 1998)
Well, the major rework of V0.82 broke a number of things, so there are more
bugfixes here. There are still a couple of known bugs which I haven't had time
to fix yet, but I wanted to get these bugfixes out before Christmas. See
"bugs.txt" on my homepage for up-to-date info.
New features:
XSHUTDWN.EXE now has an option for turning on the shutdown log.
BOOTMGR.CMD to automatically add user-reboot options. See Related Files
for more.
Miscellaneous changes:
Replacement "File conflict" dialog now automatically selects the filestem
in the rename proposals.
A few cosmetic changes to the XFolder dialogs.
Bugfixes:
Removal of default menu items broke for data-file objects in V0.81. Fixed
(new wpFilterPopupMenu in xfdataf.*).
Changing file attributes from shadow context menus led to crashes when
several shadows were selected. Fixed (mnuFileSystemSelectingMenuItem,
menus.c).
Copying file names didn't work right either if this was selected from a
context menu of several shadows. Fixed (same place).
Replacement "File conflict" dialog sometimes displayed outdated file
size/date/time information. Fixed (wpConfirmObjectTitle, xfobj.c).
With V0.82, XFolder forgot how to write CONFIG.SYS to disk. That rendered
the whole "OS/2 Kernel" object pretty useless. Fixed, sorry
(fncbConfigItemChanged, xfsys.c).
SUPPRESSPOPUPS wasn't properly read from CONFIG.SYS ("Errors" page).
Fixed.
The second "Screen" page which is inserted into the "System" object for
some video drivers did not appear in "OS/2 Kernel", but somewhere in
"Workplace Shell". Fixed (wpAddDMQSDisplayTypePage, xfsys.*).
XShutdown sometimes reported a data size of 0 when saving INI keys. This
is now silently ignored, so that those error messages shouldn't appear
any longer.
XShutdown got confused with programs which appeared with a PROG_DEFAULT
type in the tasklist. Fixed (xsdBuildShutList, xfdesk.c).
APM power-off entered a critical section after calling the APM interface,
which kept power-off from functioning. Fixed (apm.c).
Dialogs were resized very badly when video resolution was changed. Fixed;
I am now using my own routines for storing/restoring window positions in
winh.*.
Treesize reportedly had trouble on very large hard drives. I suspect this
was due to my use of unsigned int variables, which can only hold values
up to some 4 billion (= 4 GB). Fixed, I'm now always using double
variables.
Version 0.82 beta (November 19, 1998)
This is a major rework. It might not look too different from the previous
version, but I've cleaned up a lot of things.
New features:
More Treesize settings: size display format, low-priority search.
XFolder finally has Warp 4 notebook buttons. There's a new function
winhAssertWarp4Notebook in / helpers/winh.c which can do this with any
notebook page without having to change the dialog resources. Thanks,
Martin Lafaix, for the neccessary information.
Thanks to ARAKAWA Atsushi, APM power-off now works. (I hope. Again, I
cannot test this.)
Added a few more WPS class descriptions.
Miscellaneous changes:
Removed the XFldFileSystem class because it wasn't doing much anyway and
caused installation failures on Warp 3 without fixpaks. Its functionality
is now handled by the XFolder and XFldDataFile classes directly.
Removed the XFolder exit list because this seemed to have caused some
problems during WPS restarts (xfdesk.c). Also changed the algorithm which
determines whether the startup folder should be processed
(fnwpWorkerObject, xfdesk.c).
Completely reworked all the settings notebook page logic. Almost all
pages are now using much more lucid callbacks from the new notebook.*
files. This also ensures proper updating of pages when other pages are
currently open too.
Completely reworked the SOM logic for the "WPS Classes" page in
"Workplace Shell". Maybe this helps with the problems previous versions
had on some systems. Also, this now even displays classes which do not
appear in the "official" WPS class list, because some internal classes
are loaded independently of that. Finally, multiple class replacements
are now properly displayed. Found an interesting undocumented SOM method
(see clsWpsClasses2Cnr in classlist.c for details).
Also added source emphasis to the "WPS Classes" container when context
menus are opened. Previous versions had trouble keeping the selected
classes apart.
XFolder is now smart enough to write changes to CONFIG.SYS in lower case
if the keyword which is replaced contains lower-case characters too
(fnwpConfigCommon, xfsys.c, and str* helper functions in
/helpers/dosh.*).
Fixed a coupla things with NLS DLL loading to make V0.82 work with V0.81
NLS DLLs (cmnQueryNLSModuleHandle, common.c).
XFolder can now write SUPPRESSPOPUPS=0 on "Errors" page in "OS/2 Kernel".
This is a new setting since FP29 (fnwpConfigCommon, xfsys.c).
Sped up confirmation dialog display (XFldObject::wpConfirmObjectTitle,
xfobj.c).
Treesize is now much faster collecting extended attributes (up to 300%).
Also fixed some strange hangs/crashes on some directories.
Bugfixes:
"Templates" checkbox had disappeared from several object notebooks in
V0.80 (removed various wpclsQueryStyle method overrides). Fixed.
Previous versions tended to crash if folders were not running on thread 1
of the WPS. This was especially the case with folders created by various
install programs (StarOffice, IBM feature install). Sorry, XFolder status
bars apparently weren't thread-safe. XFolder now creates a new object
window for each folder which is opened (fnwpSupplObject, xfldr.c), so
that status bar manipulation always occurs on the thread in which the
folder is running.
First "Context menus" settings page had German buttons. This was just an
educational measure. ;-) Fixed.
"Status bars" page 2 had "XFldDataFile" as the default class selection,
even though that class doesn't support status bar codes. Fixed.
Added more error checking to the "QuickOpen" and "Favorite Folder"
functions. Maybe this helps with those strange exceptions on the first
settings page for folders.
XFolder now enforces minimum settings notebook sizes when these are
initially opened, because large pages were truncated previously (new
wpclsQuerySettingsPageSize method overrides in xfdesk.* / xfsys.*).
Reworked the "folder content" menu display so that it only uses regular
icons now. Maybe this solves the mysterious crashes with some video
drivers.
Reworked several parts in menu handling because items were inserted in
the wrong places (menus.c). I also forgot to add the "folder view" items
to Warp 4's menu bar too. And "Create another" was always disabled, no
matter if this was desired in the "Workplace Shell" object. Finally,
"Select by name" wouldn't show up on Warp 3. All fixed.
Also added more error checking when evaluating the config folder. This
should lead to less warning messages if objects are deleted from there
(menus.c).
Startup/QuickOpen status windows were not destroyed, but only hidden when
that action was finished. Fixed.
INI file maintenance broke somewhere in V0.8x; this is now done by the
Worker thread (xfdesk.c). Fixed.
Saving INIs: "Ignore" button should now work when errors occur
(/helpers/prfh.c).
Fixed a few repaint problems with progress bars (/helpers/progbars.c).
Fixed a lot of bugs with the new system sounds. For one, XFolder failed
to install on systems where MMPM/2 was not installed, because XFLDR.DLL
was linked against the MMPM/2 libraries, which then could not be
imported. So we have a new, second SOUND.DLL, which does all the sound
playing. If loading that DLL fails, XFolder simply won't play sounds. See
the sound.* files for details. -- Second, XFolder got really confused
playing sounds when other applications needed the audio device too. This
is now solved; XFolder checks for whether the device is available, and if
another application wants the device while XFolder is playing, playing is
stopped also. -- Third, System sounds in V0.81 worked only if they had
been disabled and enabled again in the "Sound" object
(cmnQuerySystemSound, common.c). Fixed.
Couple of broken links in the German HLP file. Fixed.
Install script crashed when invalid language code was entered. Fixed.
Version 0.81 beta (October 18, 1998)
Starting with this version, the file and function of the error in the source
files is specified here too. For details about the source code changes, refer
to the "CHANGELOG.TXT" file in the source distribution.
New features:
Treesize external program. Part of the default context menu now.
Due to popular request, "Snap to grid" can now snap the selected icons
only.
The position of the startup folder status window is finally saved and
restored the next time. Sorry this has taken so long.
Miscellaneous changes:
Gave up using SOM multiple inheritance, which seems to have caused too
much trouble. In detail, the xfSelectingMenu and xf* methods for status
bars have been removed from XFldObject and subclasses. Status bar
single-object info is now handled in statbars.c (new file) with _somIsA()
calls instead. Not as elegant, but might be a bit faster than SOM method
resolution too.
XFldProgram class removed. Its only purpose was for status bars using SOM
multiple inheritance. Functionality is now handled by menus.c.
Removed extended Settings submenus. Caused too much trouble. Instead, you
may now set additional "Attributes" and "Folder view" menu items in
"Workplace Shell".
Improved animation code to avoid flickering. All the common code for this
is now in the new animate.* files.
Added exception handling to "XFolder" notebook page in folders. This
seems to have broken on some systems.
Made the file-system class replacements return the CLSSTYLE_NEVERTEMPLATE
from wpclsQueryStyle so that no additional templates are produced in the
Templates folder.
Reworked status bar code completely. Should be quite a bit faster now;
however, each code is only translated _once_ now.
Rearranged the pages in the "OS/2 Kernel" and "Workplace Shell" objects.
Also changed the replaced SOM methods (xfsys.*). "OS/2 Kernel" should now
contain all the settings which require a reboot to take effect. I guess
this is a more logical rule.
Removed those darn xfclsQueryModule methods which were used to query the
module handle of xfldr.dll. This might have caused installation failures
on some systems. There is a new DLL init function in module.c now which
is a lot faster and causes less problems.
As a nice side-effect to this, XFolder does not need any INI entries any
more to run properly. If you delete the whole "XFolder" INI thing,
XFolder will re-initialize itself.
Install script set up config folder to open in Tree view per default.
Unfortunately this caused .LONGNAME EAs not to be rewritten when the main
config folder was altered. Fixed, this now uses non-flowed icon view.
Bugfixes:
"HPFS" page wrote "LAZY:1" instead of "/LAZY:1" to CONFIG.SYS. Fixed
(xfsys.c, fnwpConfigCommon).
"HPFS" page could read a few IFS parameters in upper case only. Fixed.
"Memory" page wrote "HPFS" settings too. Forgot a "break" in
fnwpConfigCommon, xfsys.c.
"Errors" page wrote "REIPL=YES" instead of "REIPL=ON". Fixed.
"Object Internals" page displayed object handles only 25% of the time,
depending on how large your object repository was. Fixed.
Install script failed to create "Workplace Shell" and "OS/2 Kernel"
objects if the XFolder Configuration folder already existed. Fixed.
Creating objects from context menus caused non-reproduceable system hangs
from time to time (really bad ones where even C-A-D faild). Added more
error checking (cmnCreateFromTemplate, common.c; this used to be
XFldObject::xfCreateFromTemplate) and rewrote large parts of that routine
to use container messaging now instead of WPS methods. Seems to always
work now.
Reworked "Snap to grid" also so that it now properly uses container
messages (xfSnapToGrid, xfldr.c).
Status bars now check for removeable drives before querying disk
information. Those ugly "drive not ready" popups should now be gone.
Status bars reported garbage if a filename to be displayed contained a
'$' character also. Fixed.
"Folder hotkeys" page listed an "Insert" item, which should have been
called "Paste". Fixed.
Opening large folder content menus (which were repositioned on the
screen) would sometimes cause all menus not to react to mouse clicks any
more. Fixed.
Fixed a memory leak in bitmap handling. I was using IBM sample code
again...
XFolder would sometimes attempt to play system sounds even though no
system sounds were enabled. Fixed.
XFolder sometimes conflicted with the WPS container manipulation when
extended sorting was on. Icons could still be moved within a folder even
though "Always sort" was on. Fixed.
Install script failed to create the new "Workplace Shell" and "OS/2
Kernel" objects when the config folder already existed. Fixed. There are
now two additional scripts in \INSTALL.
Version 0.80 (September 29, 1998)
XFolder's licence agreement has changed. I am now releasing the source code
and have placed XFolder under the GNU Public Licence. See "Licence" for
details.
New features:
XFolder can now replace some WPS confirmation dialogs.
Under OS/2 Warp 4, XFolder finally manages to modify folder menu bars
also according to the context menu settings.
The XFolder Startup folder now has a new menu item in its context menu:
"Start folder content" allows you to start all the objects in it even
after the WPS is up.
"QuickOpen" feature for folders.
The "System" object is now split into two new "OS/2 Kernel" and
"Workplace Shell" objects. Refer to this page for more.
New settings pages therein to change those risky and obscure CONFIG.SYS
settings. Included plenty of information for this.
New "WPS classes" page for manipulating the WPS class list.
Every object now has an "Internals" page in its settings notebook. Here
you can look at lots of information which you can't see otherwise and
even change the object's ID.
"Copy filename" finally works properly with multiple selections in a
folder. Multiple filenames are then separated by spaces. Also introduced
new folder hotkeys for copying the filename (without path: Ctrl+Insert
per default).
Status bars now support different information in single-object mode
depending on the class to which the selected object belongs. To implement
this, I had to introduce even more WPS class replacements. 8-) Moreover,
the "$x" key for status bars now supports formatting text from the right
or as a percentage of the status bar width. Also introduced a few more
keys. See "Configuring status bars" for details.
Status bars now also work for tree views, if you enable this in the
Global Settings.
Status bars now display the folder's context menu when you right-click on
them.
Added a new status bar display style ("Warp 3 sunken").
XShutdown can now display a little animation.
"Restart WPS" now has a setting for whether the startup folder should be
processed after the restart.
I have provided a source-code plug-in interface for people who are
willing and able to teach XShutdown how to do an APM V1.2 power-off. My
BIOS does not support this, so I cannot do this myself. Hopefully
somebody will succeed.
XShutdown command-line interface.
Miscellaneous changes:
Rearranged the "Context menu" settings pages more logically (I hope).
Finally included proper (and updated) NetscDDE documentation in a
separate INF file. NETSCDDE.TXT is gone.
Beautified XFolder message boxes a little. These now accept fonts from
the font palettes, and these are stored. So at least the XFolder message
boxes don't use that ugly "System Proportional" font any more.
When "Always maintain sort order" is enabled globally, XFolder now wants
a confirmation for whether the Desktop should also be sorted. This will
prevent you from accidentally sorting the Desktop.
"Show icons" for the "Folder content" functions is now disabled per
default. Some video drivers apparently had serious trouble with this (I
was told this for the Matrox Millenium; my ELSA card works fine though).
"Folder content" menus are now repositioned on the screen when they're
very large to avoid having them displayed outside the visible screen
area.
Completely reworked the config folder menu item handling. Previous
versions had problems when the .LONGNAME EAs contained different
information than the actual folder content in the INI files. These two
sources are now compared and balanced. As a side effect, processing these
menu items also now consumes less memory and is faster.
Also reworked the folder content menu item handling. Previous versions
sent far too many PM messages to the menu window, which cost a lot of
time, especially for folders on FAT drives, which are not sorted by
default. Sorting is now done in memory before inserting the menu items
using a QuickSort algorithm. Even on huge directories, this never takes
longer than half a second. I can't do much about the slow icon retrieval
though, that's WPS-internal.
Since I was given a VisualAge C++ compiler by Mark Mellin (thanks again),
this version is now using a better compiler. Since VisualAge C++ does
contain pretty good programming information, I've spent a couple of days
on compiler options and code optimizing, and I hope that this has
resulted in speedier code.
Better memory handling altogher. XFolder now returns unused memory to the
operating system from time to time.
Replaced my own string handling routines with those from an old
programmers CD-ROM which are way faster.
Converted a few SOM instance methods into regular C functions. This
should speed up XFolder a little bit.
XShutdown now always closes the Desktop and WarpCenter windows last. This
will prevent the situation that you'll be unable to use your system after
Shutdown has been cancelled because the Desktop has already been closed.
Yet more bugfixes in this version:
Moving Object Desktop's TSEnhFolder in the install script didn't work.
Fixed.
Win95 keys are finally working. This time I'm sure ;-) because Glauco
Ippolitoni, Italy, sent me a keyboard with those keys. Thanks again.
Previous versions crashed building the context menus if the config folder
contained a broken shadow. Fixed.
The same applied to folder content menus if broken shadows were found.
Fixed.
Included much more error checking for those folder content menus. Maybe
this solves some of the video driver problems mentioned above.
Setting extended sort options from context menus didn't work for open
drive (root folder) views. Fixed. But to do this, I had to introduce two
new WPS methods. :-(
Previous versions kept causing exceptions internally when objects were
being deleted. For some reason which I still don't understand, XFolder's
wpUnInitData method kept getting called twice by the WPS, which really
doesn't make sense. Although this error was handled by the internal WPS
exception handler, this slowed down the deleting process immensely.
Fixed. (But I'm still amazed.)
XFolder failed to release an instance mutex semaphore when a folder was
put back to sleep. Ooops. Fixed.
Found a memory leak in the code doing the "program object tricks" in the
config folder. This must have been in there since XFolder 0.3x. To my
excuse, I took exactly the example code from the wpQueryProgDetails
Toolkit docs, which also forgets to release the allocated memory. ;-)
Fixed.
The values for the "Snap to grid" feature were not dynamically updated
when changed in the Global Settings. This must have broken in V0.70.
Fixed.
"Select by name" appeared in the wrong places when the "Display" menu was
removed. Fixed.
Folder status bars messed up window painting when the window was resized
so that the status bar overlapped the title bar, especially when
"roll-up" features by, say, X.it were used. A simple WS_CLIPSIBLINGS
fixed this.
"Refresh now" did not refresh status bar data. Fixed.
Included more consistency checking for the Worker thread when it
remembers awake objects. Previous versions had a tendency to crash in the
Worker thread from time to time when the Worker thread tried to store an
awake object which wasn't really awake any more. (This occured mainly
when deleting many objects in subfolders. For all programmers: contrary
to what IBM says in the SOM documentation, somIsObj obviously is NOT
crash-safe.) Fixed.
Previous versions opened the objects in the startup / shutdown folders
from the (background) Worker thread, which led to sporadic, unpredictable
crashes. Besides the WarpCenter strongly disliked not being started from
the Workplace thread. These objects are now opened from the main WPS
(Workplace) thread.
XFolder Startup folder was not processed during first startup after
installation. (But only this one time.) Fixed.
The "XFolder Internals" settings page crashed when the filenames of the
NLS DLLs were in capital letters (esp. on FAT drives). Fixed.
XShutdown hung when it tried to close a PM program which was hung also.
(Especially with Netscape...) The "Skip" button wouldn't help anymore
then, because it just didn't react. Fixed: Messages are now posted, not
sent, to PM windows.
Contrary to what the "Auto-close non-PM sessions" window said, no Ctrl+C
signal was sent to a non-PM session, but Ctrl+Break instead. Fixed.
The XShutdown Update thread got lost sometimes when shutdown was
initialized. Fixed.
Completely reworked the XShutdown routines dealing with saving the INI
files. Included a lot more error checking, and the error messages are now
more meaningful. I hope that the errors many users have reported have now
disappeared, and if not, they won't take the whole system down or even
crash your WPS.
Fixed a bug which caused saving the INI files to crash when they were
specified in lower case in CONFIG.SYS.
"Paste" and "View" were still called "Insert" and "Display" in some
places. Fixed.
A few links in the INF files were messed up. Fixed.
Version 0.71 (July 2, 1998)
Only bugfixes in this version.
Bugfixes:
Status bars were not updated any more when objects were deleted from an
open folder. For some reason, the WPS considers a folder "not populated"
any more when it deletes an object from it, and XFolder therefore stopped
updating status bars. Fixed.
V0.70 removed the whole "Sort" menu and re-inserted items with different
menu ids even for default WPS sort menus, which caused other WPS
enhancers (X.it) to fail when they were trying to sort folders. XFolder
now only ADDS items and leaves the other items alone.
Use of $S keys in "single-object mode" caused other object information to
be always related to last object in folder (e.g. "$C objects, $SK KB
(selected: $t [$w] $D $T)"). Fixed.
Forgot to document a few status bar mnemonics in the online help.
Win95 keys were recognized as hotkeys in the Global Settings, but not
saved. Again, I don't have those keys, but I've fixed something. Let's
see if it works.
XFolder sometimes crashed at bootup when no config folder was present.
Fixed.
Since the WPS crashes big time when menu IDs > 0x8000 are used, XFolder
now checks for this (folder content menus) and aborts processing then.
The Warp 4 "Insert" menu item is actually called "Paste". Sorry, I have a
German OS/2. Fixed.
"Restart WPS" now saves and closes all open WPS windows, including the
Desktop, regardless of whether "Close all open windows" was checked.
Since all WPS windows will be closed anyway when the WPS terminates, I
might just as well do it myself. This has the advantage that icon
positions are finally saved for the Desktop too.
"Restart WPS" doesn't use WPSRESET.EXE any more. A simple
DosExit(EXIT_PROCESS, 0) does it too. If I had figured this out earlier,
this could have saved me a couple of days of trial and error. ;-)
Moved a lot of code from the subclassed frame window procedure to a new,
separate object window, which is also running in the PMSHELL Workplace
thread. This might increase compatibility with other WPS software which
also does subclassing.
Just a cosmetic correction: the "reboot" drop-down list box in the
XShutdown confirmation dialog was disabled illogically. Fixed.
Not really a bugfix, but XFolder now creates a shutdown log in the root
directory of your boot drive ("xshutdwn.log"). Some people still have
trouble getting XShutdown to work, and this might help tracking these
problems down.
Now that I had the shutdown log, I was able to track down the mysterious
problems WRT closing VIO sessions, and I found a major bug which caused
XShutdown to sometimes close a different session than the one that was
intended. Fixed.
I also rearranged the order of commands that were executed while saving
the INIs during shutdown. Maybe this helps those people who
(mysteriously) still can't get those functions to work... otherwise,
check the shutdown log.
Rearranged the order of classes in the install script. Some systems
seemed to have problems with the previous order.
Version 0.70 (beta) (June 26, 1998)
Hoo-yah, yet another mega-release.
New features:
"Folder content" functions.
"Select by name" function.
Sort extensions..
Folder status bars.
Startup / Shutdown folders.
Sounds!!
Rearranged Global Settings more orderly.
Cleaned up internal menu handling routines big time in order to make the
new folder content features work. As a result, the 50-objects limit of
previous versions has been removed.
Default menu items are now removed if a respective checkbox is unchecked;
this seems more consistent to me.
"Help" submenu may now also be removed.
XFolder setup strings introduced for use with REXX.
In Icon views, objects are now created from templates at the mouse
position (from where the context menu was opened).
Support for Win95 keyboards (folder hotkeys).
Beautified dialogs a little. ;-)
XShutdown now checks for existing printer queues before shutting down.
"Restart WPS" now remembers whether to close windows between restarts
(checkbox in confirmation window).
User-configurable reboot actions.
"Shutdown" and "Restart WPS" items in Desktop context menu now contain
"..." only when confirmations are enabled.
Still more bugfixes:
Improved exception handling again.
XFolder refused to create objects altogether when "Open settings after
creating from templates" in the Global Settings was disabled. Fixed.
XFolder crashed when objects were added to the config folder while these
were closed. This resulted in folder context menus not appearing at all.
Fixed.
XFolder got confused on the "XFolder" page in folder settings notebooks
enabling the checkboxes properly. Fixed.
For mysterious reasons, XFolder would crash on some systems after
dropping something on the root folder of the boot drive. Fixed (I hope).
Disabling folder hotkeys would disable all folder subclassing, including
"Auto-scroll tree views". Fixed.
The Warp 4 "View" menu was dubbed "Display" in XFolder dialogs and help
files. Sorry, I don't have an English Warp 4. Fixed.
XShutdown failed to save INIs when the existing OS2*.INI files had the
HRS attributes on ("An error occured saving the INI files: 5"). This
should be fixed now.
XShutdown would sometimes hang after closing all windows, waiting forever
for the Update thread to terminate. Fixed.
XShutdown would sometimes fail to begin shutdown, although the status
window was already displayed, because it was resetting some event
semaphore which was already posted. Fixed.
Version 0.61 (beta) (May 10, 1998)
This is mainly a maintenance release to fix the bugs detected in the last
version.
Some new features anyway:
XFolder now populates the Config folders in the background after WPS
bootup, so you don't have to wait forever on the first right mouse-click.
New "Auto-close non-PM sessions" setting for XShutdown. By popular
demand. ;-)
New NETSCDDE included. See NETSCDDE.TXT for details.
Changed the default folder hotkey configuration for more default hotkeys.
Documented XShutdown internals.
Even more bugfixes:
XShutdown failed to save data of folders which were awake (i.e. stored
somewhere in the WPS process), although they were not visibly open. This
applied especially to the XFolder Config Folder. This is now fixed; all
awake folders are saved too.
XShutdown sometimes failed to save INI files properly. Error checking is
now implemented.
XShutdown sometimes failed to close non-PM sessions. At least
DOS/Win-OS/2 sessions had to be closed manually. This was due to a bug
(feature?!?) in WinQueryWindowProcess, which does not return the process
and session IDs of DOS machines, but those of the first PMSHELL instance.
I don't know what this should be good for... anyway, it's fixed.
XShutdown threads had wrong priority settings, so they would wait forever
when a session had higher priority settings than them. Fixed.
XShutdown also sometimes got confused with its thread management and
would start the same thread twice. Fixed.
Fixed some minor annoyments in the install script.
Somehow languages got messed up after installation; the dialogs were in
German, the help files in English. Fixed.
"Auto-scroll Tree views" did not always realize when the WPS was done
populating a folder. Fixed.
Exception management enhanced. Crashes in XFolder will now not always
take the whole WPS down. Changed location of trap log file to the OS/2
boot drive; if you hear funny sounds, look for "?:\XFLDTRAP.LOG" with "?"
being your boot drive.
Individual folder settings were sometimes set to "disabled" per default.
This does of course not make sense. Fixed.
Version 0.60 (beta) (May 4, 1998)
I know it's been a while since the last release, but to make up for it, this
is a mega-version...
New features / Changes:
XFolder is finally able to order context menu items according to the
order which is seen in Name or Details views of the corresponding config
folder. This was a real hassle...
"Auto-scroll tree views" feature.
XFolder is now fully multi-threaded ("XFolder Worker thread").
Extended Shutdown and "Restart WPS" features and new settings page for
Desktop.
"Copy filename" feature.
Moved the recreation of the default Config folder into the XFolder code;
this is not any more done by the install script. This way, if the config
folder gets lost, you may recreate your default config folder
automatically.
XFolder is finally able to process hotkeys for the Desktop and drive
(disk) objects also.
There is a new setting on page 1 of the XFolder Global Settings which
tells XFolder what to do after creating an object from a template.
"XFolder" settings page in every folder.
XFolder now also replaces the WPObject class in order to be able to
suppress menu items for all WPS objects. Moreover, "Check disk" and
"Format disk" can be removed from WPDisk objects. Settings page 2 has
been redesigned for all this.
My "Netscape DDE Interface" is now included in this package. See "Related
files" for more.
Added "Close window" to the configurable hotkey items list. (Some people
seem to prefer "Alt+X" over "Alt+F4" to close windows.)
REPCLASS.EXE now explains itself when started without parameters.
WPSRESET.EXE rewritten.
Rearranged buttons in all messages boxes to conform with the OS/2 look
and feel.
Bugfixes:
"Full path in window title" is now ALWAYS properly updated, even when you
move parent folders of an open folder. Thanks to multithreading!
Several users have reported problems when Object Desktop was installed
and "unusual" folders (such as workarea folders and URL folders) were
opened. This would completely mess up the WPS, unless folder hotkeys were
disabled. This problem should be fixed now, because I've finally
implemented a proper way of remembering window procedures for each folder
window separately. The old code was just awful, sorry.
I know I've claimed before that this one was fixed, but when passing
directory names to programs as a parameter, XFolder still forgot to
enclose them in quotes when they contain spaces. Fixed.
XFolder was previously unable to differentiate between "Alt" and "Ctrl"
hotkeys. Fixed.
NEWOBJ.CMD can now handle titles with spaces also. Thanks, John Buckley.
Version 0.52 (March 1, 1998)
New features:
Many more configurable items for folder hotkeys, including sorting, NPS
WPS's "Sort by extension" and OS/2 Warp 4 items.
XFolder is now prepared for National Language Support. It shouldn't take
too long before more than just the English version is available. I am
planning to distribute National Language Support files in separate
packages. NLS support is now on page 5 of the Global Settings, to where I
also moved two settings which were formerly on page 1. Please contact me
if you're interested in translating XFolder to your language. You don't
have to be a programmer, but knowing HTML would help.
A few renovations on the settings pages: most importantly, settings which
don't apply are now grayed out.
Even more bugfixes:
Sometimes hotkeys got activated even though the Ctrl or Alt keys were not
pressed. Fixed.
When the folder name was passed to a started program as a parameter which
was started from a WPDisk object, only the drive letter was passed (e.g.
"C:" instead of "C:\"). Fixed.
Previous versions had problems replacing the default icon for closed
icons, but only on Warp 4. Apparently, on Warp 4, IBM has decided to have
wpclsQueryIconData call BEFORE wpclsInitData, which is really not the way
it should be and, even worse, contradictory to what IBM recommends in the
Toolkit Docs. Anyway, this is fixed now.
Not really a bugfix, but the hotkey list now uses less space in OS2.INI.
No bugfix either, but the annoying "No settings found" message box after
opening the settings notebook was removed.
I forgot to implement "Remove default menu items" and help for disk
objects also. Fixed.
Version 0.51 (Feb 20, 1998)
New features:
Insert separators into menus: simply set a program object's title to
"---".
"Refresh now" also updates the window title (if "Full path in window
titles" is enabled).
At last, XFolder enhances Drive objects also (i.e. the root drive views
that can be opened from the "Drives" folder). Hotkeys still DO NOT work
in here.
Added a few more items to the configurable hotkey list.
Two more REXX scripts for folder settings.
Bugfixes (this is a long list, but I believe nothing of this was really
serious):
Somehow in the last compile of V0.50 the help panels for the "System"
notebook pages got messed up. Fixed.
Cleaned up internal menu handling routines. Removed a few weirdos.
The hotkey entry field in the Settings now only works when a list box
entry has been selected. Anything else didn't make much sense.
When the settings were re-read from OS2.INI at startup, not all the
keyboard hotkeys were initialized, so some of the definitions got lost at
every reboot. Fixed.
For some reason, in the last beta, you could add up to 20 hotkeys, but
you could not get rid of them any more. I simply forgot to add a "Clear"
button, which is available now.
The "full path in folder title" was not updated when the folder was moved
or renamed. This now works half way.
Removed annoying "XFolder could not query its module handle" message,
which was titled a "fatal error", but caused no harm in any way.
Changed default "menu ID offset" setting to 300 to avoid conflicts with
LAN Server and ObjectDesktop from the start.
Install program now backs up the original XFolder Configuration Folder
before erasing it and building a new one from scratch. This avoids having
duplicate entries in the XFolder menus after several installs.
The missing "TREEFONT" setup string has been added to the "WPFolder Setup
Strings" page.
One more thing: somehow I got the terminology for "conditional cascade"
menus messed up. The description on the first settings page has been
corrected.
Version 0.50 beta (Feb 10, 1998)
New features:
"Snap to grid" feature.
Folder hotkeys.
Moved all the XFolder Global Settings onto four pages in the OS/2
"System" object in the System Setup folder. I thought that since there
are a number of settings for folders there, I might just as well add
XFolder's settings in that place also.
Version 0.41 (Feb 8, 1998)
New features:
Templates support! Make shadows of your favorite templates in the
configuration folders, and XFolder will create objects from them.
Clipboard support via "%**C" in program object parameters.
"Keep original title" setting when displaying full path in folder window
title.
XFolder menu ID's are now configurable in the Global Settings.
Added object id's and object setup strings to documentation.
Version 0.40 beta (Feb 6, 1998)
Gee, XFolder is finally getting somewhere. New features:
XFolder Global Settings dialog with zillions of settings. Take a look at
it, it's completely new. In this dialog, you can now configure certain
aspects of XFolder that some users found annoying. Most importantly, you
can now switch off XFolder's icon replacement.
XFolder can now display the full path of the folder in the folder window
title (e.g. "C:\OS2\APPS" instead of just "APPS"), which is a bit more
informative.
XFolder can now also remove OS/2 default menu entries.
Version 0.31 (Feb 1, 1998)
New features:
"Create another" objects in the default configuration now ask for a name
before creating.
More robust online help. Meaningful error messages if not found.
Added online help for pressing F1 over an XFolder variable menu item.
Bugfixes -- I told you, 0.30 was a beta only ;-) :
"%" in parameter lists of program objects is now also recognized when
other parameters need to be passed to the program. Example: "text1.txt %"
now works. The previous version only recognized "%" when it was the only
character in the parameters list.
If the folder name contains spaces, it is now enclosed in quotes ("folder
name") before being passed as a parameter. This allows Netscape to
display these folders also.
Removed faulty information displayed by the install script: the help file
was NEVER copied to \OS2\HELP, despite the announcement of the install
script.
The maximum number of objects in the config folder is still set to 50;
however, instead of crashing, XFolder will now give you a message, asking
you to remove objects.
Version 0.30 beta (Jan 31, 1998)
New features:
Now all object classes are recognized in the config folders, not only
WPPrograms and WPFolders.
Extra functionality for WPPrograms: The folder name is passed to the
program as a parameter, unless the parameter list in the program object
contains "%" (like WPS behaviour). This shall henceforth be known as
"Netscape support". ;-) See "Program objects" for details.
Added online help for XFolder's error messages. This cost me two years of
my life.
Install program improved: replaces previous XFolder versions; creates
more objects than previously, supporting the new features; can now also
recreate the default configuration folder only.
Bugfixes:
Reworked internal handling of submenus. The previous version displayed a
funny behaviour with "almost empty" subfolders, which was not severe
though.
Reworked large parts of this documentation. Window positioning implemented.
Version 0.21 (Jan 23, 1998)
New features:
Can now freely add submenus by recognizing folders in the config folder.
Install program creates an according default config folder.
Documentation extended.
Bugfixes:
XHELP.CMD was missing in the first release, making installation
impossible.
Version 0.11 (Jan 17, 1998)
Initial release with a fixed "XFolder" subfolder, into which single menu items
could be inserted.
ΓòÉΓòÉΓòÉ 16. XFolder's Internals ΓòÉΓòÉΓòÉ
This chapter offers you further information on how XFolder is implemented. The
following is not neccessary for every-day use, but simply provided for those
who are a bit more familiar with OS/2 and wish to know more.
What are WPS classes?
How does XFolder work?
How does XShutdown work?
How was XFolder developed?
Personal Note
ΓòÉΓòÉΓòÉ 16.1. What Are WPS Classes? ΓòÉΓòÉΓòÉ
First, please take a look at the "WPS classes" page in the "Introduction"
section of this document, if you don't have a general understanding of WPS
classes yet.
In general, in object-oriented programming, a class is an abstract definition
of both (1.) data types and (2.) actions that can be performed on that data.
The latter are commonly known as object methods.
While classes only describe an object type in an abstract way, the objects that
really exist in a program are called instances of a certain class.
Take a WPS program object, for example: every program object is an instance of
the class WPProgram, defined by the WPS. The (1.) data of the program object
would be, among others, the executable associated with it (e.g. "CMD.EXE"),
while (2.) methods (that could be performed on this data) would be starting the
executable (by double-clicking or choosing the "Open" menu item) or changing
the executable in the settings notebook. While you cannot "see" methods from
the user interface, methods are used all the time internally every time the WPS
is doing something. If you're familiar with that term, methods can vaguely be
described as an Application Programmer's Interface (API) to an object. If you
know how to program REXX: every time you use one of those object setup strings
to modify an object's data, you're actually calling a method upon an object.
Since methods are defined for each class, the methods that you can call on an
object depend on the class of the object. I have not counted them, but already
WPObject, the most basic WPS class, defines more than 100 methods.
What makes object-oriented programming so flexible (and popular) is that you
can define relationships between classes. In order to understand this, the
following two concepts are helpful:
Inheritance. This concept allows you to define an object class that takes
over all its data types and methods from another object class, without
requiring that the programmer know how the original class was actually
programmed. You can simple "take over" the features of an existing class
and rewrite only what you wish to implement. The original class is then
called the "ancestor" or "parent" of the "descendant" class.
For example, with the Workplace Shell, the Desktop class (called
"WPDesktop") is derived from the folder class (called "WPFolder"), making
the Desktop just a special type of folder.
So basically, the Desktop has all the capabilities of a regular folder:
you can put other objects into it, sort its contents, open a tree or
details view, and so on. But in addition, the Desktop class provides a
few more actions: its context menu contains more items (such as
"Shutdown" and "System configuration"), its notebook has more pages, and
so on. Obviously, the Desktop inherits folders' characteristics, but adds
a few more. On the other hand side, some folder characteristics are
suppressed: for example, you cannot close the active Desktop, and it does
not have a title bar.
The WPS implements a derivative structure such that all objects are
logically grouped and interdependent. On an even more abstract level, all
object classes of the WPS are descendants of a SINGLE CLASS named
"WPObject", which provides certain functions that all WPS objects need:
mainly the ability to display context menus and notebooks at all and
things like that. This is typical of object-oriented programming; such a
global ancestor class is commonly called the "root class" of a "class
hierarchy".
On WPObject, the WPS builds a complete tree of classes known as the WPS
class hierarchy. You can use the "WPS Classes" page in XFolder's
"Workplace Shell" object to take a look at this.
Such a class hierarchy has the advantage that one can change the
characteristics of this root class only, and all classes which are
derived from it will also change. (The disadvantage is -- from a
programmer's point of view -- that building such a class hierarchy
requires a whole lot of planning which data and which methods are common
to which classes, and many times it turns out that this planning wasn't
quite optimal. But once this hierarchy has been built in a thoughtful way
-- which, thanks to IBM, indeed is the case with the WPS -- the
advantages are just superb.)
Polymorphism. This concept means that, while using inheritance, you can
REPLACE certain characteristics of an ancestor class with new ones. You
can redefine ("override") the original object class's behavior. Now, if a
certain method is performed on the descendant, the newly defined method
is called instead of the one that was defined with the ancestor class.
Just one of the many examples of this can be seen with the "Help" menu
item which is available in every object's context menu. Selecting the
"Extended help" menu item will result in an object's wpDisplayHelp method
to be called. This method is introduced by the by the WPS root class,
WPObject, so that all WPS objects can display help: the OS/2 help manager
is initialized, the help window is displayed, etc. The actual help page
to be displayed however is overridden (following the concept of
polymorphism) by almost every single WPS class. This way, pressing "Help"
in a folder's context menu will show you something different than from,
say, in a program object's menu.
For details on what class replacements are, please refer to the "WPS classes"
page in the "Introduction" section also.
While inheritance and polymorphism are concepts common to every
object-oriented programming environment (and also to object-oriented
languages, such as C++), the Workplace Shell is even able to provide their
advantages across several applications. The WPS consists of many DLLs which
are in part independent of each other, and programmer's outside of IBM can
extend the WPS using these features without even having the WPS's source code,
which is not possible with "normal" object-oriented languages.
This only works because the WPS uses IBM's own System Object Model (SOM), a
complex system which provides object-oriented programming interfaces even
across several code modules, and even independent of the programming language.
SOM is so powerful because classes are instantiated and maintained at run-time
instead of compilation time.
This is, by the way, where the WPS class list comes in: when the WPS is
booting up, it creates all the classes (which, in SOM, are objects too, but
this is a complex issue), and establishes the relationships between them only
at this point. Only because of this is it possible to modify classes without
IBM, who created the originals, even knowing about it.
Just as a short personal opinion, this is still something that makes OS/2
unique in today's computer world. While most of its other advantages over
other operating systems, such as its reliable multitasking, are not that
unique any more (e.g. Linux is pretty good at that, too), the user interface
is still not reached by any operating system that I know. Especially not
Windows 95.
ΓòÉΓòÉΓòÉ 16.2. How Does XFolder Work? ΓòÉΓòÉΓòÉ
XFolder registers and/or replaces a whole number of WPS classes. Take a look at
the INSTALL.CMD script in the XFolder installation directory to find out more
about this.
The most important XFolder class replacements are:
1. XFolder for regular folders, which contains the main functionality of
XFolder,
2. XFldDisk for "disk" objects, which appear in the "Drives" folder,
3. XFldObject, the WPS root class, for being able to access a whole number
of WPS internals, and
4. XFldDesktop for the new Desktop features, especially the eXtended
Shutdown procedure.
All these classes replace the original WPS classes.
In the sense described on the previous page, the XFolder class is a descendant
of the WPFolder class. This way, it can do everything that a regular folder
can. As a new function, it adds new context menu items to all folders, allows
for folder hotkeys, changes the folder window titles, etc.
By using polymorphism, XFolder redefines certain WPFolder methods, as
described below.
However, XFolder is then registered with the WPS as a WPFolder replacement,
meaning that the WPS will use the XFolder class as its standard folder class,
instead of WPFolder. In doing so, the WPFolder class is not any more used
directly, but only through its replacement (and descendant) class, XFolder.
Refer to the "WPS classes" page in the "Introduction" section for more on
this.
Some of the WPFolder methods that the XFolder class overrides are (this will
probably only of interest for programmers):
wpModifyPopupMenu: This WPObject method is called by the WPS just before
an object's context menu is displayed. Each WPS class adds its own,
class-specific menu items here.
Since XFolder plays with menus a lot, this is one of the most important
methods which XFolder overrides. In this method, XFolder first calls the
parent class's (WPFolder's) wpModifyPopupMenu to have all the standard
menu items added to the object's context menu.
It then searches for the XFolder configuration folder (which must have
the object ID <XFOLDER_CONFIG>) and populates it invisibly. Now it goes
through all objects in here, adding submenus and menu items to the
context menu accordingly. If the configuration folder is not found, a
message box pops up and an empty folder with the aforementioned ID is
created on the desktop.
The same is done for the "Folder content" functions and "favorite"
folders. However, these submenus are only filled with objects after they
are opened by the user; this is done by intercepting the WM_INITMENU
message in the subclassed folder frame window procedure (see below).
XFolder also subclasses these submenu windows (and only these) to be able
to paint icons and to intercept mouse button 2 for opening a folder.
(Please note that "subclassing" here has nothing to do with WPS classes,
but is the Presentation Manager terminology for using a different message
procedure for an existing window in order to be able to intercept certain
PM messages for that window. This is done using the WinSubclassWindow
API.)
XFolder also modifies various other menus (such as the the "Sort"
submenu) in this method, if the Global Settings allow this, and adds
other menu items, if these have been enabled in the Global Settings.
wpMenuItemSelected: This is called by the WPS whenever a context menu
item is selected by the user.
XFolder checks if one of its own (variable) menu items was selected; if
so, it finds the corresponding object in the configuration folder and
opens it. If this object is of the WPProgram class, the previously
described tricks are performed. If the object is a template, no matter of
what WPS class, it is not opened, but XFolder creates a new object from
it in the current folder (via wpCreateFromTemplate).
If the selected item is one from the "folder content" submenus, the
corresponding object is simply opened.
If any of the other menu items that XFolder adds to context menus are
selected, XFolder itself will perform the respective action internally.
If none of the XFolder menu items was selected, the parent class's
(WPFolder's) wpMenuItemSelected method is called (in order not to prevent
the standard menu items from functioning).
wpMenuItemHelpSelected: This is called by the WPS whenever you press F1
over a context menu item. XFolder will display a proper help page, if
neccessary.
wpFilterPopupMenu: With this method, XFolder removes those default menu
entries from the context menus that you have specified in the Global
Settings. (This method is called by the WPS even before
wpModifyPopupMenu, so first items are removed, then new items are
inserted.)
wpclsQueryTitle: The string XFolder (or whatever you have specified in
the Global Settings) is returned to give the XFolder class a unique name.
wpOpen: This routine is called by the WPS every time a folder (and any
other object also) is opened. XFolder needs to override this method to
implement a whole number of features.
First, the parent method is called to have the folder view opened: the
WPS will create a window with a container control in it and shows this
window.
XFolder then intercepts the frame window handle, with which it can then
modify the folder's window title and reset it to the folders complete
path (if enabled in the Global Settings). Basically, it's a simple
WinSetWindowText call, with just a few calculations to truncate the title
if neccessary.
In this method, XFolder also subclasses the folder frame window in order
to be able to handle WM_CHAR messages for folder hotkeys and lots of
other things. For subclassing, this method seemed the best place to me,
since all neccessary WPS initializiation stuff has been done by calling
the parent method, but the user cannot interact with the folder yet,
because it will only be filled with objects ("populated" in WPS
terminology) on a different thread afterwards.
In the new window procedure, XFolder intercepts all WM_CHAR messages
(which are only passed to the frame window procedure if they have not yet
been processed by the container already, such as cursor keys) and
evaluates them according to its internal hotkey list, which can be
changed in the Global Settings.
Subclassing is also needed to introduce folder status bars; the
WM_QUERYFRAMECTLCOUNT, WM_FORMATFRAME, and WM_CALCFRAMERECT messages are
intercepted to resize the folder frame and its container child window
according to the space needed for the folder status bar.
XFolder also intercepts a few container notification messages in order to
provide the "Auto-scroll Tree views" feature and update the status bar
text if object selections have been changed by the user.
In addition, XFolder intercepts various menu messages, such as
WM_INITMENU and WM_MENUSELECT, to be able to handle some menu functions
which are not accessible through regular WPS methods.
All messages which have no meaning to XFolder are passed on to the
original window procedure.
The wpOpen method is also needed for implementing the XFolder extended
sort functions; XFolder updates the container settings according to the
sort criteria which you have specified.
wpAddSettingsPages: This method is called by the WPS every time an
object's settings notebook is opened. XFolder overrides this method also
to add its own settings pages, after having called the parent method, so
that the original settings pages are still inserted.
The XFldDisk class, which replaces the WPDisk class, does not do much, aside
from routing its methods to the XFolder method counterparts, so that drive
views act just like normal (X)folders. IBM has, for some reason, chosen not to
make disk objects regular folders, but implemented a different class for them
(called WPRootFolder), so XFolder needs a separate class too.
XFldObject doesn't do much visibly either, except for suppressing OS/2 default
menu items and adding the "Copy filename" feature. It is however required by
other XFolder parts internally in order to be notified of some internal WPS
events, especially the XShutdown feature, which is described in detail on the
next page.
The XFldDesktop class is implemented to allow changing the Desktop menu items
and for XShutdown, which is described in detail on the next page.
While previous versions also replaced the WPSystem class so that the "System"
object in the "System setup" folder contained more notebook pages to access
XFolder's Global Settings, with V0.80 this behavior has changed. Instead,
XFolder registers two new classes derived from WPSystem without replacing it.
These two classes are XFldSystem and XFldWPS for the "OS/2 Kernel" and
"Workplace Shell" objects, respectively. The settings that you specify here
are (mostly) stored in OS2.INI and evaluated every time XFolder needs them
(e.g. when you open a context menu). In contrast, the "local" XFolder settings
for an individual folder are stored in its .CLASSINFO Extended Attributes,
where the WPS also stores the other folder settings. This is then done by the
XFolder class.
Please note that all the XFolder classes are designed to interact. Do not try
to remove only SOME of them, or XFolder might behave in a funny way (if you're
lucky). All of XFolder's features have been made fairly configurable, so you
should be able to get rid of what you don't like -- or to get rid of XFolder
altogether.
ΓòÉΓòÉΓòÉ 16.3. How Does XShutdown Work? ΓòÉΓòÉΓòÉ
The XShutdown feature has cost me a lot of thought, because it is really not
documented anywhere what happens during the normal shutdown process.
OS/2 per default knows two different shutdown APIs:
DosShutdown only closes all open files, flushes all file-system buffers
und unmounts all file systems; this is what happens after pressing
Ctrl-Alt-Del. No applications are properly closed, and the WPS is not
saved.
WinShutdownSystem however is the Presentation Manager API which closes
all windows, saves the WPS and finally calls DosShutdown. Just the
regular shutdown procedure that you are used to: this is executed when
you select "Shutdown" from the Desktop's context menu or the respective
icons from the Launchpad or WarpCenter.
Trouble is, there is no function "in between" these two. If you call
DosShutdown the WPS data is not saved. And if you call WinShutdownSystem you
get the regular shutdown without any further chance to interfere. So
basically, I had to recode a complete new WinShutdownSystem, which will now be
explained. This was quite difficult, since IBM hardly explains anything about
what is really going on during WinShutdownSystem.
Note: In XFolder, the "eXtended Shutdown" and "Restart WPS" routines share the
same code; they only differ in what happens after all windows have been
closed. I will thus use the term "XShutdown" in the following explanations for
both features, unless otherwise stated.
XShutdown is integrated into the WPS and relies heavily on the XFolder class
replacements. I have intentionally not put the XShutdown code into a separate
.EXE file for two reasons: for one, XShutdown needs access to WPS internal
data, which is only available from the SOM context; second, I want to prevent
people from trying to use XShutdown separately, without having the XFolder
classes installed, because this could severely damage the Workplace Shell. In
more detail, XShutdown relies on the XFldObject replacement class and the
XFolder Worker thread, which cooperatively keep track of the WPS internal
data.
To understand what XShutdown is now doing, it is neccessary to understand how
the WPS handles its objects internally. Every single object which becomes
relevant to the WPS at some point, be it through populating a folder or
querying its settings or starting a program or whatever, is -- in WPS
terminology -- "awakened" by the system, which means that it exists as a SOM
object in memory.
The WPS only very rarely puts awake objects back to sleep though, which would
free the associated memory and store the object's data back to disk. This has
two consequences:
1. There are always many more awakened objects on your system than you would
actually think, because most of them aren't currently visible. Even after
you close an open folder, the objects therein remain awake; this speeds
up populating the folder when it's opened a second time. As a result
however, the WPS eats up more and more of your memory with each folder
you open. (If you have turned on the XShutdown log file, you can see how
many awake objects were saved by XShutdown; these are usually several
hundred objects, even though XShutdown doesn't save all awake objects,
but only descendants of WPFolder and WPAbstract. On the "Internals" page
in the Desktop's settings notebook you can take a look at how many
objects are currently awake.)
2. A change to the object's data sometimes has only an effect on the SOM
object in memory, but is not always saved to disk or the OS2.INI /
OS2SYS.INI files. This is why sometimes the WPS gets into trouble if you
make comprehensive changes, such as moving a folder containing many
abstract objects, and do not shutdown properly: the physical file data on
disk and the WPS records differ then.
This is what XShutdown needs the XFldObject class for, which replaces
WPObject. Every time an object is awakened, the WPS calls several methods
(among them wpInitData and wpObjectReady). XFldObject overrides these and
passes the object address in memory to the Worker thread, which will then
properly update an XFolder-internal list of all currently awake objects. As
far as I know, there is no other way to find out which objects are currently
awake; at least there is no documented API for enumerating them.
Now, when XShutdown is initiated and confirmed, it first starts two new
threads for the following shutdown procedure, which run parallel to the
regular WPS threads: the main "Shutdown thread" with the message queue for the
status window, and the "Update thread", which monitors the OS/2 Window List
and posts messages to the main shutdown thread, if the status window needs to
be updated. So closing all currently open windows is a fairly complex process
of interaction between these two threads: the Shutdown thread closes a window
and then goes to sleep until the Update thread has detected a change in the
Window List (which means that the window has successfully been closed) and
posts a message back to the Shutdown thread, which then in turn closes the
next window, until all windows are closed.
When all windows are closed, the Update thread exits. Now the Shutdown thread
goes through the list of currently awake objects (which was described above)
and forces saving their data to the INI files or to disk by calling each
object's wpSaveImmediate method. This is only done for WPAbstract and WPFolder
descendants, because from my experience, all other classes save their data
synchroneously. (I have tried saving all WPFileSystem descendants once, and
this caused a lot of extended attributes to be created for every single file
that was ever awakened by the WPS.)
Finally, depending on what action was desired, the Shutdown thread does one of
the following:
If you selected "Restart WPS", the Shutdown thread simply executes
DosExit(EXIT_PROCESS, 0). Since XFolder is part of the Workplace process,
and all parts of the WPS are running in this one process (the second
instance of PMSHELL.EXE), this will terminate the whole Workplace Shell.
The Shell process (the first instance of PMSHELL.EXE) will then restart
the WPS automatically.
If you selected "Shutdown" and "Reboot afterwards", XShutdown now also
saves the INI files to disk. This is neccessary, because DosShutdown,
which is called afterwards, does not save them either. (I guess it's
because the INI file API's belong to Presentation Manager.) Since the PM
INI file API's prohibit simply closing the user and system profiles
(which does write their data to disk for all other profiles), XFolder
copies them to two temporary profiles, deletes the originals, and then
renames the temporary profiles to the names of the originals. After
DosShutdown ("Releasing file systems..."), the system is rebooted via a
call to the DOS.SYS device driver. This feature is documented in EDM/2
volume 5, issue 9.
If you selected "Shutdown" and NOT "Reboot afterwards", after
DosShutdown, XShutdown disables the window list and then simply blocks
the system by calling DosEnterCritSec and staying in an infinite loop.
Since all file systems are closed, no further action should be possible,
except for turning off your computer or pressing Ctrl-Alt-Del.
ΓòÉΓòÉΓòÉ 16.4. How Was XFolder Developed? ΓòÉΓòÉΓòÉ
XFolder is programmed in C, using the Warp 3 Developer's Toolkit. All XFolder
versions until 0.72 were programmed using the IBM C-Set/2 compiler. Thanks to
the generous support of Mark Mellin, who sent me VisualAge C++ 3.0, all
versions from XFolder 0.80 will have been compiled using that compiler, which
has a number of helpful improvements over the earlier IBM compilers.
I'm just a university student in Germany and cannot afford to buy $500
integrated developments, however powerful and convenient they may be. This is
why I've been programming Borland Pascal 7 for DOS for years and went on to
REXX during 1997, a result of which is my (in my view) very valuable CommandPak
package for improving the OS/2 command shell. (It is also available from my
homepage.)
I got my C-Set/2 from the German OS/2 magazine "OS/2 Inside", which was said to
be the best OS/2 printing in the world. They had a CD-ROM for just some US-$
20, containing a full C-Set.
I used to have the ordering address on this page, but "OS/2 Inside" has gone
out of business, and their ordering shop has reportedly been closed down also.
So sadly, I know no way to obtain a cheap IBM compiler for OS/2 any more.
It is still possible to write WPS classes using the great free EMX/GCC
compiler, which is available for download at LEO in Germany. The only
requirement is a Warp 3 Developer's Toolkit, unfortunately.
While IBM has stated that it will no longer support SOM altoghether, it is
still a great technology, although it needs quite a bit of reading until you
know what's going on.
The Warp 3 Toolkit contains everything for developing powerful WPS classes. It
is sufficiently documented to understand the basic WPS functionality, enabling
me (who neither knew C nor the OS/2 API, but only OOP with Pascal and Windows
3.1) to build XFolder's basic functionality (version 0.11) in a triplet of
days. (Things become more difficult with more sophisticated features, but
that's another story.)
Valuable reading, aside from the Toolkit docs, can also be found in the four
IBM OS/2 V2.0 Redbooks, which I found on an old Hobbes CD-ROM and might still
be available on the commonly known FTP sites. It is quite outdated (dealing
only with OS/2 V2.0), but the system's basic concepts have pretty much remained
the same.
I also strongly recommend the Electronic Developer's Magazine for OS/2 on the
WWW, which has published fabulous articles on all aspects of OS/2 programming.
There are two series about WPS programming, one starting in volume 2 issue 8,
the other one in volume 5 issue 10.
If you have the above tools, you should be able to program the WPS in a jiffy.
All you still need then is a good portion of patience, since the WPS runs in a
single process (PMSHELL.EXE), and bugs in your project will make the whole
thing crash repeatedly. Check the helpful "Debugging WPS applications" section
in the Toolkit WPS Guide to compensate at least the most annoying problems.
ΓòÉΓòÉΓòÉ 16.5. Personal Note ΓòÉΓòÉΓòÉ
Finally, another subjective thesis:
If IBM had managed to push an affordable compiler into the market just three
years earlier, OS/2 would be better positioned today.
At least for me, not programming OS/2 was not due to a lack of interest, but a
lack of money. Both the freeware/shareware and the commercial market could have
been WAY more vital with a "Turbo Pascal for OS/2". But this problem just
matches the general problems with OS/2: the best technology around, but no
interest in the mass market. :-(
BTW, some consolation for depressed OS/2 users can be found on the most
excellent web page "OS/2 Headquarters" by Tom Nadeau at
http://www.mindspring.com/~os2headquarters/ with the two excellent, witty
series "Understanding Microsoft" and "Understanding IBM", plus more.
"Then was the land filled with the sound of much wailing and gnashing of teeth,
for millions of people used OS/2 and knew that it was good. Yet the Lizard did
harden his heart against them, and said, Nay, there is no demand for it."
Found at: http://www.gate.net/~shipbrk/mozilla.html
ΓòÉΓòÉΓòÉ 17. Appendices ΓòÉΓòÉΓòÉ
This chapter offers you various reference information on XFolder and also some
on the WPS which is otherwise hard to get:
WPS class hierarchy: a diagram of the most important WPS classes
WPS object IDs: a collection of object IDs which should be valid on most
systems
WPFolder setup strings: all the setup strings that are valid on folder
objects
New XFolder setup strings: new setup strings for folders introduced by
the XFolder class
WPS menu ID's: a collection of menu ID's that can be used with the
MENUITEMSELECTED setup string
ΓòÉΓòÉΓòÉ 17.1. WPS Class Hierarchy ΓòÉΓòÉΓòÉ
The following information has been taken out of IBM's Warp 3 Toolkit
documentation. The XFolder class has been omitted here. OS/2 Warp 4 adds a few
more classes, which are in part shown here; depending on other WPS-aware
software installed on your system, even more classes might be available for
certain document types.
Classes that make sense to create objects with using the provided NEWOBJ.CMD
are highlighted. Be careful with other classes, results may be unpredictable.
WPObject
Γö£ΓöÇΓöÇ WPAbstract
Γöé Γö£ΓöÇΓöÇ WPClock
Γöé Γö£ΓöÇΓöÇ WPCountry
Γöé Γö£ΓöÇΓöÇ WPDisk
Γöé Γö£ΓöÇΓöÇ WPKeyboard
Γöé Γö£ΓöÇΓöÇ WPLaunchPad
Γöé Γö£ΓöÇΓöÇ WPMouse
Γöé Γö£ΓöÇΓöÇ WPPalette
Γöé Γöé Γö£ΓöÇΓöÇ WPColorPalette
Γöé Γöé Γö£ΓöÇΓöÇ WPFontPalette
Γöé Γöé ΓööΓöÇΓöÇ WPSchemePalette
Γöé Γö£ΓöÇΓöÇ WPPower
Γöé Γö£ΓöÇΓöÇ WPPrinter
Γöé Γöé ΓööΓöÇΓöÇ WPRPrinter
Γöé Γö£ΓöÇΓöÇ WPProgram
Γöé Γö£ΓöÇΓöÇ WPShadow
Γöé Γöé ΓööΓöÇΓöÇ WPNetLink
Γöé Γö£ΓöÇΓöÇ WPShredder
Γöé Γö£ΓöÇΓöÇ WPSound
Γöé Γö£ΓöÇΓöÇ WPSpecialNeeds
Γöé Γö£ΓöÇΓöÇ WPSpool
Γöé Γö£ΓöÇΓöÇ WPSystem
Γöé ΓööΓöÇΓöÇ WPWinConfig
Γö£ΓöÇΓöÇ WPFileSystem
Γöé Γö£ΓöÇΓöÇ WPDataFile
Γöé Γöé Γö£ΓöÇΓöÇ WPBitmap 3)
Γöé Γöé Γö£ΓöÇΓöÇ WPHtml 2)
Γöé Γöé Γö£ΓöÇΓöÇ WPIcon
Γöé Γöé Γö£ΓöÇΓöÇ WPMet
Γöé Γöé Γö£ΓöÇΓöÇ WPPif
Γöé Γöé Γö£ΓöÇΓöÇ WPPointer
Γöé Γöé Γö£ΓöÇΓöÇ WPProgramFile
Γöé Γöé Γöé ΓööΓöÇΓöÇ WPCommandFile
Γöé Γöé Γö£ΓöÇΓöÇ WPUrl 2)
Γöé Γöé ΓööΓöÇΓöÇ WebExplorer_Url 1)
Γöé ΓööΓöÇΓöÇ WPFolder
Γöé Γö£ΓöÇΓöÇ WPDesktop
Γöé Γö£ΓöÇΓöÇ WPDrives
Γöé Γö£ΓöÇΓöÇ WPHost 2)
Γöé Γö£ΓöÇΓöÇ WPHvManager 2)
Γöé Γö£ΓöÇΓöÇ WPMinWinViewer
Γöé Γö£ΓöÇΓöÇ WPNetgrp
Γöé Γö£ΓöÇΓöÇ WPNetwork
Γöé Γö£ΓöÇΓöÇ WPRootFolder
Γöé Γö£ΓöÇΓöÇ WPServer
Γöé Γö£ΓöÇΓöÇ WPSharedDir
Γöé Γö£ΓöÇΓöÇ WPStartup
Γöé Γö£ΓöÇΓöÇ WPUrlFolder 2)
Γöé ΓööΓöÇΓöÇ WPTemplates
ΓööΓöÇΓöÇ WPTransient
Γö£ΓöÇΓöÇ WPDevice 2)
Γöé Γö£ΓöÇΓöÇ WPDevAudio 2)
Γöé Γö£ΓöÇΓöÇ WPDevBus 2)
Γöé Γö£ΓöÇΓöÇ WPDevCDRom 2)
Γöé Γö£ΓöÇΓöÇ WPDevCPU 2)
Γöé Γö£ΓöÇΓöÇ WPDevDiskette 2)
Γöé Γö£ΓöÇΓöÇ WPDevDisplay 2)
Γöé Γö£ΓöÇΓöÇ WPDevHarddrive 2)
Γöé Γö£ΓöÇΓöÇ WPDevKeyboard 2)
Γöé Γö£ΓöÇΓöÇ WPDevMemory 2)
Γöé Γö£ΓöÇΓöÇ WPDevMouse 2)
Γöé Γö£ΓöÇΓöÇ WPDevParallel 2)
Γöé Γö£ΓöÇΓöÇ WPDevPeriph 2)
Γöé Γö£ΓöÇΓöÇ WPDevSerial 2)
Γöé Γö£ΓöÇΓöÇ WPDevTape 2)
Γöé ΓööΓöÇΓöÇ WPDevTimer 2)
Γö£ΓöÇΓöÇ WPJob
Γö£ΓöÇΓöÇ WPPdr
Γö£ΓöÇΓöÇ WPPort
ΓööΓöÇΓöÇ WPQdr
Notices:
1) This is not a standard WPS class and might not be present on every Warp 3
system.
2) This class is available only on OS/2 Warp 4.
3) In Warp 4, WPBitmap is a subclass of WPImageFile, which is in turn a
subclass of WPDataFile.
ΓòÉΓòÉΓòÉ 17.2. WPS Object IDs ΓòÉΓòÉΓòÉ
The following Object IDs are predefined when installing OS/2 and should thus be
accessible on every system (unless the corresponding object has been deleted by
the user).
System folders:
<WP_NOWHERE>: Hidden folder (where the launchpad resides, "?:\Nowhere")
<WP_DESKTOP>: the currently active desktop
<WP_OS2SYS>: OS/2 System folder
<WP_TEMPS>: Templates folder
<WP_CONFIG>: System Setup folder
<WP_START>: Startup folder
<WP_INFO>: Information folder
<WP_DRIVES>: Drives folder
<WP_PROMPTS>: Command Prompts folder
<WP_TOOLS>: Productivity folder
<WP_GAMES>: Games folder
Other system objects:
<WP_VIEWINF>: VIEW.EXE program
<WP_SYSED>: OS/2 System Editor
<WP_ICON>: Icon Editor
<WP_PULSE>: Pulse
<WP_CLIPV>: Clipboard Viewer
<WP_OS2FS>: OS/2 Full Screen session
<WP_OS2WIN>: OS/2 Window session
<WP_DOSFS>: DOS Full Screen session
<WP_DOSWIN>: DOS Window session
<WP_WINFS>: Win-OS/2 Full Screen session
<WP_WIN2WIN>: Win-OS/2 Window session
<WP_KEYB>: Keyboard settings
<WP_MOUSE>: Mouse settings
<WP_SYSTEM>: System settings
<WP_CNTRY>: Country settings
<WP_SOUND>: Sound settings
<WP_SPOOL>: Spooler
<WP_FONTPAL>: Font Palette
<WP_HIRESCLRPAL>: Color Palette 1
<WP_LORESCLRPAL>: Color Palette 2
<WP_SCHPAL>: Scheme Palette
<WP_VIEWER>: Minimized Windows Viewer
<WP_SHRED>: Shredder
<WP_CLOCK>: System Clock
In addition, XFolder introduces the following object IDs:
<XFOLDER_CONFIG>: the (main) XFolder Configuration folder
<XFOLDER_STARTUP>: the XFolder Startup folder
<XFOLDER_SHUTDOWN>: the XFolder Shutdown folder
<XFOLDER_WPS>: the "OS/2 Kernel" object
<XFOLDER_WPS>: the "Workplace Shell" object
<XFOLDER_REF>: the "XFolder Online Reference" program object
ΓòÉΓòÉΓòÉ 17.3. WPFolder Setup Strings ΓòÉΓòÉΓòÉ
In order to change a certain object's setting with REXX, use the following
RexxUtil function:
rc = SysSetObjectData(<name>, <setup>)
with:
<name> being the object you wish to change (referenced either by a full path
specification or an object ID, such as <WP_DESKTOP>);
<setup> being one of the WPS setup strings, which always have a
<keyword>=<data> syntax. You can combine several settings by separating them
with semicola (";").
Example:
if SysSetObjectData(directory(),"NOMOVE=YES;DEFAULTVIEW=ICON") then
Say "Settings changed!"
This will change the folder settings for the current directory, which is useful
for scripts called by XFolder, which have the intended directory already
changed to.
See the OS/2 REXX Reference for details.
The list below describes all the setup strings for the WPObject class, plus
additional strings supported by the WPFolder class. (In short, you may use any
of the following strings on folders.) The list is sorted alphabetically.
ALWAYSSORT={YES|NO}
Set whether folder sort order is always maintained. Opening and adding an
object to a folder may take longer if the sort order is being maintained.
Note: XFolder overrides this setting string if you have the extended sort
functions enabled. See "XFolder setup strings" for the changes with respect to
this setting.
BACKGROUND=<name>,<mode>,<factor>,<bgtype>,<bgcol>
This sets the folder background, where:
<name> = Image file name. This name must be the fully qualified path of the
image file. "?:\" is permitted to indicate the boot drive.
<mode> = Image mode. This mode can be one of the following:
N = Normal image
T = Tiled image
S = Scaled image
<factor> = Scaling factor.
<bgtype> = Background type. This can be one of the following:
I = Image
C = Color only
<bgcol> = Background color. This color can be 3 numbers representing RGB values
or the default, in the following format: {R-value G-value B-value}
Example: BACKGROUND=C:\OS2\BITMAP\OS2LOGO.BMP,S,3,I or BACKGROUND=(none),,,C,0
128 128
CCVIEW=DEFAULT
Uses the default value of the concurrent view setting of the system, when the
user selects open. This is the default value.
CCVIEW=YES
Creates new views of the object every time the user selects open.
CCVIEW=NO
Resurfaces open views of object, when the user selects open.
DEFAULTVIEW=DEFAULT
Sets the default open view to what was specified in the OS/2 System object.
This is the default value.
DEFAULTVIEW={SETTINGS|ICON|TREE|DETAILS}
Sets the default open view to the specified folder view.
DETAILSCLASS=<classname>
This sets the object class for which the details are displayed in details view.
The default object class is WPFileSystem. You better not mess with this one.
DETAILSFONT=<size>.<facename>
Change the font used for a details view. For example: 9.WarpSans Bold. The
default value is 8.Helv (on Warp 3)
DETAILSSHADOWCOLOR=<color> (Warp 4 only)
Text color for a shadow object in the Details View. <color> may be standard
color name or an r g b set of numbers.
DETAILSTEXTCOLOR=<color> (Warp 4 only)
Text color for normal objects in the Details View. <color> may may be standard
color name or an r g b set of numbers.
DETAILSVIEW=<style>
This set details view to the specified style. Possible values are:
MINI small icon; this is the default.
NORMAL normal-size icon.
HELPLIBRARY=<filename>
Sets the help library.
HELPPANEL=<id>
Sets the object's default help panel within the help library. You better not
mess with these settings, for you have to know the WPS internal help resource
IDs.
HIDEBUTTON={YES|NO}
Determine whether views of this object have a hide button as opposed to a
minimize button. The default is the current system Button appearance for
windows setting. This cannot be specified here.
ICONFILE=<filename>
Sets the folder's closed icon. <filename> must be a ".ICO" file.
ICONFONT=<size>.<facename>
Setup string used to change the font used for an icon view. For example:
10.Helv
ICONNFILE=<index>,<filename>
This sets the file name of the animation (open folder) icon. The <index> value
must be set to 1. The specified file (".ICO") contains the folder's open folder
icon.
ICONNRESOURCE=<index>,<id>,<modname>
Sets the animation (open folder) icon to data residing in a resource file. The
<index> value must be set to 1. The <id> is the identity of an icon resource in
the <module> dynamic link library (DLL). The specified resource is the folder's
open folder icon.
ICONPOS=<x>,<y>
Sets the folder's initial icon position in the parent folder. The x and y
values represent the position in the folder in percentage coordinates.
ICONRESOURCE=<id>,<modname>
Sets the object's icon to data residing in a resource file. The <id> is the
icon resource ID in the dynamic link library (DLL) <module>.
ICONSHADOWCOLOR=<color> (Warp 4 only)
Text color for shadow icons in the Icons View. <color> may be a standard color
name or an r g b set of numbers.
ICONTEXTBACKGROUNDCOLOR=<color> (Warp 4 only)
Background color for normal text in the Icons, Tree and Details View. <color>
may be a standard color name or an r g b set of numbers.
ICONTEXTCOLOR=<color> (Warp 4 only)
Text color for normal icons in the Icons View. <color> may be a standard color
name or an r g b set of numbers.
ICONTEXTVISIBLE={YES|NO}
The names of objects contained in a folder are displayed or not displayed in
the Icon View.
ICONVIEW=<style1>[,<style2>...]
This sets icon view to the specified styles. Possible values are: FLOWED NOGRID
INVISIBLE NONFLOWED MINI NORMAL
The default value is NOGRID,NORMAL
These settings correspond to the "Icon view" page in a folder's settings
notebook.
ICONVIEWPOS=<x>,<y>,<cx>,<cy>
This sets the initial icon view position and size of the folder on the screen.
These values are percentages (0-100) of the screen size.
LOCKEDINPLACE={YES|NO} (Warp 4 only)
This object is fixed or not fixed in position.
MENUBAR={YES|NO} (Warp 4 only)
The menubar of the folder is displayed or not displayed.
MENUITEMSELECTED <menu-item-id> (Warp 4 only)
Simulates selecting the specified menu item from the object's popup menu.
<menu-item-id> must be a numeric value.
You may obtain the <menu-item-id> with the XRAY tool which is available on the
Internet. Or look on the respective "WPS Menu IDs" page (Hey, this setting
works for XFolder menu items also, BTW.)
This is not really a "setting", but rather a command to be performed on the
folder.
MENUS={SHORT|LONG} (Warp 4 only)
Determine whether this objects has a short popup menu (without menu entries
that duplicate drag 'n' drop functions) or the full one.
MINWIN={HIDE|VIEWER|DESKTOP}
Determine whether the minimized folder will be hidden, placed into the
Minimized Windows View, or minimized to the desktop.
The default is the current Minimize button setting. This cannot be specified
here.
NOCOPY={YES|NO}
The folder cannot be copied.
NODELETE={YES|NO}
The folder cannot be deleted. Be careful with this one.
NODRAG={YES|NO}
The folder cannot be dragged with the mouse.
NODROP={YES|NO}
The folder will not accept any objects dropped upon it.
NOLINK={YES|NO}
No shadows can be created of this folder.
NOMOVE={YES|NO}
The folder cannot be moved.
NOPRINT={YES|NO}
The folder cannot be printed. This is default value. Why would you want to
print a folder?
NORENAME={YES|NO}
The folder cannot be renamed.
NOSETTINGS={YES|NO}
The folder's settings notebook cannot be opened.
NOSHADOW={YES|NO}
same as NOLINK.
NOTVISIBLE={YES|NO}
The folder is not visible. Be careful with this style, since you might not be
able to get the folder back.
OBJECTID=<<name>>
Sets a persistent ID for the object. An Object ID is any unique string preceded
with a < and terminated with a >.
Object IDs are useful for identifying objects without knowing their exact
location on the user's desktop. For example, the desktop always has the ID
<WP_DESKTOP> on every system; the XFolder Configuration folder is assigned an
ID of <XFOLDER_CONFIG>, so that XFolder finds it even though you might have
moved it to a different location. See the "WPS Object IDs" page for a listing
of system IDs.
Object IDs are even neccessary to be able to locate abstract WPS objects (e.g.
shadows or program objects) from REXX, since these objects do not appear in the
file system. So if you create an abstract object from REXX and wish to be able
to open it from REXX also, you must assign it an Object ID.
The default is to not have an ID.
OPEN={SETTINGS|DEFAULT|ICON|TREE|DETAILS}
Open a view now. This is the clever trick used by a zillion REXX scripts on the
Internet to open a folder from the OS/2 command line.
OPEN=DEFAULT will open the default view of the folder (as if you had
double-clicked on it).
This is not really a "setting", but rather a command to be performed on the
folder. It will open immediately.
REMOVEFONTS={YES|NO}
This can remove all instance fonts from the folder, i.e. the ones that apply to
this folder only (specified by the respective object settings strings or in the
folder Settings notebook). Default is NO.
This is not really a "setting", but rather a command to be performed on the
folder.
SHOWALLINTREEVIEW={YES|NO} (Warp 4 only)
Show all objects in an open Tree View or only folders.
SORTCLASS=<classname>
This sets the class object to sort by. The default class object is
WPFileSystem.
TEMPLATE={YES|NO}
Determines whether this folder is a template or not. Default is NO (of course).
TITLE=<title>
Sets the object's title to something new. This will also change the "real"
filename, just as if you had changed the title from the WPS.
TREEFONT=<size>.<facename>
Setup string used to change the font used for an Tree view. For example:
10.Helv
TREESHADOWCOLOR=<color> (Warp 4 only)
Text color for shadow icons in the Tree View. <color> may be a standard color
name or an r g b set of numbers.
TREETEXTCOLOR=<color> (Warp 4 only)
Text color for normal icons in the Tree View. <color> may be a standard color
name or an r g b set of numbers.
TREETEXTVISIBLE={YES|NO} (Warp 4 only)
The names of the objects contained in a folder are displayed or not dispalyed
in Tree View.
TREEVIEW=<style1>[,<style2>...]
This sets the tree view to the specified styles. Possible values are: INVISIBLE
LINES MINI NOLINES NORMAL
The default value is LINES, NORMAL
These settings correspond to the "Tree view" page in a folder's settings
notebook.
WORKAREA={YES|NO}
This sets the folder so it is a workarea. Default is NO.
ΓòÉΓòÉΓòÉ 17.4. New XFolder Setup Strings ΓòÉΓòÉΓòÉ
The following setup strings can be used the same way as the regular folder
setup strings described on the previous page; however, they work only when
XFolder is properly installed. These setup strings have been introduced with
XFolder V0.70.
ACCELERATORS={YES|NO|DEFAULT}
Sets for an individual folder whether it will respond to folder hotkeys. This
setting corresponds to the one on the "XFolder" notebook settings page. YES or
NO will set this setting for this folder no matter what was specified in the
XFolder Global Settings, while DEFAULT will set this setting to the Global
Settings value. See "Folder hotkeys" for details.
ALWAYSSORT={YES|NO|DEFAULT}
Sets for an individual folder whether it will always maintain its sort order.
As opposed to the standard WPS folder setup string, XFolder's new
interpretation also accepts "DEFAULT" as a parameter, which will reset the
setting to what you specified on the "Sort" page in the "System" object.
DEFAULTSORT=<crit>
This will set the default sort criterion for an individual folder to something
different from the global sort criterion. <crit> may be one of the following:
0 sort by name
1 sort by type
2 sort by object class
3 sort by real name
4 sort by size
5 sort by last write date
6 sort by last access date
7 sort by creation date
8 sort by file name extension
9 sort folders first
255 reset to global default sort criterion
FAVORITEFOLDER={YES|NO}
Sets for an individual folder whether its contents can be viewed from all
context menus on your system. Default is NO. There is no global value for this
setting. See "Folder content functions" for details.
FULLPATH={YES|NO|DEFAULT}
Sets for an individual folder whether its full path will be displayed in its
window title. This setting corresponds to the one on the "XFolder" notebook
settings page. YES or NO will set this setting for this folder no matter what
was specified in the XFolder Global Settings, while DEFAULT will set this
setting to the Global Settings value. See "Full path in window titles" for
details.
SNAPTOGRID={YES|NO|DEFAULT|EXEC}
Sets for an individual folder whether the "Snap to grid" item will appear in
the folder's context menu. This setting corresponds to the one on the "XFolder"
notebook settings page. YES or NO will set this setting for this folder no
matter what was specified in the XFolder Global Settings, while DEFAULT will
set this setting to the Global Settings value. EXEC will execute the "Snap to
grid" function on the folder, just as if you had selected it from the context
menu. EXEC is thus no setting, but a command to be performed on a folder. See
"Snap to grid" for details.
SORTNOW=<crit>
This will sort all currently open views of an individual folder without
changing a folder's setting (as opposed to DEFAULTSORT). This is not really a
"setting", but rather a command to be performed on a folder.
<crit> may be one of the following:
0 sort by name
1 sort by type
2 sort by object class
3 sort by real name
4 sort by size
5 sort by last write date
6 sort by last access date
7 sort by creation date
8 sort by file name extension
9 sort folders first
255 use default sort criterion
STATUSBAR={YES|NO|DEFAULT}
Sets the visibility state for an individual folder status bar. This setting
corresponds to the one on the "XFolder" notebook settings page. YES or NO will
set this setting for this folder no matter what was specified in the XFolder
Global Settings, while DEFAULT will set this setting to the Global Settings
value. See "Folder status bars" for details.
ΓòÉΓòÉΓòÉ 17.5. WPS Menu IDs ΓòÉΓòÉΓòÉ
When using the WPObject setup string MENUITEMSELECTED, the following menu IDs
might be useful to you. Please keep in mind that not all of these are intended
for all kinds of objects; for example, "Format disk" does not make sense on
folders, and I don't know what will happen if you try this out. If you're
lucky, nothing happens.
Note that the new menu items introduced by XFolder have no fixed menu IDs, so
they're not listed here. The XFolder menu items have variable menu IDs, whose
base is specified with the "XFolder menu item ID offset" global setting. This
base is added to WPMENUID_USER, which is 0x6500 (25856 decimal), and the
XFolder menu ID's are then added to that base to allow compatibility with other
WPS enhancers. So if you wish to use an XFolder menu item with
MENUITEMSELECTED, you need some utility such as XRAY to figure out the "real"
menu id. The ID will of course change again if you change the offset setting.
The following WPS menu IDs are taken from the Warp 3 Toolkit docs (I have
excluded those which make no sense when called from REXX):
WPMENUID_OPEN 1
WPMENUID_HELP 2
WPMENUID_PRINT 3
WPMENUID_SELECT 4
WPMENUID_SORT 5
WPMENUID_FIND 8
WPMENUID_CREATEANOTHER 101
WPMENUID_MOVE 107
WPMENUID_COPY 108
WPMENUID_CREATESHADOW 316
WPMENUID_DELETE 109
WPMENUID_PROPERTIES 112
WPMENUID_PALETTE 317 ("Open" -> "Palette")
WPMENUID_REFRESH 503
WPMENUID_HELP_FOR_HELP 601
WPMENUID_HOWTOGETHELP 601
WPMENUID_EXTENDEDHELP 602
WPMENUID_HELPKEYS 603
WPMENUID_HELPINDEX 604
The following menu items are for the "Pickup" ("lazy drag") function:
WPMENUID_PICKUP 188
WPMENUID_PUTDOWN 189
WPMENUID_PUTDOWN_COPY 190
WPMENUID_PUTDOWN_MOVE 191
WPMENUID_PUTDOWN_LINK 192
WPMENUID_PUTDOWN_CANCEL 193
WPMENUID_PUTDOWN_CREATE 194
WPFolder items:
WPMENUID_SELALL 114
(select all folder items)
WPMENUID_DESELALL 115
(deselect all folder items)
WPMENUID_CLOSE 120
WPMENUID_TREE 123
("Open" -> "Tree view")
WPMENUID_ICON 303
("Open" -> "Icon view")
WPMENUID_DETAILS 304
("Open" -> "Details view")
WPMENUID_ARRANGE 309
(on Warp 4, this is the "Default" Arrange item)
WPDesktop items:
WPMENUID_SHUTDOWN 704 (WPDesktop items)
WPMENUID_LOCKUP 705
WPMENUID_LOGIN 708
WPMENUID_LOGOUT 709
WPMENUID_ASSIGN 710
WPMENUID_UNASSIGN 711
WPMENUID_ACCESSNEW 712
WPMENUID_SYSTEMSETUP 713
WPMENUID_FORMAT 124 (WPDisk items)
WPMENUID_CHKDSK 128
WPMENUID_FIXDSK 129
WPMENUID_PROGRAM 132
WPMENUID_COPYDSK 182
WPMENUID_LOCKDISK 184
WPMENUID_EJECTDISK 185
WPMENUID_UNLOCKDISK 186
The following IDs are not officially documented by IBM, thus their symbols are
not official (but invented by me). Most of them are available on OS/2 Warp 4
only. The menu IDs are now in hexadecimal (use the REXX function X2D to
convert them to decimal):
WPMENUID_PASTE 0x2CB
WPMENUID_VIEW_ICON 0x2CC
("View" -> "Icon view", as opposed to "Open"; Warp 4 only)
WPMENUID_VIEW_TREE 0x2CD
("View" -> "Tree view", as opposed to "Open"; Warp 4 only)
WPMENUID_VIEW_DETAILS 0x2CE
("View" -> "Details view", as opposed to "Open"; Warp 4 only)
WPMENUID_SORTBYNAME 0x1770
WPMENUID_SORTBYTYPE 0x1771
WPMENUID_SORTBYREALNAME 0x1777
WPMENUID_SORTBYSIZE 0x1778
WPMENUID_SORTBYWRITEDATE 0x1779
WPMENUID_SORTBYACCESSDATE 0x177B
WPMENUID_SORTBYCREATIONDATE 0x177D
WPMENUID_ARRANGEFROMTOP 0x2DE
WPMENUID_ARRANGEFROMLEFT 0x2DF
WPMENUID_ARRANGEFROMRIGHT 0x2E0
WPMENUID_ARRANGEFROMBOTTOM 0x2E1
WPMENUID_ARRANGEPERIMETER 0x2E3
WPMENUID_ARRANGEHORIZONTALLY 0x2E4
WPMENUID_ARRANGEVERTICALLY 0x2E5
WPMENUID_LOCKINPLACE 0x2DA
WPMENUID_VIEW 0x68
WPMENUID_REFRESH 0x1F7
ΓòÉΓòÉΓòÉ 18. Resources on the Internet ΓòÉΓòÉΓòÉ
This chapter contains all external links referenced in this book. Each link
contained herein is an Unified Resource Locator (URL) to a certain location on
the Internet. Simply double-click on one of them to launch Netscape with the
respective URL.
ΓòÉΓòÉΓòÉ 18.1. http://developer.netscape.com/library/documentation/communicator/DDE ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://developer.netscape.com/library/documentation/communicator/DDE
ΓòÉΓòÉΓòÉ 18.2. http://www.edm2.com/ ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.edm2.com/
ΓòÉΓòÉΓòÉ 18.3. http://www.gate.net/~shipbrk/mozilla.html ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.gate.net/~shipbrk/mozilla.html
ΓòÉΓòÉΓòÉ 18.4. http://www.leo.org/pub/comp/os/os2/ ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.leo.org/pub/comp/os/os2/
ΓòÉΓòÉΓòÉ 18.5. http://www.mindspring.com/~os2headquarters/ ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.mindspring.com/~os2headquarters/
ΓòÉΓòÉΓòÉ 18.6. http://www.netlabs.org ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.netlabs.org
ΓòÉΓòÉΓòÉ 18.7. http://www.online-club.de/m1/clanganke/ ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.online-club.de/m1/clanganke/
ΓòÉΓòÉΓòÉ 18.8. http://www.os2bbs.com/os2news/OS2Wishlist.html ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.os2bbs.com/os2news/OS2Wishlist.html
ΓòÉΓòÉΓòÉ 18.9. http://www.os2ezine.com ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.os2ezine.com
ΓòÉΓòÉΓòÉ 18.10. http://www.os2ss.com/information/kelder/index.html ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.os2ss.com/information/kelder/index.html
ΓòÉΓòÉΓòÉ 18.11. http://www.ozemail.com.au/~dbareis/ ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www.ozemail.com.au/~dbareis/
ΓòÉΓòÉΓòÉ 18.12. http://www2.crosswinds.net/hartford/~os2/index.html ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www2.crosswinds.net/hartford/~os2/index.html
ΓòÉΓòÉΓòÉ 18.13. http://www2.rz.hu-berlin.de/~h0444vnd/os2.htm ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://www2.rz.hu-berlin.de/~h0444vnd/os2.htm
ΓòÉΓòÉΓòÉ 18.14. http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt6364.HTML ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt6364.HTML
ΓòÉΓòÉΓòÉ 18.15. http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt8881.HTML ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://zebra.asta.fh-weingarten.de/os2/Snippets/Howt8881.HTML
ΓòÉΓòÉΓòÉ 18.16. http://zebra.asta.fh-weingarten.de/os2/Snippets/Isdr8319.HTML ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
http://zebra.asta.fh-weingarten.de/os2/Snippets/Isdr8319.HTML
ΓòÉΓòÉΓòÉ 18.17. mailto:e9425324@student.tuwien.ac.at ΓòÉΓòÉΓòÉ
Click below to launch Netscape with this URL:
mailto:e9425324@student.tuwien.ac.at