+++ /dev/null
-This documentation to the previous version is somewhat applicable yet.
-No system() extensions, no -R option, the exec/system with one argument
-will use sh.exe only (if required). IZ
-
- Perl 5.001 for OS/2.
- Patchlevel "m"
-
- Copyright (c) 1989,1990,1991,1992,1993,1994 Larry Wall
- All rights reserved.
-
- OS/2 port Copyright (c) 1990, 1991, 1994-95
- Raymond Chen, Kai Uwe Rommel, Andreas Kaiser
-
-Version 5 port (this package) by Andreas Kaiser <ak@ananke.s.bawue.de>
-(2:246/8506.9@fidonet).
-
-To run the executables supplied with this file, you have to install the
-EMX runtime package emxrt.zip of version 0.9a05 (0.9a, fixlevel 5) or
-later.
-
-The file emxrt.zip is available at ftp.rus.uni-stuttgart.de (the
-origin), ftp-os2.nmsu.edu and many other places.
-
-The source code of the original Perl 5.0 distribution is not included
-here. You can get it at ftp://ftp.wpi.edu:/perl5/perl5.001.tar.gz (and
-many other places).
-
-For documentation of Perl 5, look at the files into the directory tree
-"pod". For TeX or Postscript docs, get perlref-5.000.0.tar.gz. A LaTeX
-and postscript reference card is available at
- ftp.NL.net:/pub/comp/programming/languages/perl/perlref-5.000.0.tar.gz
- prep.ai.mit.edu:/pub/gnu/perlref-5.000.0.tar.gz
-
-Many REXX DLLs complement the features available by standard Perl,
-supporting system calls (YdbaUtil - RXU??.ZIP), xBase (RexxBase,
-shareware), serial I/O (RxAsync) and basic PM dialogs (VRexx). These
-packages can be found at many OS/2 FTP servers.
-
------------------------------------------------------------------------------
-Installation:
--------------
-
-If you did not have HPFS up to now, this is the right time to reformat
-your filesystem(s)... While Perl itself does not require HPFS, a lot
-of Perl library files do. Or try EMXOPT=-t.
-
-copy perl5.exe perl5x.exe `some PATH dir`
-copy os2\perlglob.exe `some PATH dir`
-copy perl5.dll `some LIBPATH dir`
-
-set PERL5LIB=x:/your/own/perl/lib;y:/somewhere/perl5/lib
-
-The perl5 extension DLLs (POSIX_.DLL, REXX_.DLL, ...) do not need a
-LIBPATH entry.
-
-Executables:
-------------
-
-perl5.exe,perl5.dll : DynaLoader, REXX support, external DLLs
-
- No fork. Running a command via open() returns 1
- instead of the child process id.
-
- Other modules supported via extension DLLs, no
- builtins other than DynaLoader.
-
-perl5x.exe : No Dynaloader, no REXX.
-
- Supports fork. Running a command via open() uses fork
- (slow) and correctly returns the child process id.
-
- POSIX and Socket modules builtin. No other extension
- modules supported.
-
- Note that lib/Socket.pm and lib/POSIX.pm reflect
- DLL use. If you need them with perl5x.exe, you
- have to remove the "bootstrap" line.
-
------------------------------------------------------------------------------
-Building:
----------
-
-Requires:
-- Perl5.001.tar.gz (Perl 5.001 sources).
-- EMX 0.9a05 or later (Compiler).
-- OS/2 Development Toolkit (or change REXX inc/lib references).
-- Korn shell (ksh) or some other Unix-like shell named ksh.
-- DMake, with group recipes configured for a Unix shell.
-- Larry Walls "patch" program.
-- Several Unix-like tools, such as cp, cat, touch, find, ...
-
-get Perl 5.001 source
-apply patches\* -- "official unofficial" patches to 5.001
-apply os2\patches -- OS/2 platform patches
-copy ext\DynaLoader\dl_os2.xs ext\DynaLoader\DynaLoader.xs
-copy os2\config.sh .
-copy os2\makefile.mk .
-
-If you do not have UPM (User Profile Management), remove "UPM" from
-makefile.mk.
-
------------------------------------------------------------------------------
-Not supported, bugs, "OS/2 is Not Unix":
-----------------------------------------
-
-Depending on whether you run perl5.exe or perl5x.exe, you can either
-use extension modules and REXX, or fork, since the EMX implementation
-of fork conflicts with DLL support. Remember that there is a hidden
-fork in open(F, "-|") and open(F, "|-").
-
-config.sh (Config.pm) lies. It shows d_fork='undef' even though it is
-available in perl5x.exe. "dynamic_ext" and "extensions" are incorrect
-for perl5x.exe.
-
-flock is available but does not yet work in EMX 0.9a.
-
-ttyname and ctermid do not work (return NULL).
-
-... and of course a lot of Unix-isms like process group, user and group
-management, links, ...
-
-For details, look into config.sh and the EMX library reference.
-
-I did not test SDBM. I just added a lot of O_BINARY flags and compiled it.
-
-Several scripts of the test suite (see source distribution) fail due to
-Unix-isms like /bin/sh, `echo *`, different quoting requirements, ...
-
-When opening a command pipe [such as open(F,"cat|")], perl5.exe
-returns 1 instead of the child's process id. Perl5x.exe correctly
-returns the process id.
-
-OS/2 does not have a true exec API (which is used both by the exec
-function and when opening a command pipe with perl5x.exe). What
-actually happens is the call of a subprocess with the father waiting
-for the termination of its child. While waiting, the father still owns
-all its resources (it passes signals to the child however) and there
-may be some other side effects as well.
-
------------------------------------------------------------------------------
-OS2::REXX Module (external library):
-------------------------------------
-
-NOTE: By default, the REXX variable pool is not available, neither to
-Perl, nor to external REXX functions. To enable it, you have to start
-Perl with the switch -R, which makes Perl call its interpreter through
-REXX. REXX functions which do not use variables may be usable even
-without -R though.
-
-Load REXX DLL:
-
- $dll = load OS2::REXX NAME [, WHERE];
-
- NAME is DLL name, without path and extension.
-
- Directories are searched WHERE first (list of dirs), then
- environment paths PERL5REXX, PERLREXX or, as last resort, PATH.
-
- The DLL is not unloaded when the variable dies.
-
- Returns DLL object reference, or undef on failure.
-
-Define function prefix:
-
- $dll->prefix(NAME);
-
- Define the prefix of external functions, prepended to the
- function names used within your program, when looking for
- the entries in the DLL.
-
- Example:
- $dll = load OS2::REXX "RexxBase";
- $dll->prefix("RexxBase_");
- $dll->Init();
- is the same as
- $dll = load OS2::REXX "RexxBase";
- $dll->RexxBase_Init();
-
-Define queue:
-
- $dll->queue(NAME);
-
- Define the name of the REXX queue passed to all external
- functions of this module. Defaults to "SESSION".
-
-Check for functions (optional):
-
- BOOL = $dll->find(NAME [, NAME [, ...]]);
-
- Returns true if all functions are available.
-
-Call external REXX function:
-
- $dll->function(arguments);
-
- Returns the return string if the return code is 0, else undef.
- Dies with error message if the function is not available.
-
-Bind scalar variable to REXX variable:
-
- tie $var, OS2::REXX, "NAME";
-
-Bind array variable to REXX stem variable:
-
- tie @var, OS2::REXX, "NAME.";
-
- Only scalar operations work so far. No array assignments,
- no array operations, ... FORGET IT.
-
-Bind hash array variable to REXX stem variable:
-
- tie %var, OS2::REXX, "NAME.";
-
- To access all visible REXX variables via hash array, bind to "";
-
- No array assignments. No array operations, other than hash array
- operations. Just like the *dbm based implementations.
-
- For the usual REXX stem variables, append a "." to the name,
- as shown above. If the hash key is part of the stem name, for
- example if you bind to "", you cannot use lower case in the stem
- part of the key and it is subject to character set restrictions.
-
-Erase individual REXX variables (bound or not):
-
- OS2::REXX::drop("NAME" [, "NAME" [, ...]]);
-
-Note that while function and variable names are case insensitive in the
-REXX language, function names exported by a DLL and the REXX variables
-(as seen by Perl through the chosen API) are all case sensitive!
-
-Most REXX DLLs export function names all upper case, but there are a
-few which export mixed case names (such as RxExtras). When trying to
-find the entry point, both exact case and all upper case are searched.
-If the DLL exports "RxNap", you have to specify the exact case, if it
-exports "RXOPEN", you can use any case.
-
-To avoid interfering with subroutine names defined by Perl (DESTROY)
-or used within the REXX module (prefix, find), it is best to use mixed
-case and to avoid lowercase only or uppercase only names when calling
-REXX functions. Be consistent. The same function written in different
-ways results in different Perl stubs.
-
-There is no REXX interpolation on variable names, so the REXX variable
-name TEST.ONE is not affected by some other REXX variable ONE. And it
-is not the same variable as TEXT.one!
-
-You cannot call REXX functions which are not exported by the DLL.
-While most DLLs export all their functions, some, like RxFTP, export
-only "...LoadFuncs", which registers the functions within REXX only.
-
-You cannot call 16-bit DLLs. The few interesting ones I found
-(FTP,NETB,APPC) do not export their functions.
-
-I do not know whether the REXX API is reentrant with respect to
-exceptions (signals) when the REXX top-level exception handler is
-overridden. So unless you know better than I do, do not access REXX
-variables (probably tied to Perl variables) or call REXX functions
-which access REXX queues or REXX variables in signal handlers.
-
-See ext/OS2/REXX/rx*.pl for examples.
-
------------------------------------------------------------------------------
-OS2::UPM (external library):
-----------------------------
-
-UPM constants (see <upm.h>) are exported automatically, functions only
-on request.
-
-(USERID, TYPE) = local_user ()
-
- return local user
-
-LIST = user_list (REMOTENODE="", REMOTETYPE_UPM_LOCAL)
- LIST = 4 items per logged on user
- [0] = user id
- [1] = remote node name
- [2] = remote node type (INT)
- [3] = session id (INT)
-
-(USERID, TYPE) = local_logon ()
-
- do a local logon, PM window, if not already logged on
-
-BOOL = logon (USERID, PASSWORD, AUTHCHECK=UPM_USER, REMOTENODE="", REMOTETYPE=UPM_LOCAL)
-BOOL = logoff (USERID, REMOTENODE="", REMOTETYPE=UPM_LOCAL)
-
- logon/logoff process (DB2/2)
-
-BOOL = logon_user (USERID, PASSWORD, REMOTENODE="", REMOTETYPE=UPM_LOCAL)
-BOOL = logoff_user (USERID, REMOTENODE="", REMOTETYPE=UPM_LOCAL)
-
- logon/logoff user
-
-ERRCODE = error ()
-
- return UPM error code of last failure
-
-STRING = message (ERRCODE)
-
- return message text for supplied UPM error code
-
-Defaults:
- REMOTETYPE = UPM_LOCAL
- REMOTENODE = ""
- AUTHCHECK = UPM_USER
-
------------------------------------------------------------------------------
-OS2::FTP (external library):
-----------------------------
-
-$acct = new FTP "host", "userid", "passwd" [, "acct"]
-
- Create virtual FTP session - no login.
-
-FTP::logoff()
-
- Logoff all sessions.
-
-($msec, $address) = FTP::ping("host", pktlen);
-$msec = FTP::ping($address, pktlen);
-
- Ping host. Returns milliseconds or negative error code.
- $address is 32-bit number.
-
-$errno = $acct->errno();
-
- Return last error code (FTP*).
-
-$text = FTP::message($errno);
-
- Return message test of last error.
-
-$status: <0 on error, >=0 on success.
-$tfrtype: T_BINARY, T_ASCII, T_EBCDIC
-"mode": "w" for overwrite, "a" for append
-
-$status = $acct->dir("local", "pattern"="*");
-$status = $acct->ls("local", "pattern"="*");
-
-$status = $acct->chdir("dir");
-$status = $acct->mkdir("dir");
-$status = $acct->rmdir("dir");
-($status, $cwd) = $acct->getcwd();
-
-$status = $acct->get("local", "remote"=local, "mode"="w", $tfrtype=T_BINARY);
-
-$status = $acct->put("local", "remote"=local, $tfrtype=T_BINARY);
-$status = $acct->putunique("local", "remote"=local, $tfrtype=T_BINARY);
-$status = $acct->append("local", "remote"=local, $tfrtype=T_BINARY);
-
-$status = $acct->rename("from", "to");
-$status = $acct->delete("name");
-
-$status = $acct->proxy($source_acct, "dst_file", "src_file", $tfrtype=T_BINARY);
-
-$status = $acct->quote("string");
-$status = $acct->site("string");
-($status, $infostring) = $acct->sys();
-
------------------------------------------------------------------------------
-Other:
-------
-
- setpriority CLASS,PID,DELTA
-
- Set priority of process or process tree.
-
- PID:
- >= 0: process only
- < 0: process tree
-
- CLASS:
- 0 no change
- 1 idle-time (lowest)
- 2 regular (dynamic priority)
- 3 time-critical (highest)
- 4 fixed-high (between regular and time-critical)
-
- DELTA:
- -31..+31
-
- getpriority IGNORED,PID
-
- Return priority of process or process tree.
-
- Bits 8..15 priority class (1..4)
- Bits 0..7 priority within class (0..31)
-
- system LIST
-
- If the first element of LIST is an integer, it controls the
- started child process or session as follows:
-
- 0 = wait until child terminates (default)
- 1 = do not wait, use wait() or waitpid() for status
- 4 = new session
- 5 = detached
- 6 = PM program
-
- PM and session options, or-ed in:
-
- 0x00000 = default
- 0x00100 = minimized
- 0x00200 = maximized
- 0x00300 = fullscreen (session only)
- 0x00400 = windowed (session only)
-
- 0x00000 = foreground (only if running in foreground)
- 0x01000 = background
-
- 0x02000 = don't close window on exit (session only)
-
- 0x10000 = quote all arguments
- 0x20000 = MKS argument passing convention
-
- If the control is not zero, system() does not wait until
- the child terminates and the return code is the id of the
- child process.
-
- If the control is not zero, and you do not call wait or
- waitpid, the child status fills up memory.
-
- Note: If the program is started with a mode of 4 or 6, it may
- be aborted when the starting program (perl) terminates. Later
- releases of EMX.DLL will probably know yet another flag bit
- to cut this fatal relationship.
-
- system STRING
- exec STRING
-
- If the string starts with "@" or contains any of "%&|<>",
- it is called as a shell command. Else the program is called
- directly.
-
- If the environment variable SHELL is defined, it is used
- instead of COMSPEC when running shell commands. It should
- be a Unix-style shell.
-
- file checks (-X), stat(), ...
-
- When testing filenames, not handles, char-devices are detected
- only when prefixed by "/dev/", so "/dev/con" is valid, "con" is
- not.
-
- Currently, only /dev/con and /dev/tty are recognized.
-
------------------------------------------------------------------------------
-History:
-
-15.12.94 Initial release (perl5000.zip).
-
-17.12.94 Moved REXX sub defn to find(). Hash array for functions no
- longer required, allows overriding subs like "find".
-
- DLL entries are case sensitive, try both upper case and
- exact case.
-
-18.12.94 Detect char- and block-devices (stat() hack). Some future
- release may probably remove block device support, once
- char-device support is built into EMX.
-
- Fixed perl5db tty check.
-
-22.12.94 EMX fixlevel 2 exports its exception handler, so now
- signals work even when the REXX variable pool is enabled.
-
- Disabled error and exception popups.
-
-27.12.94 Case conversions of tied variables cleaned up.
-
- REXX (REXX.DLL, REXXAPI.DLL) now loaded on demand.
-
-7.1.95 Fixed Shell module (did not allow more than one argument).
-
-11.1.95 Accept drive letter as absolute path in do/require/use.
-
-13.1.95 Larrys memory-leak patches (#1, dated Friday 13).
-
-26.1.95 fcntl and ioctl were missing. fcntl was explicitly disabled
- in its source code (ifndef DOSISH) and the ioctl enabler is
- in the wrong place (unixish.h instead of config.sh).
-
-16.3.95 DosQueryFSAttach (stat hack) may crash the system. Now just
- look for /dev/con and /dev/tty.
-
- Applied "pad_findlex" patch (patches/1).
-
-23.3.95 Support fork. Two executables, one for DLLs and one for fork.
-
-24.3.95 5.001
-
-13.4.95 Patchlevel "c".
-
-21.4.95 Truncate names of extension DLLs to 8 chars - Warp no longer
- accepts them (2.x did).
-
-22.4.95 Replaced EMX dirent by my own to get all directory entries
- even when HPFS386 is used. Additionally, my implementation
- is not restricted in the total size of the directory (a
- conflict between Perls memory allocator and the one of the
- EMX library DLL).
-
-27.4.95 Support for fork() disabled system() in DLL version.
-
-7.5.95 Added Tye McQueen's FileGlob. See File::KGlob*.
-
-12.5.95 Fixed Cwd. Fixed OS/2 dependencies in MakeMaker, with
- a few Config.sh items added (separators, exe-extension).
-
- Moved UPM and REXX to OS2::. Combined REXXCALL and REXX.
- Plain old REXX module is still available as passthru though.
-
- Perl DLLs now have an underscore appended to avoid name
- conflicts with standard OS/2 DLLs (see DynaLoader.pm).
-
-13.5.95 Added FTP API support (OS2::FTP).
-
-2.7.95 Applied "official unofficial" patches up to level "m".
- The modpods documentation now is in the modules themselves.
-
-4.7.95 Implement command pipes (my_popen) using fork instead of
- standard popen in the fork version (perl5x.exe). While this
- is a lot slower, it correctly returns the process id and
- supports open(F,"-|") and open(F,"|-").
-
- Use the same code for exec(CMD) as for system(CMD).
-
- Support socket functions (set|get|end)(host|net|proto|serv)ent.