Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
en:docs:os2:api:vio [2021/09/14 05:00] – prokushev | en:docs:os2:api:vio [2021/09/14 09:47] – prokushev | ||
---|---|---|---|
Line 1: | Line 1: | ||
{{page> | {{page> | ||
- | ====== Video Subsystem ====== | + | ====== |
+ | |||
+ | ===== Family API (OS/2 mode) ===== | ||
+ | |||
+ | OS/2 Video Subsystem (VIO in short) aimed to provide text-mode and graphics-mode (full screen sessions only) video output. Original VIO supports 43 functions which mostly improvement of Video BIOS INT 10H API. Functions are much richer comparing to Video BIOS. It is supports Logical Video Buffer, which allow to have output in background sessions, while screen no accesable. Temporary video session allow to build message notifications system to handle errors and exceptions. Most of functions (41 function) can be replaced by user-defined functions by Alternate Video System. Alternate Video System can hanlde function and then return to caller or pass control lower, to Base Video System. You can register not all but some Alternate Video Subsystem functions, and user Base Video Subsystem for othe functions. Some VIO functions supported in Dual-mode applications by Family API. Under DOS functions simplier but powerfull yes. Many command line tools are Dual Mode applications, | ||
< | < | ||
Line 10: | Line 14: | ||
| CCC |CCC=VIO router | | CCC |CCC=VIO router | ||
| |!@4 | | | |!@4 | | ||
- | | | + | | BBB |BBB=Alternate Video Subsystem |
| |!@4 | | | |!@4 | | ||
| CCC |CCC=VIO router | | CCC |CCC=VIO router | ||
Line 17: | Line 21: | ||
</ | </ | ||
- | OS/2 Video subsystem placed in VIOCALLS.DLL | + | OS/2 Video subsystem placed in VIOCALLS.DLL. Called VIO function passes control to internal |
- | Such route in original | + | In pseudo code it looks like this |
+ | |||
+ | < | ||
+ | Application calls VioGetAnsi | ||
+ | VioGetAnsi calls VioRoute | ||
+ | if AVS registered then | ||
+ | VioRoute calls AVS VioGetAnsi | ||
+ | if AVS VioGetAnsi requires to call BVS then | ||
+ | VioRouter сalls BVS VioGetAnsi | ||
+ | else | ||
+ | VioRouter calls BVS VioGetAnsi | ||
+ | Return to application | ||
+ | </ | ||
+ | |||
+ | OS/2 1.1 introduced Program Manager and VIO was extended to support windowed OS/2 text-based sessions. This extended Vio was named as Advanced VIO. | ||
+ | |||
+ | Such route specific to OS/2 1.0 and 1.1. OS/2 1.2 includes | ||
< | < | ||
Line 26: | Line 46: | ||
| BBB |BBB=[[en: | | BBB |BBB=[[en: | ||
| |!@4 | | | |!@4 | | ||
- | | BBB |BBB=[[en: | + | | CCC |CCC=VIO router |
| |!@4 | | | |!@4 | | ||
- | | CCC | - | -@2 |DDD|DDD=Alternate Video Subsystem/Global Video Subsystem|CCC=VIO router | + | | DDD |
+ | | |!@4 | | ||
+ | | CCC | ||
| |!@4 | | | |!@4 | | ||
| EEE |EEE=[[en: | | EEE |EEE=[[en: | ||
- | | |!@4 | | ||
- | | BBB |BBB=[[en: | ||
| |!@4 | | | |!@4 | | ||
| EEE |EEE=Base Video Handlers | | EEE |EEE=Base Video Handlers | ||
+ | | |!@4 | | ||
+ | | EEE |EEE=[[en: | ||
+ | | |!@4 | | ||
+ | | CCC |CCC=VIO router | ||
+ | | |!@4 | | ||
+ | | DDD |DDD=Global Video Subsystem | ||
</ | </ | ||
- | In late OS/2 versions (3.x?) actual code of Video subsystem and Base Video Subsysten was moved to DOSCALLS.DLL (see Fig). OS/2 Video Subsystem is 16-bit. Later three independed versions of 32-to-16 bit wrapper subsystems was developed (See Fig) | + | In pseudo code it looks like this |
+ | |||
+ | < | ||
+ | Application calls VioGetAnsi in VIOCALLS | ||
+ | VioGetAnsi calls VioRoute | ||
+ | if AVS registered then | ||
+ | VioRoute calls AVS VioGetAnsi | ||
+ | if AVS VioGetAnsi requires to call BVS then | ||
+ | VioRouter сalls BVS VioGetAnsi | ||
+ | else | ||
+ | VioRouter calls BVS VioGetAnsi | ||
+ | If GVS registered then | ||
+ | VioRouter calls GVS VioGetAnsi | ||
+ | Return to application | ||
+ | </ | ||
+ | In OS/2 2.0 and later VIO still 16-bit. | ||
+ | |||
+ | < | ||
+ | Application calls VioGetAnsi in VIOCALLS | ||
+ | VIOCALLS forwards to DOSCALLs | ||
+ | VioGetAnsi calls VioRoute | ||
+ | if AVS registered then VioRoute calls AVS VioGetAnsi | ||
+ | if AVS VioGetAnsi requires to call BVS then VioRouter сalls BVS VioGetAnsi | ||
+ | BVSCALLS forwards to DOSCALLS | ||
+ | else VioRouter calls BVS VioGetAnsi | ||
+ | BVSCALLS forwards to DOSCALLS | ||
+ | |||
+ | Return to application | ||
+ | </ | ||
+ | |||
+ | As not part of official | ||
Line 49: | Line 105: | ||
| BBB |BBB=[[en: | | BBB |BBB=[[en: | ||
| |!@4 | | | |!@4 | | ||
- | | CCC | - | -@2 |DDD|DDD=Alternate Video Subsystem/Global Video Subsystem|CCC=VIO router | + | | CCC |CCC=VIO router |
+ | | |!@4 | | ||
+ | |DDD|DDD=Alternate Video Subsystem | ||
+ | | |!@4 | | ||
+ | | CCC | ||
| |!@4 | | | |!@4 | | ||
| EEE |EEE=[[en: | | EEE |EEE=[[en: | ||
Line 56: | Line 116: | ||
| |!@4 | | | |!@4 | | ||
| EEE |EEE=Base Video Handlers | | EEE |EEE=Base Video Handlers | ||
- | </ | ||
- | |||
- | Under DOS original IBM Family API or JdeBP' | ||
- | |||
- | < | ||
- | | AAA |AAA=Application | ||
| |!@4 | | | |!@4 | | ||
- | | BBB |BBB=[[en: | + | | EEE |EEE=[[en: |
- | </ | + | |
- | + | ||
- | Under HX DOS Extender OS/2 Emulation Family API applications uses following route | + | |
- | + | ||
- | < | + | |
- | | AAA |AAA=Application | + | |
| |!@4 | | | |!@4 | | ||
- | | BBB |BBB=[[en: | + | | CCC |CCC=VIO router |
- | </ | + | |
- | + | ||
- | Under DOS osFree Family API supports following route | + | |
- | + | ||
- | < | + | |
- | | AAA |AAA=Application | + | |
| |!@4 | | | |!@4 | | ||
- | | BBB |BBB=[[en: | + | |DDD|DDD=Global |
- | | |!@4 | | + | |
- | | CCC | - | -@2 |DDD|DDD=Alternate Video Subsystem|CCC=VIO router | + | |
- | | |!@4 | | + | |
- | | EEE |EEE=[[en: | + | |
</ | </ | ||
osFree attempts to combine all aproaches and provide following callflow | osFree attempts to combine all aproaches and provide following callflow | ||
- | |||
< | < | ||
Line 103: | Line 140: | ||
||||| |!@4 | | ||||| |!@4 | | ||
||||| CCC |CCC=VIO router | ||||| CCC |CCC=VIO router | ||
- | ||||| |!@4 | | ||
- | ||||| DDD |DDD=Global Video Subsystem | ||
||||| |!@4 | | ||||| |!@4 | | ||
||||| EEE |EEE=[[en: | ||||| EEE |EEE=[[en: | ||
Line 111: | Line 146: | ||
||||| |!@4 | | ||||| |!@4 | | ||
||||| EEE |EEE=Base Video Handlers | ||||| EEE |EEE=Base Video Handlers | ||
+ | ||||| |!@4 | | ||
+ | ||||| EEE |EEE=[[en: | ||
+ | ||||| |!@4 | | ||
+ | ||||| CCC |CCC=VIO router | ||
+ | ||||| |!@4 | | ||
+ | ||||| DDD |DDD=Global Video Subsystem | ||
</ | </ | ||
+ | |||
+ | ===== Family API (DOS mode) ===== | ||
+ | |||
+ | Under DOS original IBM Family API or JdeBP' | ||
+ | |||
+ | < | ||
+ | | AAA |AAA=Application | ||
+ | | |!@4 | | ||
+ | | BBB |BBB=[[en: | ||
+ | </ | ||
+ | |||
+ | Under HX DOS Extender OS/2 Emulation Family API applications uses following route | ||
+ | |||
+ | < | ||
+ | | AAA |AAA=Application | ||
+ | | |!@4 | | ||
+ | | BBB |BBB=[[en: | ||
+ | </ | ||
+ | |||
+ | Under DOS osFree Family API supports following route | ||
+ | |||
+ | < | ||
+ | | AAA |AAA=Application | ||
+ | | |!@4 | | ||
+ | | BBB |BBB=[[en: | ||
+ | | |!@4 | | ||
+ | | CCC |CCC=VIO router | ||
+ | | |!@4 | | ||
+ | | DDD|DDD=Alternate Video Subsystem | ||
+ | | |!@4 | | ||
+ | | CCC |CCC=VIO router | ||
+ | | |!@4 | | ||
+ | | EEE |EEE=[[en: | ||
+ | </ | ||
+ | |||