14 croak("%s not implemented on this architecture", s);
24 if (name[0] == 'P' && name[1] == '_') {
25 if (strEQ(name, "P_BACKGROUND"))
31 if (strEQ(name, "P_DEBUG"))
37 if (strEQ(name, "P_DEFAULT"))
43 if (strEQ(name, "P_DETACH"))
49 if (strEQ(name, "P_FOREGROUND"))
55 if (strEQ(name, "P_FULLSCREEN"))
61 if (strEQ(name, "P_MAXIMIZE"))
67 if (strEQ(name, "P_MINIMIZE"))
73 if (strEQ(name, "P_NOCLOSE"))
79 if (strEQ(name, "P_NOSESSION"))
85 if (strEQ(name, "P_NOWAIT"))
91 if (strEQ(name, "P_OVERLAY"))
97 if (strEQ(name, "P_PM"))
103 if (strEQ(name, "P_QUOTE"))
109 if (strEQ(name, "P_SESSION"))
115 if (strEQ(name, "P_TILDE"))
121 if (strEQ(name, "P_UNRELATED"))
127 if (strEQ(name, "P_WAIT"))
133 if (strEQ(name, "P_WINDOWED"))
139 } else if (name[0] == 'T' && name[1] == '_') {
140 if (strEQ(name, "FAPPTYP_NOTSPEC"))
141 #ifdef FAPPTYP_NOTSPEC
142 return FAPPTYP_NOTSPEC;
146 if (strEQ(name, "T_NOTWINDOWCOMPAT"))
147 #ifdef FAPPTYP_NOTWINDOWCOMPAT
148 return FAPPTYP_NOTWINDOWCOMPAT;
152 if (strEQ(name, "T_WINDOWCOMPAT"))
153 #ifdef FAPPTYP_WINDOWCOMPAT
154 return FAPPTYP_WINDOWCOMPAT;
158 if (strEQ(name, "T_WINDOWAPI"))
159 #ifdef FAPPTYP_WINDOWAPI
160 return FAPPTYP_WINDOWAPI;
164 if (strEQ(name, "T_BOUND"))
166 return FAPPTYP_BOUND;
170 if (strEQ(name, "T_DLL"))
176 if (strEQ(name, "T_DOS"))
182 if (strEQ(name, "T_PHYSDRV"))
183 #ifdef FAPPTYP_PHYSDRV
184 return FAPPTYP_PHYSDRV;
188 if (strEQ(name, "T_VIRTDRV"))
189 #ifdef FAPPTYP_VIRTDRV
190 return FAPPTYP_VIRTDRV;
194 if (strEQ(name, "T_PROTDLL"))
195 #ifdef FAPPTYP_PROTDLL
196 return FAPPTYP_PROTDLL;
200 if (strEQ(name, "T_32BIT"))
202 return FAPPTYP_32BIT;
216 const char* const ptypes[] = { "FS", "DOS", "VIO", "PM", "DETACH" };
225 if (!(_emx_env & 0x200)) return (char*)ptypes[1]; /* not OS/2. */
226 if (CheckOSError(DosGetInfoBlocks(&tib, &pib)))
229 return (pib->pib_ultype <= 4 ? (char*)ptypes[pib->pib_ultype] : "UNKNOWN");
233 file_type(char *path)
238 if (!(_emx_env & 0x200))
239 croak("file_type not implemented on DOS"); /* not OS/2. */
240 if (CheckOSError(DosQueryAppType(path, &apptype))) {
241 if (rc == ERROR_INVALID_EXE_SIGNATURE)
242 croak("Invalid EXE signature");
243 else if (rc == ERROR_EXE_MARKED_INVALID) {
244 croak("EXE marked invalid");
246 croak("DosQueryAppType err %ld", rc);
253 fill_swcntrl(SWCNTRL *swcntrlp)
261 if (!(_emx_env & 0x200))
262 croak("switch_entry not implemented on DOS"); /* not OS/2. */
263 if (CheckOSError(DosGetInfoBlocks(&ptib, &ppib)))
264 croak("DosGetInfoBlocks err %ld", rc);
265 if (CheckWinError(hSwitch =
266 WinQuerySwitchHandle(NULLHANDLE,
267 (PID)ppib->pib_ulpid)))
268 croak("WinQuerySwitchHandle err %ld", Perl_rc);
269 if (CheckOSError(WinQuerySwitchEntry(hSwitch, swcntrlp)))
270 croak("WinQuerySwitchEntry err %ld", rc);
273 /* static ULONG (* APIENTRY16 pDosSmSetTitle)(ULONG, PSZ); */
274 ULONG _THUNK_FUNCTION(DosSmSetTitle)(ULONG, PSZ);
276 #if 0 /* Does not work. */
277 static ULONG (*pDosSmSetTitle)(ULONG, PSZ);
283 static HMODULE hdosc = 0;
287 fill_swcntrl(&swcntrl);
288 if (!pDosSmSetTitle || !hdosc) {
289 if (CheckOSError(DosLoadModule(buf, sizeof buf, "sesmgr", &hdosc)))
290 croak("Cannot load SESMGR: no `%s'", buf);
291 if (CheckOSError(DosQueryProcAddr(hdosc, 0, "DOSSMSETTITLE",
292 (PFN*)&pDosSmSetTitle)))
293 croak("Cannot load SESMGR.DOSSMSETTITLE, err=%ld", rc);
295 /* (pDosSmSetTitle)(swcntrl.idSession,s); */
297 (_THUNK_PROLOG (2+4);
298 _THUNK_SHORT (swcntrl.idSession);
300 _THUNK_CALLI (*pDosSmSetTitle)));
301 if (CheckOSError(rc))
302 warn("*DOSSMSETTITLE: err=%ld, ses=%ld, addr=%x, *paddr=%x",
303 rc, swcntrl.idSession, &_THUNK_FUNCTION(DosSmSetTitle),
313 static HMODULE hdosc = 0;
317 fill_swcntrl(&swcntrl);
319 (_THUNK_PROLOG (2+4);
320 _THUNK_SHORT (swcntrl.idSession);
322 _THUNK_CALL (DosSmSetTitle)));
324 if (CheckOSError(rc))
325 warn("DOSSMSETTITLE: err=%ld, ses=%ld, addr=%x",
326 rc, swcntrl.idSession, _THUNK_FUNCTION(DosSmSetTitle));
328 return !CheckOSError(rc);
332 #if 0 /* Does not work. */
333 USHORT _THUNK_FUNCTION(Win16SetTitle) ();
343 _THUNK_CALL (Win16SetTitle)));
344 if (CheckWinError(rc))
345 warn("Win16SetTitle: err=%ld", rc);
349 MODULE = OS2::Process PACKAGE = OS2::Process
370 fill_swcntrl(&swcntrl);
372 PUSHs(sv_2mortal(newSVpv(swcntrl.szSwtitle, 0)));
373 PUSHs(sv_2mortal(newSVnv(swcntrl.hwnd)));
374 PUSHs(sv_2mortal(newSVnv(swcntrl.hwndIcon)));
375 PUSHs(sv_2mortal(newSViv(swcntrl.hprog)));
376 PUSHs(sv_2mortal(newSViv(swcntrl.idProcess)));
377 PUSHs(sv_2mortal(newSViv(swcntrl.idSession)));
378 PUSHs(sv_2mortal(newSViv(swcntrl.uchVisibility != SWL_INVISIBLE)));
379 PUSHs(sv_2mortal(newSViv(swcntrl.uchVisibility == SWL_GRAYED)));
380 PUSHs(sv_2mortal(newSViv(swcntrl.fbJump == SWL_JUMPABLE)));
381 PUSHs(sv_2mortal(newSViv(swcntrl.bProgType)));