Interruption 21h |
Fonction 64h |
OS/2 API DOS32StartSession |
---|---|---|
OS/2 Version 2.1+ |
Description
Cette fonction permet de lancer une nouvelle session sous OS/2 indépendante ou non de la session de boite de compatibilité DOS (Virtual DOS Machine) actuel.
Entrée
Registre | Valeur ou description | |||||
---|---|---|---|---|---|---|
AH | 64h | |||||
BX | 0025h (API ordinaire) | |||||
CX | 636Ch ("cl") | |||||
DS:SI | Cette paire de registres permet d'indiquer la Structure de la «StartData» de la boite de comptabilité DOS d'OS/2 : | |||||
Déplacement | Taille | Description | ||||
00h | Mot (Word) | Longueur de la structure (peut être 0018h, 001Eh, 0020h, 0032h ou 003Ch) | ||||
02h | Mot (Word) | Relation du nouveau processus à appeler : | ||||
Code | Description | |||||
00h | Totalement indépendante de la session actuel | |||||
01h | Enfant de la session actuel | |||||
04h | Mot (Word) | La priorité de la session : | ||||
Code | Description | |||||
00h | Passe au premier plan | |||||
01h | Exécuter en arrière-plan | |||||
06h | Mot (Word) | Les options de trace (00h à 02h, 00h = Aucun traçage) | ||||
08h | Double mots | Pointeur sur le titre en format ASCIZ du programme (maximum de 62 caractères) ou sur l'adresse nulle (0000h:0000h) | ||||
0Ch | Double mots | Pointeur sur le nom en format ASCIZ du programme (maximum de 128 caractères) ou sur l'adresse nulle (0000h:0000h) | ||||
10h | Double mots | Pointeur sur les arguments en format ASCIZ du programme (maximum de 144 caractères ou sur l'adresse nulle (0000h:0000h). | ||||
14h | Double mots | "TermQ" (Normalement réservée, peut être 00000000h) | ||||
18h | Double mots | Pointeur sur les variables d'environnement (maximum de 486 octets) ou sur l'adresse nulle (0000h:0000h) si vous utiliser pas de nouvel environnement spécifique. | ||||
1Ch | Mot (Word) | Héritier de cette session-ci (00h ou 01h) | ||||
1Eh | Mot (Word) | Type de session demandée : | ||||
Code | Description | |||||
00h | Gestionnaire de session OS/2 va déterminer le type de session devant être lancée (par défaut) | |||||
01h | OS/2 pleine écran | |||||
02h | OS/2 en fenêtre | |||||
03h | Gestionnaire de présentation d'OS/2 (PM) | |||||
04h | VDM pleine écran | |||||
07h | VDM en fenêtre | |||||
20h | Double mots | Pointeur sur le nom de l'icône à utilisée en format ASCIZ pour cette session (maximum de 128 caractères) ou l'adresse nulle (0000h:0000h) s'il n'y en pas de spécifique. | ||||
24h | Double mots | Le "Handle" du programme (normalement réservée, peut être 00000000h) | ||||
28h | Mot (Word) | Le contrôle de programme | ||||
2Ah | Mot (Word) | Nombre de colonne initialement | ||||
2Ch | Mot (Word) | Nombre de ligne initialement | ||||
2Eh | Mot (Word) | Largeur initialement | ||||
30h | Mot (Word) | Hauteur initialement | ||||
32h | Mot (Word) | Réservée (valeur nulle (0)) | ||||
34h | Double mots | Tampon de l'objet (normalement réservée, peut être 00000000h) | ||||
38h | Double mots | Longueur du tampon de l'objet (normalement réservée, peut être 00000000h) |
Sortie
Registre | Valeur ou description |
---|---|
AX | Code de retour |
Exemple
L'exemple suivant, écrit en Turbo Pascal 7 pour DOS, permet d'exécuter l'interpréteur de commande OS/2 à partir d'une session de DOS :
- Program ExecOS2;
-
- Const
-
- { Relation du processus }
- prNew=$0001; { Indépendant }
- prChild=$0002; { Enfant }
-
- { Priorité de la session }
- prForeground=$0000; { Premier plan }
- prBackground=$0001; { Arrière plan }
-
- { Modèle de session }
- stDefault=$0000; { Par défaut }
- stOS2FullScrn=$0001; { OS/2 Plein écran }
- stOS2Window=$0002; { OS/2 en fenêtre }
- stPM=$0003; { Gestionnaire de présentation d'OS/2 }
- stDosFullScrn=$0004; { DOS pleine écran }
- stDosWindow=$0007; { DOS en fenêtre }
-
- Type
- OS2StartData=Record
- LenStruct:Word; { Longueur de la structure (peut être }
- { 0018h, 001Eh, 0020h, 0032h, 003Ch) }
- Process:Word; { Relation du nouveau processus (pr??): }
- { 0000h = Indépendant, 0001h = Enfant}
- Priority:Word; { Priorité de la session: }
- { 0000h = Premier plan }
- { 0001h = Arrière plan }
- Trace:Word; { Les options de traces }
- Title:PChar; { Titre du programme }
- Name:PChar; { Nom du programme }
- Args:PChar; { Argument du programme }
- TermQ:PChar; { "TermQ"}
- Environment:PChar; { Variable d'environnement }
- Inherit:WordBool; { Héritier des données }
- SessionType:Word; { Modèle de session }
- Icon:PChar; { Nom de l'icône }
- PgmHandle:PChar; { Le "Handle" du programme }
- PgmControl:Word; { Le contrôle du programme }
- Column:Word; { Colonne }
- Row:Word; { Ligne }
- Width:Word; { Largeur }
- Height:Word; { Hauteur }
- Reserved:Word; { Réservée }
- ObjectBuffer:LongInt; { Pointeur sur le tampon d'objet }
- ObjectBufferLen:Word; { Longueur du tampon d'objet }
- End;
-
- Function OS2Exec(Const Data:OS2StartData):Word;Assembler;ASM
- PUSH DS
- LDS SI,Data
- MOV AH,064h
- MOV BX,0025h
- MOV CX,636Ch
- INT 21h
- POP DS
- END;
-
- Var
- Data:OS2StartData;
- Error:Word;
-
- BEGIN
- FillChar(Data,SizeOf(Data),0);
- Data.LenStruct:=$32;
- Data.Process:=prNew;
- Data.Priority:=prForeground;
- Data.Title:='Programme fils';
- Data.Name:='C:\OS2\cmd.exe';
- Data.Args:='';
- Error:=OS2Exec(Data);
- END.
Voir également
Langage de programmation - C pour OS/2 - DosStartSession
Dernière mise à jour : Jeudi, le 3 mars 2016