DOSSMINITIALIZE
and create a few notification threads (see Tshell
description - to be published in the future) that control the
way sessions will switched between foreground and background.
The session shell typically has a menue or alike to control how to
dispatch sessions. In normal PM, this is what you can do with ALT-ESC
and CTRL-ESC keys.
For switching between fullscreen sessions, as well as switching between
FS and windowed mode of a DOS session, the session manager allows drivers
to intercept the process before and after doing screen save/restore
(this is actually what is needed for proper handling of switching between
XFree86 and PM---in XFree86 it is emulated without SESMGR; thus it
sometimes fails).
SESMGR also serializes error popups using screen locks,
i. e. a process can ask the session manager to block change of sessions
as long as it is displaying a modal box, for instance.
| SESMGR Ordinal | Name | DOSCALLS Ordinal | Type | |
| 1 | DOSSMSGDOPOPUP | 686 | 16bit | |
| 2 | DOSSMSWITCH | 687 | 16bit | |
| 3 | DOSSMSERVEAPPREQ | 688 | 16bit | |
| 4 | DOSGETTIMES | 689 | 16bit | |
| 5 | DOSSMSETTITLE | 690 | 16bit | |
| 6 | DOSSCRUNLOCK | 691 | 16bit | |
| 7 | DOSSMDOAPPREQ | 692 | 16bit | |
| 8 | DOSSTOPSESSION | 693 | 16bit | |
| 9 | DOSSELECTSESSION | 694 | 16bit | |
| 10 | DOSSCRLOCK | 695 | 16bit | |
| 11 | DOSSAVREDRAWWAIT | 696 | 16bit | |
| 12 | DOSSAVREDRAWUNDO | 697 | 16bit | |
| 13 | DOSSMSGENDPOPUP | 698 | 16bit | |
| 14 | DOSSETSESSION | 699 | 16bit | |
| 15 | DOSSETMNLOCKTIME | 700 | 16bit | |
| 16 | DOSMODEUNDO | 701 | 16bit | |
| 17 | DOSSTARTSESSION | 702 | 16bit | |
| 18 | DOSSMGETSTATUS | 703 | 16bit | |
| 19 | DOSMODEWAIT | 704 | 16bit | |
| 20 | DOSSMTERMINATE | 705 | 16bit | |
| 21 | DOSSMGETAPPREQ | 706 | 16bit | |
| 22 | unused | -- | -- | |
| 23 | DOSSMINITIALIZE | 707 | 16bit | |
| 24 | DOSSMSTART | 708 | 16bit | |
| 25 | DOSSMPARENTSWITCH | 709 | 16bit | |
| 26 | DOSSMPAUSE | 710 | 16bit | |
| 27 | DOSSMHDEINIT | 711 | 16bit | |
| 28 | DOSSMPMPRESENT | 712 | 16bit | |
| 29 | DOSSMREGISTERDD | 713 | 16bit | |
| 30 | DOSSMSYSINIT | 855 | offset | |
| 31 | DOSSMNOTIFYDD | 714 | 16bit | |
| 32 | DOSSMNOTIFYDD2 | 715 | 16bit | |
| 33 | DOSSMOPENDD | 716 | 16bit | |
| 34 | QHKEYBDHANDLE | 856 | offset | |
| 35 | QHMOUSEHANDLE | 857 | offset | |
| 36 | DOSSMSETSESSIONTYPE | 717 | 16bit | |
| 37 | DOS32STARTSESSION | 669 | 32bit | |
| 38 | DOS32SELECTSESSION | 670 | 32bit | |
| 39 | DOS32SETSESSION | 671 | 32bit | |
| 40 | DOS32STOPSESSION | 672 | 32bit | |
| 41 | DOSREGISTERNOTIFICATION | 673 | 16bit |
APIRET16 Pascal far DOSSMSGDOPOPUP(short proc,short type,short pid,short scrn)
APIRET16 Pascal far DOSSMSWITCH(short cmd,short sessid,ULONG unknown)
APIRET16 Pascal far DOSSMSERVEAPPREQ()
APIRET16 Pascal far DOSGETTIMES(USHORT* time)
APIRET16 Pascal far DOSSMSETTITLE(char* title)
APIRET16 Pascal far DOSSCRUNLOCK()
APIRET16 Pascal far DOSSMDOAPPREQ(APPREQ* appreq)
struct APPREQ {
short unknown;
short length; /* length of structure */
short type; /* request type */
short rc; /* return code */
short sessid; /* session id */
short pid; /* process id */
short tid; /* thread id */
short flgs1; /* flags 1 */
long sema1; /* semaphore 1 ? */
long sema2; /* semaphore 2 ? */
long sema3; /* semaphore 3 ? */
short qstatus; /* internal queueing status */
short flgs2; /* flags 2 */
char param[1]; /* variable length data */
};
whereas:
APIRET16 Pascal far DOSSTOPSESSION(short cmd,short sessid)
APIRET16 Pascal far DOSSELECTSESSION(short sessid)
APIRET16 Pascal far DOSSCRLOCK(short wait,UCHAR* rc)
APIRET16 Pascal far DOSSAVREDRAWWAIT(short viohdl,short* ptr,short flag)
APIRET16 Pascal far DOSSAVREDRAWUNDO(short viohdl,short kill, short flag)
APIRET16 Pascal far DOSSMSGENDPOPUP(short sgid)
APIRET16 Pascal far DOSSETSESSION(short sessid, STATUSDATA* data)
APIRET16 Pascal far DOSSETMNLOCKTIME(shorttime,short unknown)
APIRET16 Pascal far DOSMODEUNDO(short viohdl,short kill, short flag)
APIRET16 Pascal far DOSSTARTSESSION(...)
APIRET16 Pascal far DOSSMGETSTATUS(short func,void far* data)
struct header {
short length_of_header; /*8 bytes*/
short screen_group; /*function 3*/
short next_active_screengroup;
short length_of_entry;
};
struct entry { /*for each screengroup one structure*/
short screen_group_number;
char screen_group_title[32];
short is_selected;
short child_screengroup;
short type_of_screengroup;
short parent_of_child;
short next_child;
short parent_screengroup;
short type_of_group (FS/VIO/PM);
};
APIRET16 Pascal far DOSMODEWAIT(short viohdl,short*ptr,short flag)
APIRET16 Pascal far DOSSMTERMINATE(short sessionid,void* unknown)
APIRET16 Pascal far DOSSMGETAPPREQ(void far* reqblock)
struct APPREQ above.
APIRET16 Pascal far DOSSMINITIALIZE(void* args)
struct initargs {
short length; /*length of structure*/
long* sem1; /*address of a semaphore to notify
shell of a screen redraw*/
long* sem2; /*address of a semaphore to notify
that a FG session is terminated*/
long unknown;
short flag; /*=0 no PM, =1 PM exists*/
};
APIRET16 Pascal far DOSSMSTART(short flag,short mode,short type,
char far* null1,char far* null2,
char far* args, short* sessid,
long unknown)
APIRET16 Pascal far DOSSMPARENTSWITCH(CX)
APIRET16 Pascal far DOSSMPAUSE(short sgid)
APIRET16 Pascal far DOSSMHDEINIT(?)
APIRET16 Pascal far DOSSMPMPRESENT(short* flag)
APIRET16 Pascal far DOSSMREGISTERDD(void* data)
struct notify {
short length_of_struct;
short flag;
/* bitmap:
0x0001 notification before save
0x0002 notification after save
0x0004 notification after restore
0x0008 notification of termination of screengroup
0x0010 notification of creation of screengroup
0x0020 notification before switch of group
0x0040 notification after switch of group
0x0080 before ?
0x0100 after ?
*/
char far* name; /*name of device or DLL (ASCIZ)*/
};
OFFSET DOSSMSYSINIT
APIRET16 Pascal far DOSSMNOTIFYDD(short type,short newsgroup,short currsgroup)
APIRET16 Pascal far DOSSMNOTIFYDD2(short type,short newsgroup,short currsgroup)
APIRET16 Pascal far DOSSMOPENDD()
OFFSET QHKEYBDHANDLE
OFFSET QHMOUSEHANDLE
APIRET16 Pascal far DOSSMSETSESSIONTYPE(short sessid,short type)
APIRET APIENTRY32 DOS32STARTSESSION()
APIRET APIENTRY32 DOS32SELECTSESSION()
APIRET APIENTRY32 DOS32SETSESSION(ULONG sessid,STATUSDATA* data)
APIENTRY32 DOS32STOPSESSION(ULONG type,ULONG sessid)
APIRET16 Pascal far DOSREGISTERNOTIFICATION(void* data)