Switcher API Overview
Starting with DOS 5.0, Microsoft published information on coexisting with
the DOS task-switcher. For most applications, actions of a task switcher
are transparent, but a few programs need to avoid the potential pitfalls
possible when they are turned off and on by an external program.
█▌Who Needs the Switcher API?▐█
Some programs need to take special precautions when running under a task
switcher. For instance, modem programs will be in big trouble if they get
switched-out while online with a remote computer. These programs can
process SwNtfyFn 0001H and indicate when switching-out would be bad news.
Some TSR programs installed before the switcher can provide different
context for each DOS session. For instance, the Doskey TSR maintains a
separate "command history" and "macro set" for each DOS session. All
sessions share the same code space, but a separate data area is maintained
for each session.
Some programs need to take precautions about the use of global resources
that may be destroyed without proper handling. For instance, a word
processor may create temporary files. Each session of the program should
maintain separate files to avoid problems.
Note: Much of the Switcher API is concerned with a situation in which
two or more switchers are active simultaneously and having them
coexist peacefully. Unless you are writing a task switcher, you
may ignore most of the API.
█▌Using the Switcher API▐█
If you need to be switcher-aware, follow these steps:
1) Use INT 2fH 4B02H to see if a task-switcher is active. This also
returns the service entry address.
2) Use INT 2fH 4B05H to identify regions of your memory which must be
maintained for each session. The switcher will automatically save
and restore these areas for each session when tasks are switched.
3) If you need to be notified of a pending task-switch (in order to
clean up before the switch or to block the switch altogether), call
the service entry address with AX=0004H to "hook" the notification
chain (see SwSrvcFn 0004H). Thereafter, the switcher will call a
designated procedure in your code before switching you out.
And remember to use SwSrvcFn 0005H later, to unhook yourself before
See Also: Switcher API