diff options
Diffstat (limited to 'gnu/usr.bin/perl/os2')
-rw-r--r-- | gnu/usr.bin/perl/os2/README.old | 529 |
1 files changed, 529 insertions, 0 deletions
diff --git a/gnu/usr.bin/perl/os2/README.old b/gnu/usr.bin/perl/os2/README.old new file mode 100644 index 00000000000..f49d6be1fa6 --- /dev/null +++ b/gnu/usr.bin/perl/os2/README.old @@ -0,0 +1,529 @@ +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. |