xref: /openbsd/gnu/usr.bin/perl/os2/Changes (revision 5af055cd)
1after 5.003_05:
2	PERLLIB_PREFIX was not active if it matches an element of @INC
3		as a whole.
4	Do not need PERL_SBRK if crtdll-revision is >= 50.
5	Use -Zsmall-conv if crtdll-revision is >= 50 (in static perl!).
6:7: warning: #warning <dirent.h> requires <sys/types.h>
7	We compile miniperl static. It cannot fork, thus there may be
8		problems with pipes (since HAS_FORK is in
9		place). Pipes are required by makemaker.
10	We compile perl___.exe A.OUT and dynamic. It should be able to
11		fork.
12	If we can fork, we my_popen by popen unless "-|". Thus we
13		write a cooky "-1" into the pid array to indicate
14		this.
15	Apparently we can fork, and we can load dynamic extensions
16		now, though probably not simultaneously.
17	*DB tests corrected for OS/2 one-user stat[2].
18	/bin/sh is intercepted and replaced by SH_PATH.
19	Note that having '\\' in the command line of one-arg `system'
20		would trigger call via shell.
21	Segfault with system {'ls'} 'blah'; corrected.
22	Documentation of OS/2-different features added to main PODs.
23	New buitins in Cwd::
24
25		Cwd::current_drive
26		Cwd::sys_chdir		- leaves drive as it is.
27		Cwd::change_drive
28		Cwd::sys_is_absolute	- has drive letter and is_rooted
29		Cwd::sys_is_rooted	- has leading [/\\] (maybe
30					  after a drive)
31		Cwd::sys_is_relative	- changes with current dir
32		Cwd::sys_cwd		- Interface to cwd from EMX.
33		Cwd::sys_abspath(name, dir)
34					- Really really odious
35					  function. Returns absolute
36					  name of file which would
37					  have 'name' if CWD were 'dir'.
38					Dir defaults to the current dir.
39		Cwd::extLibpath [type]	- Get/set current value of extended
40		Cwd::extLibpath_set	- library search path.
41			path [type]
42					The optional last argument redirects
43					   to END-path if true,
44					   default is to search BEGIN-path.
45		(Note that some of these may be moved to different
46		  libraries - eventually).
47	Executables:
48		perl - can fork, can dynalink (but not simultaneously)
49		perl_ - can fork, cannot dynalink
50		perl__ - same as perl___, but PM.
51		perl___ - cannot fork, can dynalink.
52	The build of the first one - perl - is rather convoluted, and
53	  requires a build of miniperl_.
54
55after 5.003_07:
56	custom tmpfile and tmpname which may use $TMP, $TEMP.
57	all the calls to OS/2 API wrapped so that it is safe to use
58		them under DOS (may die(), though).
59	Tested that popen works under DOS with modified PDKSH and RSX.
60	File::Copy works under DOS.
61	MakeMaker modified to work under DOS (perlmain.c.tmp and sh -c true).
62
63after 5.003_08:
64	OS2::PrfDB exports symbols as documented;
65	should work on OS/2 2.1 again.
66	uses reliable signals when spawing.
67	do not use popen() any more - no intermediate shell unless needed.
68
69after 5.003_11:
70	Functions emx_{malloc,realloc,calloc,free} are exported from DLL.
71	get_sysinfo() bugs corrected (flags were not used and wrongly defined).
72
73after 5.003_20:
74	_isterm is substituted instead of isatty, s?random instead of srand.
75	`register' disabled if -DDEBUGGING and not AOUT build: stupid SD386.
76	3-argument select() was stomping over memory.
77
78after 5.003_21:
79	Can start scripts by executing 'dir/script' and
80	'script.sh'. Form without extension will call shell only if
81	the specified file exists (will not look on path) (to prohibit
82	trying to run shell commands directly). - Needed by magic.t.
83
84after 5.003_27:
85	ALTERNATE_SHEBANG="extproc " supported, thus options on this
86	line are processed (possibly twice). -S is made legal on such
87	a line. This -S -x is not needed any more.
88	perl.dll may be used from non-EMX programs (via PERL_SYS_INIT
89	- the caller should have valid variable "env" with
90	environment). Known problems: $$ does not work - is 0, waitpid
91	returns immediately, thus Perl cannot wait for completion of
92	started programs.
93
94after 5.004_01:
95	flock emulation added (disable by setting env PERL_USE_FLOCK=0),
96		thanks to Rocco Caputo;
97	RSX bug with missing waitpid circumvented;
98	-S bug with full path with \ corrected.
99
100before 5.004_02:
101	-S switch to perl enables a search with additional extensions
102	.cmd, .btm, .bat, .pl as well.  This means that if you have
103	mycmd.pl or mycmd.bat on PATH,
104		perl -S mycmd
105	will work.  Perl will also look in the current directory first.
106	Moreover, a bug with \; in PATH being non-separator is fixed.
107
108after 5.004_03:
109	$^E tracks calls to CRT now.  (May break if Perl masks some
110	changes to errno?)
111	$0 may be edited to longer lengths (at least under OS/2).
112	OS2::REXX->loads looks in the OS/2-ish fashion too.
113
114after 5.004_04:
115	Default perl.exe was built with a shorter stack than expected.
116	Strip extensions DLLs too (unless debugging build).
117	./os2.c being RO could stop cp.
118	When starting scripts, Perl will find them on path (using the same
119	  extensions as for -S command-line switch).  If it finds magic
120	  `extproc ' or `#!' cookies, it will start the scripts directly.
121	May use `cmd /c more <' as a pager.
122	If a program could not be started, this might have been hidden.
123	End of pipe was closed twice when `open'ing a pipeline.
124
125after 5.004_53:
126	Minimal thread support added.  One needs to manually move pthread.h
127
128after 5.004_64:
129	Make DLL names different if thread-enabled.
130	Emit more informative internal DLL descriptions.
131
1325.004_72:
133	Updated OS2::Process (v0.2) included.
134
135after 5.004_73:
136	Fixed a bug with argv not NULL-terminated when starting scripts.
137	Support all the forms of starting scripts.
138	Support killing a child when receiving a signal during system()
139	(in two stage, on first send the same signal, on the next
140	send SIGKILL).
141	Add the same logic for scripts as in pdksh, including
142		stripping the path from #! line if needed,
143		calling EXECSHELL or COMSPEC for magic-less scripts;
144	Now pdksh is called only if one-arg system()/friends contains
145	metachars, or if magic-line asks for sh, or there is no magic
146	line and EXECSHELL is set to sh.
147	Shell is supplied the original command line if possible.
148
149after 5.005_02:
150	Can start PM programs from non-PM sessions by plain system()
151		and friends.  Can start DOS/Win programs.  Can start
152		fullscreen programs from non-fullscreen sessions too.
153	In fact system(P_PM,...) was broken.
154	We mangle the name of perl*.DLL, to allow coexistence of different
155		versions of Perl executables on the system.  Mangling of
156		names of extension DLL is also changed, thus running two
157		different versions of the executable with loaded
158		extensions should not lead to conflicts (since
159		extension-full-name and Perl-version mangling work in the
160		same set ot 576 possible keys, this may lead to clashes).
161	$^E was reset on the second read, and contained ".\r\n" at the end.
162
163after 5.005_53:
164	Would segfault system()ing non-existing program;
165	AOUT build was hosed;
166	warning-test for getpriority() might lock the system hard on
167		pre-fixpak22 configuration (calling getpriority() on
168		non-existing process triggers a system-wide bug).
169
170
171	PrfDB was using a bug in processing XSUBs returning U32.
172
173	Variable $OS2::emx_rev implemented (string and numeric values
174		are the same as C variables _emx_rev and _emx_vprt).
175	Variable $OS2::emx_env implemented (same as C variable _emx_env).
176	Variable $OS2::os_ver implemented (_osmajor + 0.001 * _osminor).
177
178	Improved centralized management of HAB and HMQ.  To get Perl's
179		HAB, call perl_hab_GET().  (After the initial call one
180		can use Perl_hab instead.)  To require Perl's HMQ,
181		call perl_hmq_GET(), to release it call perl_hmq_UNSET(),
182		to obtain it between these calls use Perl_hmq.
183	HMQ management is refcounted, and the program will morph
184		itself into/from PM if required.
185	If perl.h cannot be included, hab may be obtained by Perl_hab_GET().
186
187	New function OS2::Error(do_harderror,do_exception).  Returns
188		undef if it was not called yet, otherwise bit 1 is
189		set if on previous call do_harderror was enabled, bit
190		2 is set if if on previous call do_exception was enabled.
191	This function enables/disables error popups associated with
192		hardware errors (Disk not ready etc.) and software exceptions.
193
194	New function OS2::Errors2Drive(drive).  Returns undef if it was
195		not called yet, otherwise return false if Errors were
196		not requested to be written to a hard drive, or the
197		drive letter if this was requested.
198	This function may redirect error popups associated with
199		hardware errors (Disk not ready etc.) and software exceptions
200		to the file POPUPLOG.OS2 at the root directory of the
201		specified drive.  Overrides OS2::Error() specified by
202		individual programs.  Given argument undef will
203		disable redirection.  Has global effect, persists
204		after the application exits.
205
206	New function OS2::SysInfo().  Returns a hash with system information.
207		The keys of the hash are
208
209		MAX_PATH_LENGTH, MAX_TEXT_SESSIONS, MAX_PM_SESSIONS,
210		MAX_VDM_SESSIONS, BOOT_DRIVE, DYN_PRI_VARIATION,
211		MAX_WAIT, MIN_SLICE, MAX_SLICE, PAGE_SIZE,
212		VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION,
213		MS_COUNT, TIME_LOW, TIME_HIGH, TOTPHYSMEM, TOTRESMEM,
214		TOTAVAILMEM, MAXPRMEM, MAXSHMEM, TIMER_INTERVAL,
215		MAX_COMP_LENGTH, FOREGROUND_FS_SESSION,
216		FOREGROUND_PROCESS
217
218	New function OS2::BootDrive(force).  Returns a letter without colon.
219
220	New functions OS2::MorphPM(serve)/OS2::UnMorphPM(serve).  Transforms
221		the current application into a PM application and back.
222		The argument true means that a real message loop is
223		going to be performed.
224	OS2::MorphPM() returns the PM message queue handle as an integer.
225
226	New function OS2::Serve_Messages(force).  Fake on-demand
227		retrieval of outstanding PM messages.  If force is false,
228		will not dispatch messages if a real message loop is known to
229		be present.  Returns number of messages retrieved.
230	Dies with "QUITing..." if WM_QUIT message is obtained.
231
232	New function OS2::Process_Messages(force [, cnt]).  Retrieval
233		of PM messages until window creation/destruction.
234		If force is false, will not dispatch messages
235		if a real message loop is known to be present.
236		Returns change in number of windows.  If cnt is given,
237		it is incremented by the number of messages retrieved.
238	Dies with "QUITing..." if WM_QUIT message is obtained.
239
240after 5.005_54:
241 	Opening pipes from/to processes could fail if (un)appropriate
242 	combination of STDIN/STDOUT was closed.
243
244 	If the only shell-metachars of a command are ' 2>&1' at the
245 	end of a command, it is executed without calling the external shell.
246
247after 5.005_57:
248	Make UDP sockets return correct caller address (OS2 API bug);
249	Enable TCPIPV4 defines (works with Warp 3 IAK too?!);
250	Force Unix-domain sockets to start with "/socket", convert
251	  '/' to '\' in the calls;
252	Make C<system 1, $cmd> to treat $cmd as in C<system $cmd>;
253	Autopatch Configure;
254	Find name and location of g[nu]patch.exe;
255	Autocopy perl????.dll to t/ when testing;
256
257after 5.005_62:
258	Extract a lightweight DLL access module OS2::DLL from OS2::REXX
259	   which would not load REXX runtime system;
260	Allow compile with os2.h which loads os2tk.h instead of os2emx.h;
261	Put the version of EMX CRTL into -D define;
262	Use _setsyserror() to store last error of OS/2 API for $^E;
263	New macro PERL_SYS_INIT3(argvp, argcp, envp);
264	Make Dynaloader return info on the failing module after failed dl_open();
265	OS2::REXX test were done for interactive testing (were writing
266	  "ok" to stderr);
267	system() and friends return -1 on failure (was 0xFF00);
268	Put the full name of executable into $^X
269	  (alas, uppercased - but with /);
270	t/io/fs.t was failing on HPFS386;
271	Remove extra ';' from defines for MQ operations.
272
273pre 5.6.1:
274	Resolved: "Bad free()" messages (e.g., from DB_File) with -Zomf build.
275	   The reason was: when an extension DLL was linked, the order of
276	   libraries was similar to this:
277		f1.obj f2.obj libperl.lib -llibr1 -llibr2
278	   (with C RTL implicitly after this).  When libperl.lib overrides
279	   some C RTL functions, they are correctly resolved when mentioned
280	   in f1.obj and f2.obj.  However, the resolution for libr1.lib and
281	   libr2.lib is implementation-dependent.
282
283	   With -Zomf linking the symbols are resolved for libr1.lib and
284	   libr2.lib *only if* they reside in .obj-file-sections of libperl.lib
285	   which were already "picked up" for symbols in f1.obj f2.obj.
286	   However, libperl.lib is an import library for a .DLL, so *each
287	   symbol in libperl.lib sits in its own pseudo-section*!
288
289	   Corollary: only those symbol from libperl.lib which were already
290	   mentioned in f1.obj f2.obj would be used for libr1.lib and
291	   libr2.lib.  Example: if f1.obj f2.obj do not mention calloc() but
292	   libr1.lib and libr2.lib do, then .lib's will get calloc() of C RTL,
293	   not one of libperl.lib.
294
295	   Solution: create a small duplicate of libperl.lib with overriding
296	   symbols only.  Put it *after* -llibr1 -llibr2 on the link line.
297	   Map strdup() and putenv() to Perl_strdup() and Perl_putenv()
298	   inside this library.
299
300	Resolved: rmdir() and mkdir() do not accept trailing slashes.
301	   Wrappers are implemented.
302	Resolved: when loading modules, FP mask may be erroneously changed by
303	   _DLLInitTerm() (e.g., TCP32IP).
304		Solutions: a) dlopen() saves/restores the FP mask.
305			   b) When starting, reset FP mask to a sane value
306				(if the DLL was compile-time linked).
307	New functions in package OS2:
308		unsigned _control87(unsigned new,unsigned mask)	# as in EMX
309		unsigned get_control87()
310		# with default values good for handling exception mask:
311		unsigned set_control87_em(new=MCW_EM,mask=MCW_EM)
312	    Needed to guard against other situations when the FP mask is
313	    stomped upon.  Apparently, IBM used a compiler (for some period
314	    of time around '95?) which changes FP mask right and left...
315	Resolved: $^X was always uppercased (cosmetic).  Solution:
316	    use argv[0] if it differs from what the OS returns only in case.
317	Resolved: when creating PM message queues, WinCancelShutdown() was
318	    not called even if the application said that it would not serve
319	    messages in this queue.  Could result in PM refusing to shutdown.
320
321	    Solution: resolve WinCancelShutdown at run time, keep the refcount
322	    of who is going to serve the queue.
323	Resolved: Perl_Deregister_MQ() segfaulted (pid/tid not initialized).
324	Resolved: FillWinError() would not fetch the error.
325	    Solution: resolve WinGetLastError at run time, call it.
326	Resolved: OS2::REXX would ignore arguments given to a Perl function
327	    imported into the REXX compartment via REXX_eval_with().
328	Resolved: OS2::REXX would treat arguments given to a Perl function
329	    imported into the REXX compartment via _register() as ASCIIZ
330	    strings inside of binary strings.
331	Resolved: OS2::REXX did not document _register().
332	Resolved: OS2::REXX would not report the error to REXX if an error
333	    condition appeared during a call to Perl function from REXX
334	    compartment.  As a result, the return string was not initialized.
335	A complete example of a mini-application added to OS2::REXX.
336	README.os2 updated to reflect the current state of Perl.
337
338pre 5.7.2:
339	aout build: kid bootstrap_* were not associated with XS.
340	bldlevel did not contain enough info.
341	extLibpath* was failing on the call of the second type.
342	Configure defines flushNULL now (EMX -Zomf bug broke autodetection).
343	Configure did not find SIGBREAK.
344	extLibpath supports LIBSTRICT, better error detection.
345	crypt() used if present in -lcrypt or -lufc.
346	dumb getpw*(), getgr*() etc. supported; as in EMX, but if no
347	    $ENV{PW_PASSWD}, the passwd field contains a string which
348	    cannot be returned by crypt() (for security reasons).
349	The unwound recursion in detecting executable by script was
350	    using static buffers.  Thus system('pod2text') would fail if the
351	    current directory contained an empty file named 'perl'.
352	Put ordinals in the base DLL.
353	Enable EXE-compression.
354	    Load time (ms):  Without /e:2: 70.6; With /e:2: 75.3; Lxlite: 62.8
355	    Size drops from 750K to 627K, with lxlite to 515K.
356	    lxlite /c:max gives 488K, but dumps core in t/TEST
357	os2ish.h defines SYSLOG constants ==> Sys::Syslog works.
358	Corrected warnings related to OS/2 code.
359	    At one place = was put instead of ==.
360	Setting $^E should work.
361	Force "SYS0dddd=0xbar: " to error messages and to dlerror().
362	    ($^E == 2 printed SYS0002 itself, but 110 did not.)
363	$OS2::nsyserror=0 switches off forcing SYSdddd on $^E.
364	perl_.exe does not require PM dlls any more (symbols resolved at
365	    runtime on the as needed basis).
366	OS2::Process:
367	    get/set: term size; codepages; screen's cursor; screen's contents
368	    reliable session name setting;
369	    process's parent pid, and the session id;
370	    switching to and enumeration of sessions
371	    window hierarchy inspection
372	    post a message to a window
373	More robust getpriority() on older Warps.
374
375	New C APIs for runtime loading of entry points from DLLs
376	(useful for entry points not present on older versions of
377	OS/2, or with DLLs not present on floppy-boot stripped down
378	setups): CallORD(), DeclFuncByORD(), DeclVoidFuncByORD(),
379	DeclOSFuncByORD(), DeclWinFuncByORD(), AssignFuncPByORD().
380
381pre 5.7.3:
382	Testing with PERL_TEST_NOVREXX=1 in environment makes tests
383	noninteractive (VREXX test requires pressing a button on a dialog).
384
385	New (ugly and voodooish) hack to work around a bug in EMX
386	runtime architecture:
387
388	  EMX.DLL is *not* initialized from its _DLL_InitTerm()
389	  routine, but the initialization is postponed until
390	  immediately before main() is called by the principal
391	  executable (may be the initialization also happens during
392	  InitTerm of -Zso -Zsys DLLs?).  The only reason I can see is
393	  to postpone the initialization until the "layout" structure
394	  is available, so the type of the executable is known.
395	  [Instead, one should have broken the initialization into two
396	  steps, with no-layout-known initialization ASAP, and the
397	  finishing touch done when "layout" is known.]
398
399	  It is due to this hack that -Zsys, -Zso etc. are needed so
400	  often.
401
402	  If during initialization of the Perl runtime environment we
403	  discover that EMX environment is not set up completely, this
404	  can be because of either our DLL being called from an
405	  uncompatible flavor of EMX executable, or from an
406	  unrelated-to-EMX.DLL (e.g., -Zsys or compiled with a
407	  different compiler) executable.  In the first case only the
408	  CRTL is not completely initialized, in the other case
409	  EMX.DLL may be not initialized too.
410
411	  We detect which of these two situations takes place, then
412	  explicitly call the initialization entry points of EMX.DLL
413	  and of CRT.  The large caveat is that the init-entry point
414	  of EMX.DLL also moves the stack pointer (another defect of
415	  EMX architecture, the init() and
416	  set_exception_handlers_on_stack() entry points should have
417	  been separated).  Thus we need some inline-assembler to
418	  compensate for this, and need to remove the installed
419	  exception handler - it is useless anyway, since exception
420	  handlers need to be on the stack.  [This one is on the
421	  stack, but will be overwritten on exit from the function.]
422
423	  We also install an extra hack to run our atexit() handlers
424	  on termination of the process (since the principal
425	  executable does not know about *this* CRTL, we need to do it
426	  ourselves - and longjmp() out of the chain of exception
427	  handlers at a proper moment :-().
428
429	The net result: Perl DLL can be now used with an arbitrary
430	application.  PERLREXX DLL is provided which makes Perl usable
431	from any REXX-enabled application.
432
433	New test targets added to test how well Perl DLL runs with
434	different flavors of executables (see all_harness etc).  To
435	avoid waiting for the user button press, run with env
436	PERL_TEST_NOVREXX=1.
437
438	Another hack: on init of Perl runtime environment, the
439	executable is tested for being an aout EMX executable.  The
440	test is the same done by gdb, so although this test is very
441	voodoo, it should be pretty robust (the beginning of the
442	executable code - at 0x10000 - is tested for a known bit
443	pattern).  The result is used to set $OS2::can_fork, which is
444	eventually used to set $Config::Config{can_fork}.
445
446	REXX::eval_REXX() made reenterable.  ADDRESS PERLEVAL
447	available for the run REXX code.  PERLLASTERROR available.
448
449	A .map file is created for the .dll.  Now easier to debug the
450	failures which do not happen with a debugging executable.
451
452	Duplicate libperl.lib as perl.lib etc. to make Embed happier.
453
454	File::Spec better adjusted to OS/2 (still does not support aa:/dir/).
455
456	New module OS::Process::Const with necessary constants for the
457	Perl calls which mimic OS/2 API calls.
458
459After @14577:
460	$Config{pager} better (but needs work in the binary installer!).
461
462	New API: OS2::DLLname([type], [\&sub])
463
464	New OS2::Process APIs:
465
466		 process_hwnd winTitle_set winTitle swTitle_set bothTitle_set
467                 hWindowPos hWindowPos_set DesktopWindow
468                 ActiveWindow_set
469                 EnableWindow EnableWindowUpdate IsWindowEnabled
470                 IsWindowVisible IsWindowShowing WindowPtr WindowULong
471                 WindowUShort SetWindowBits SetWindowPtr
472                 SetWindowULong
473                 SetWindowUShort MPFROMSHORT MPVOID MPFROMCHAR
474                 MPFROM2SHORT
475                 MPFROMSH2CH MPFROMLONG
476
477	OS::Process::Const symbols exportable from OS::Process too.
478
479	OS::Process: prototypes on subroutines which do not naturally
480	take "vectors" as arguments (not backwards compatible!).
481
482	New C API: SaveCroakWinError(), WinError_2_Perl_rc,
483	DeclWinFuncByORD_CACHE(), DeclWinFuncByORD_CACHE_survive(),
484	DeclWinFuncByORD_CACHE_resetError_survive(),
485	DeclWinFunc_CACHE(), DeclWinFunc_CACHE_resetError(),
486	DeclWinFunc_CACHE_survive(),
487	DeclWinFunc_CACHE_resetError_survive(); many new OS2 entry
488	points conveniently available via wrappers which will do the
489	necessary run-time dynalinking.
490
491After @15047:
492	makes PerlIO preserve the binary/text mode of filehandles
493	chosen by CRT library.  (However, TTY handles still are not
494	clean, since switching them to TERMIO mode and back changes
495	the NL translation law at runtime, and PerlIO level does not
496	know this.)
497
498After @18156:
499	mkdir() rmdir() tolerate trailing slashes.
500	"localized" morphing to PM when already morphed would unmorph at end.
501	Convert \n to \r\n in REXX commands (Classic REXX would allow \r and
502		\r\n, but not \n as line-ends).
503
504After @19053:
505	Better detection of OS/2 in Configure scripts (if c:/ is not readable).
506	Better Configure support for \\ inside cpp-emited # lineno "filename".
507	Export pthread-support functions from threaded DLL.
508	[older change] If perl5.def file is present, the new perl5.def has
509		compatible ordinals.
510	OS/2 code compiles with threads enabled; much more robust pthreads
511		emulation (but some statics still present); survives fork().
512	New attributes supported with [f]stat() and chmod()
513		  archived is 0x1000000 =  0100000000
514		  hidden   is 0x2000000 =  0200000000
515		  system   is 0x4000000 =  0400000000
516		If extra flag 0x8000000 = 01000000000 is missing during
517		chmod(), these 3 flags are ignored; this extra flag
518		is set in the result of stat() [this provides backward
519		compatibility, as well as transparency of stat()/
520		chmod() supporting DOSISH].
521	OS/2-specific modules use XSLoader now.
522	Remove DLLs manually after failing build (link386 would not?!).
523	Special-case stat()ing "/dev/nul" and "/dev/null" too.
524	Update dlopen() and friends: preserve i387 flags, better error messages,
525		support name==NULL (load for "this" DLL);
526	OS2::DLL does not eval() generated functions, uses closes instead;
527		new method wrapper_REXX() for DLL objects.
528
529After @19774:
530	Use common typemap for OS2:: modules.
531	New test file os2/perlrexx.cmd (should be run manually; does not it
532		exit too early???).
533	Export fork_with_resources(), croak_with_os2error() from DLL.
534	usleep() availability put in %Config{}.
535	Combine most (but not all!) statics into one struct.
536	New load-on-demand C functions
537		Dos32QueryHeaderInfo
538		DosTmrQueryFreq
539		DosTmrQueryTime
540		WinQueryActiveDesktopPathname
541		WinInvalidateRect
542		WinCreateFrameControl
543		WinQueryClipbrdFmtInfo
544		WinQueryClipbrdOwner
545		WinQueryClipbrdViewer
546		WinQueryClipbrdData
547		WinOpenClipbrd
548		WinCloseClipbrd
549		WinSetClipbrdData
550		WinSetClipbrdOwner
551		WinSetClipbrdViewer
552		WinEnumClipbrdFmts
553		WinEmptyClipbrd
554		WinAddAtom
555		WinFindAtom
556		WinDeleteAtom
557		WinQueryAtomUsage
558		WinQueryAtomName
559		WinQueryAtomLength
560		WinQuerySystemAtomTable
561		WinCreateAtomTable
562		WinDestroyAtomTable
563		WinOpenWindowDC
564		DevOpenDC
565		DevQueryCaps
566		DevCloseDC
567		WinMessageBox
568		WinMessageBox2
569		WinQuerySysValue
570		WinSetSysValue
571		WinAlarm
572		WinFlashWindow
573		WinLoadPointer
574		WinQuerySysPointer
575	Check "\\SEM32\\PMDRAG.SEM" before loading PM-specific DLLs.
576	Handling of system {realname} was not correct in presence of
577		exe-type deduction, #!-emulation etc.
578	Use optimized PUSHTARG etc. XSUB convention.
579	$^E stringification contains PMERR_INVALID_HWND, PMERR_INVALID_HMQ,
580		PMERR_CALL_FROM_WRONG_THREAD, PMERR_NO_MSG_QUEUE,
581		PMERR_NOT_IN_A_PM_SESSION if these errors are not in .MSG file
582		(at least on Warp3fp42).
583	PERLLIB_PREFIX augmented by PERLLIB_582_PREFIX, PERLLIB_58_PREFIX,
584		PERLLIB_5_PREFIX (example for 5.8.2, the first one present is
585		considered).
586	New flag bit 0x2 for OS2::MorphPM(): immediately unmorph after creation
587		of message queue.
588	(De)Registring MQ preserves i386 flags.
589	When die()ing inside OS2:: API, include $^E in the message.
590	New function OS2::Timer(): returns Tmr-timer ticks (about 1MHz) since
591		start of OS/2, converted to number of seconds (keep in mind
592		that this timer uses a different crystal than the real-time
593		clock; thus these values have only weak relationship to the
594		wall clock time; behaviour with APM on is not defined).
595	New function OS2::DevCap() [XXX Wrong usage message!!!]
596		Usage: OS2::DevCap([WHAT, [HOW=0]]); the default for WHAT is
597		the memory device context, WHAT should be a device context
598		(as integer) if HOW==0 and a window handle (as integer) if
599		HOW==1.  Returns a hash with keys
600			FAMILY IO_CAPS TECHNOLOGY DRIVER_VERSION WIDTH HEIGHT
601			WIDTH_IN_CHARS HEIGHT_IN_CHARS HORIZONTAL_RESOLUTION
602			VERTICAL_RESOLUTION CHAR_WIDTH CHAR_HEIGHT
603			SMALL_CHAR_WIDTH SMALL_CHAR_HEIGHT COLORS COLOR_PLANES
604			COLOR_BITCOUNT COLOR_TABLE_SUPPORT MOUSE_BUTTONS
605			FOREGROUND_MIX_SUPPORT BACKGROUND_MIX_SUPPORT
606			VIO_LOADABLE_FONTS WINDOW_BYTE_ALIGNMENT BITMAP_FORMATS
607			RASTER_CAPS MARKER_HEIGHT MARKER_WIDTH DEVICE_FONTS
608			GRAPHICS_SUBSET GRAPHICS_VERSION GRAPHICS_VECTOR_SUBSET
609			DEVICE_WINDOWING ADDITIONAL_GRAPHICS PHYS_COLORS
610			COLOR_INDEX GRAPHICS_CHAR_WIDTH GRAPHICS_CHAR_HEIGHT
611			HORIZONTAL_FONT_RES VERTICAL_FONT_RES DEVICE_FONT_SIM
612			LINEWIDTH_THICK DEVICE_POLYSET_POINTS
613	New function OS2::SysValues(which = -1, hwndDesktop = HWND_DESKTOP).
614		If which != -1, returns the corresponding SysValue.  Otherwise
615		returns a hash with keys:
616			SWAPBUTTON DBLCLKTIME CXDBLCLK CYDBLCLK
617			CXSIZEBORDER CYSIZEBORDER ALARM 7 8 CURSORRATE
618			FIRSTSCROLLRATE SCROLLRATE NUMBEREDLISTS WARNINGFREQ
619			NOTEFREQ ERRORFREQ WARNINGDURATION NOTEDURATION
620			ERRORDURATION 19 CXSCREEN CYSCREEN CXVSCROLL CYHSCROLL
621			CYVSCROLLARROW CXHSCROLLARROW CXBORDER CYBORDER
622			CXDLGFRAME CYDLGFRAME CYTITLEBAR CYVSLIDER CXHSLIDER
623			CXMINMAXBUTTON CYMINMAXBUTTON CYMENU
624			CXFULLSCREEN CYFULLSCREEN CXICON CYICON
625			CXPOINTER CYPOINTER DEBUG CPOINTERBUTTONS POINTERLEVEL
626			CURSORLEVEL TRACKRECTLEVEL CTIMERS MOUSEPRESENT
627			CXALIGN CYALIGN
628			DESKTOPWORKAREAYTOP DESKTOPWORKAREAYBOTTOM
629			DESKTOPWORKAREAXRIGHT DESKTOPWORKAREAXLEFT 55
630			NOTRESERVED EXTRAKEYBEEP SETLIGHTS INSERTMODE 60 61 62 63
631			MENUROLLDOWNDELAY MENUROLLUPDELAY ALTMNEMONIC
632			TASKLISTMOUSEACCESS CXICONTEXTWIDTH CICONTEXTLINES
633			CHORDTIME CXCHORD CYCHORD CXMOTIONSTART CYMOTIONSTART
634			BEGINDRAG ENDDRAG SINGLESELECT OPEN CONTEXTMENU CONTEXTHELP
635			TEXTEDIT BEGINSELECT ENDSELECT BEGINDRAGKB ENDDRAGKB
636			SELECTKB OPENKB CONTEXTMENUKB CONTEXTHELPKB TEXTEDITKB
637			BEGINSELECTKB ENDSELECTKB ANIMATION ANIMATIONSPEED
638			MONOICONS KBDALTERED PRINTSCREEN		/* 97, the last one on one of the DDK header */
639			LOCKSTARTINPUT DYNAMICDRAG 100 101 102 103 104 105 106 107
640	New function OS2::SysValues_set(which, val, hwndDesktop = HWND_DESKTOP).
641	Support new keys NUMPROCESSORS MAXHPRMEM MAXHSHMEM MAXPROCESSES
642		VIRTUALADDRESSLIMIT INT10ENABLE from OS2::SysInfo(); support
643		up to 10 unnamed values after the last named one.
644	New function OS2::SysInfoFor(id[,count=1]). [Wrong usage message!!!]
645	New function OS2::Beep(freq = 440, ms = 100).
646	New flags mod_name_C_function = 0x100, mod_name_HMODULE = 0x200 in
647		addition to old mod_name_handle = 0, mod_name_shortname = 1,
648		mod_name_full = 2 for OS2::DLLname(flag, cv); use an address
649		(as integer) or module handle instead of cv.
650	New function OS2::_headerInfo(req,size[,handle,[offset]]).
651	New function OS2::libPath(); returns the value of LIBPATH.
652	New function OS2::mytype(which=0) to query current process type:
653		0:	type immediately after startup or last fork();
654		1:	type immediately after startup;
655		2:	type before the first morphing;
656		3:	type as set now in the header.
657	New function OS2::mytype_set(type);
658	New function OS2::incrMaxFHandles(delta = 0); returns updated value
659		for the possible number of open file descriptors.
660	Make check_emx_runtime() thread-safe.
661	Fix float-to-string conversion in the range .0001..0.1 (would return
662		in exponential notation, per gcvt()).
663	Make fork(): a) preserve i387 flags;
664		     b) preserve the dynamically loaded (system) DLLs;
665		     c) preserve morphed status;
666	Make sleep() work with time > 0xffffffff/1000.
667	Implement usleep() via _sleep2(); make select() with num_files==0
668		thread-safe (via calling DosSleep()).
669	OS2::Process::Const() manages (MB|MBID|CF|CFI|SPTR)_.* constants too.
670	New (exported) functions from OS2::Process (some undocumented???):
671		process_codepage_set
672		TopLevel
673		FocusWindow_set_keep_Zorder
674		ActiveDesktopPathname
675		InvalidateRect
676		CreateFrameControl
677		ClipbrdFmtInfo
678		ClipbrdOwner
679		ClipbrdViewer
680		ClipbrdData
681		OpenClipbrd
682		CloseClipbrd
683		ClipbrdData_set
684		ClipbrdOwner_set
685		ClipbrdViewer_set
686		EnumClipbrdFmts
687		EmptyClipbrd
688		AddAtom
689		FindAtom
690		DeleteAtom
691		AtomUsage
692		AtomName
693		AtomLength
694		SystemAtomTable
695		CreateAtomTable
696		DestroyAtomTable
697		_ClipbrdData_set
698		ClipbrdText
699		ClipbrdText_set
700		_MessageBox
701		MessageBox
702		_MessageBox2
703		MessageBox2
704		LoadPointer
705		SysPointer
706		Alarm
707		FlashWindow
708	Do not use AUTOLOAD in OS2::DLL; moved to OS2::DLL::dll.
709	New method OS2::DLL->module() (to replace botched ->new() method).
710	New functions call20(), call20_p(), call20_rp3(), call20_rp3_p(),
711		call20_Dos(), call20_Win(), call20_Win_0OK(),
712		call20_Win_0OK_survive() in OS2::DLL to call C functions via
713		pointers.
714
715After @20218:
716	select() workaround broke build of x2p.
717	New OS2::Process (exported, undocumented) functions:
718		kbdChar
719		kbdhChar
720		kbdStatus
721		_kbdStatus_set
722		kbdhStatus
723		kbdhStatus_set
724		vioConfig
725		viohConfig
726		vioMode
727		viohMode
728		viohMode_set
729		_vioMode_set
730		_vioState
731		_vioState_set
732		vioFont
733		vioFont_set
734	Make CheckOS2Error() macro return the error code.
735	New dynaloaded entry point DosReplaceModule().
736	New function OS2::replaceModule(target [, source [, backup]]).
737
738After @21211:
739	Make Cwd::sys_abspath() default to '.' and taint the result.
740	Fix os2_process*.t to work if the default for VIO windows is maximized.
741	Fix to avoid non-existing PIDs for get_sysinfo() broke pid==0.
742	Restore default mode for pipes to be TEXT mode.
743
744After @21379:
745	New OS2::Process functions: __term_mirror_screen() __term_mirror()
746		io_term().
747	Fix a.out build: special-case thread::shared, pick up all the build
748		static libraries, not only those for top-level modules.
749	Fix DLLname() test to work with the static build too.
750	New dynaloaded entry point RexxRegisterSubcomExe(); make OS2::REXX use
751		it so it is not linked with REXX*.DLLs any more.
752	If system "./foo", and empty "./foo" and "./foo.exe" exist,
753		argv[0] would be set to junk.
754	Make perl2cmd convert .pl files and keep the command-line switches.
755	Make XSLoader and Perl-specific parts of DynaLoader to die with static
756		builds (new variable $OS2::is_static used);
757	Move perlmain.obj to the DLL; export main() as dll_perlmain(); create
758		a library libperl_dllmain to translate the exported symbol
759		back to main(); link the executables with this library instead
760		of perlmain.obj.
761	Add /li to link386's options (line number info in the .map file).
762	Another break from fix to avoid non-existing PIDs for get_sysinfo().
763
764After @21574:
765	Update import libraries when perl version changes (e.g., due to rsync).
766	New exported symbols dup() and dup2() [the wrappers have workaround
767		for off-by-one error + double fault in the pre-Nov2003 kernels
768		when a (wrong) filedescriptor which is limit+1 is dup()ed].
769	Enable disabling fd via a FILE* (to avoid close() during fclose()).
770	New dynaloaded entry point DosPerfSysCall().
771	New function OS2::perfSysCall(cmd = CMD_KI_RDCNT, ulParm1= 0,
772				      ulParm2= 0, ulParm3= 0); when called
773		with cmd == CMD_KI_RDCNT = 0x63 and no other parameters,
774		returns: in the scalar context: the tick count of processor 1;
775			 in the list context: 4 tick counts per processor:
776				total/idle/busy/interrupt-time.
777		with cmd == CMD_KI_GETQTY == 0x41 and no other parameters,
778		returns the CPU count.  Currently in other cases the return
779		is void.
780	New executables perl___<number> generated with decreased stack size
781		(good when virtual memory is low; e.g. floppy boot).
782
783After 5.8.2 (@21668):
784	Fixes to installperl scripts to avoid junk output, allow overwrite
785		of existing files (File::Copy::copy is mapped to DosCopy()
786		with flags which would not overwrite).
787	Disable DynaLoading of Perl modules with AOUT build (will core anyway).
788	For AOUT build: Quick hack to construct directories necessary for
789		/*/% stuff [maybe better do it from hints/os2.sh?].
790	AOUT build: do -D__ST_MT_ERRNO__ to simplify linking with -Zmtd
791		(e.g., to test GD: gd.dll linked with -Zmtd).
792	MANIFEST.SKIP was read without a drive part of the filename.
793	Rename Cwd::extLibpath*() to OS2::... (old names still preserved).
794	Install perl.lib and perl.a too.
795	New methods libPath_find(),has_f32(),handle(),fullname() for OS2::DLL.
796	Enable quad support using long long.
797	New C exported functions os2_execname(), async_mssleep(), msCounter(),
798		InfoTable(), dir_subst(), Perl_OS2_handler_install(),
799		fill_extLibpath().
800	async_mssleep() uses some undocumented features which allow usage of
801		highest possible resolution of sleep() while preserving low
802		priority (raise of resolution may be not available before
803		Warp3fp40; resolution is 8ms/CLOCK_SCALE).
804		usleep() and select(undef,undef,undef,$t) are using this
805		interface for time up to 0.5sec.
806	New convenience macros os2win_croak_0OK(rc,msg), os2win_croak(rc,msg),
807		os2cp_croak(rc,msg).
808	Supports ~installprefix, ~exe, ~dll in PERLLIB_PREFIX etc (actual
809		directories are substituted).
810	New functions OS2::msCounter(), OS2::ms_sleep(), OS2::_InfoTable().
811	Checks stack when fixing EMX being under-initialized (-Zomf -Zsys
812		produces 32K stack???).
813	New environment variables PERL_BEGINLIBPATH, PERL_PRE_BEGINLIBPATH,
814		PERL_POST_BEGINLIBPATH, PERL_ENDLIBPATH,
815		PERL_PRE_ENDLIBPATH PERL_POST_ENDLIBPATH (~-enabled);
816		PERL_EMXLOAD_SECS.
817	Better handling of FIRST_MAKEFILE (propagate to subdirs during test,
818		do not require Makefile.PL present).
819	perl2cmd converter: do not rewrite if no change.
820	README.os2 updated with info on building binary distributions and
821		custom perl executables (but not much else).
822