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