summaryrefslogtreecommitdiff
path: root/os2/README.OS2
diff options
context:
space:
mode:
Diffstat (limited to 'os2/README.OS2')
-rw-r--r--os2/README.OS2434
1 files changed, 0 insertions, 434 deletions
diff --git a/os2/README.OS2 b/os2/README.OS2
deleted file mode 100644
index 2cca20cda8..0000000000
--- a/os2/README.OS2
+++ /dev/null
@@ -1,434 +0,0 @@
- Notes on the OS/2 Perl port
-
- Raymond Chen
- (rjc@math.princeton.edu)
-
- Kai Uwe Rommel
- (rommel@lan.informatik.tu-muenchen.dbp.de)
-
--1. Background.
-
-This port was based on the MS-DOS port by Diomidis Spinellis.
-
-0. Set-up.
-
-First copy the files in the os2 directory into the parent
-directory. Also install the file msdos/dir.h in your include
-directory.
-
-1. Compiling.
-
-Perl has been compiled under MS-DOS using the Microsoft C compiler
-version 6.0. Before compiling install dir.h as <sys/dir.h>. You will
-need a Unix-like make program and something like yacc (e.g. bison). I
-just ran yacc on my UNIX box and downloaded the resulting y.tab.[ch]
-files. Compilation takes 45 minutes on a 16MHz 386 machine running
-no jobs other than the compiler, so you will probably need something to
-do in the meantime. Like, say, lunch. (Compilation time does not
-include formatting the manual.) If you compile with optimization
-turned off, it takes about half as long.
-
-The executable is 270k (perlsym.exe is 473k; if you compile
-without optimization, the sizes are 329K/531K), and the top level
-directory needs 800K for sources, 550K for object code, and 800K for the
-executables, assuming you want to build both perl.exe and perlsym.exe
-with full optimization.
-
-The makefile will compile glob for you which you will need to place
-somewhere in your path so that perl globbing will work correctly. All
-the tests were run, although some modifications were necessary because
-OS/2 isn't UNIX. The tests that failed failed because of limitations of
-the operating system and aren't the fault of the compiler. a2p and s2p
-were not tested.
-
-In the eg directory you will find the syscalls.pl header file,
-and a sample program that demonstrates some of the improvements
-of the OS/2 version over the MS-DOS version and some of the
-system calls.
-
-2. Using OS/2 Perl
-
-The OS/2 version of perl has much of the functionality of the Unix
-version. Here are some things that don't work: sockets, password
-functions, [gs]et[eug]id, dbm functions, fork.
-
-One thing that doesn't work is "split" with no arguments. Somehow,
-yylval.arg is empty ... [[ Wait, sorry, I fixed that. --rjc ]]
-
-Care has been taken to implement the rest, although the implementation
-might not be the best possible. Here are short notes on the tricky
-bits:
-
-2.1. In-place editing.
-
-Files currently can be edited in-place provided you are creating a
-backup. Considerable effort is made to ensure that a reasonable
-name for the backup is selected, while still remaining within
-the 8.3 contraints of the FAT filesystem. (HPFS users have nothing
-to worry about, since HPFS doesn't have the stupid 8.3 rule.)
-
-The rules for how OS/2 perl combines your filename with the suffix
-(the thing passed to "-i") are rather complicated, but the basic
-idea is that the "obvious" name is chosen.
-
-Here are the rules:
-
-Style 0: Append the suffix exactly as UNIX perl would do it.
- If the filesystem likes it, use it. (HPFS will always
- swallow it. FAT will rarely accept it.)
-
-Style 1: If the suffix begins with a '.', change the file extension
- to whatever you supplied. If the name matches the original
- name, use the fallback method.
-
-Style 2: If the suffix is a single character, not a '.', try to add the
- suffix to the following places, using the first one that works.
- [1] Append to extension.
- [2] Append to filename,
- [3] Replace end of extension,
- [4] Replace end of filename.
- If the name matches the original name, use the fallback method.
-
-Style 3: Any other case: Ignore the suffix completely and use the
- fallback method.
-
-Fallback method: Change the extension to ".$$$". If that matches the
- original name, then change the extension to ".~~~".
-
-If filename is more than 1000 characters long, we die a horrible
-death. Sorry.
-
-Examples, assuming style 0 failed.
-
-suffix = ".bak" (style 1)
- foo.bar => foo.bak
- foo.bak => foo.$$$ (fallback)
- foo.$$$ => foo.~~~ (fallback)
- makefile => makefile.bak
-
-suffix = "~" (style 2)
- foo.c => foo.c~
- foo.c~ => foo.c~~
- foo.c~~ => foo~.c~~
- foo~.c~~ => foo~~.c~~
- foo~~~~~.c~~ => foo~~~~~.$$$ (fallback)
-
- foo.pas => foo~.pas
- makefile => makefile.~
- longname.fil => longname.fi~
- longname.fi~ => longnam~.fi~
- longnam~.fi~ => longnam~.$$$
-
-2.2. Directory access.
-
-Are implemented, but in order to support telldir() and seekdir(),
-they operate by reading in the entire directory at opendir(),
-then handing out pieces of it each time you do a readdir().
-
-2.3. Pipes and redirection.
-
-Pipes and redirection are supported. Although OS/2 does not
-terminate programs which try to write to closed pipes, perl will
-kill them for you if you do it like this:
-
- open(I, "long-running-program|");
- ... process a few lines ...
- close(I); # discard the rest ...
-
-The killing works like this: We wait until the child program either
-closes its stdout or tries to write to it. If it writes to its stdout,
-we kill it. Otherwise, we cwait for it. This is pretty much what UNIX
-does by default.
-
-All pipe commands are given to cmd.exe (or your COMSPEC) for execution as
-
- CMD /c your-command-line
-
-so you can go ahead and load it up with any goofy things you want,
-like 2>1 redirection, more pipes, && || etc.
-
-The pipe() function is also supported, so you can go ahead and
-make your own funky file descriptor connections before piping off
-a process. However, you have to mark the descriptor you are
-retaining as NOINHERIT before spawning, else you are in deadlock city.
-Unfortunately, there's no way to mark the handle as NOINHERIT yet.
-It's on my wish list.
-
-2.4. Syscall and Ioctl
-
-IOCtl is not supported because the API is very different from the
-UNIX API. Instead, IOCtl is supported as a syscall. Here are
-the syscalls I've written so far:
-
- $OS2_GetVersion = 0;
- $OS2_Shutdown = 1;
- $OS2_Beep = 2;
- $OS2_PhysicalDisk = 3;
- $OS2_Config = 4;
- $OS2_IOCtl = 5;
- $OS2_QCurDisk = 6;
- $OS2_SelectDisk = 7;
- $OS2_SetMaxFH = 8;
- $OS2_Sleep = 9;
- $OS2_StartSession = 10;
- $OS2_StopSession = 11;
- $OS2_SelectSession = 12;
-
-The arguments you pass are handed off to OS/2 without interpretation,
-and the return value is returned straight to you. However, you don't
-have to supply arguments for the ones whose descriptions are "must be
-zero"; perl will supply the mandatory zeros for you.
-
-2.5. Binary file access
-
-Files are opened in text mode by default. This means that CR LF pairs
-are translated to LF. If binary access is needed the `binarymode'
-function should be used. There is currently no way to reverse the
-effect of the binary function. If that is needed close and reopen the
-file.
-
-2.6. Priority
-
-The getpriority and setpriority functions are implemented, but since
-OS/2 priorities are different from UNIX priorities, the arguments aren't
-the same. Basically, the arguments you pass are handed directly to
-OS/2. The only exception is the last argument to setpriority. To make
-it easier to make delta priorities, if the priority class is 0xff, it
-is changed to 0. That way, you can write
-
- setpriority(0,0,-2)
-
-instead of
-
- setpriority(0,0,0xfe)
-
-to decrease the delta by 2.
-
-2.7. Interpreter startup.
-
-The effect of the Unix #!/bin/perl interpreter startup can be obtained
-under OS/2 by giving the script a .cmd extension and beginning the script
-with the line
-
- extproc C:\binp\perl.exe -S
-
-You should provide the appropriate path to your executable, and
-the -S option is necessary so that perl can find your script.
-
-2.8. The kill function.
-
-UNIX and OS/2 have different ideas about the kill function. I've
-done a pretty feeble job of taking perl's UNIXish approach and
-trying to jam it into the OS/2 way. No doubt you'll find that
-your kill()s aren't working. My apologies in advance.
-
-3. Bug reports.
-
-I don't normally have access to an OS/2 machine, so if you find
-a bug, you can go ahead and tell me about it, but the odds that
-I'd be able to fix it are slim.
-
-4. Wish list.
-
-4.1. OS/2.
-
-Make ENOPIPE a fatal error.
-
-Permit linking of files. (Allegedly, they're working on this.)
-
-Get a fork.
-
-Make CMD.EXE pass through the return code of its child.
-
-4.2 perl.
-
-Provide a nice way to add new functions to perl without having
-to understand the innards of perl. Not being fluent in perl
-innards hacking, I added my extra functions via syscall.
-
-4.3. My port.
-
-4.3.1. In-place editing.
-
-Make more idiot-proof.
-
-Allow in-place editing without backup. (How?)
-
-4.3.2. Spawning and piping.
-
-Make popen() cleverer. Currently, it blindly hands everything
-off to CMD.EXE. This wastes an exec if the command line didn't
-have any shell metacharacters and if the program being run
-is not a batch file.
-
-Clever spawning is carried out by do_spawn. We should try
-to make popen() do much of the same sort of preprocessing
-as do_spawn does (which means, of course, that we probably
-should yank out code to be dished off into a subroutine).
-
-In do_spawn(), use DosExecPgm instead of spawnl in order to get more
-precise reasons why the child terminated (RESULTCODES).
-
-
- July 1990
-
- Raymond Chen <rjc@math.princeton.edu>
- 1817 Oxford St. Apt 6
- Berkeley, CA 94709-1828 USA
-
------------------------
-I picked up the OS/2 port with patches 19-28. When compiling, I found
-out that os2.c and director.c were missing. I had to rewrite them because
-even the original author of the port (Raymond Chen) did no longer have them.
-
-I had directory routines laying around, this was no big deal.
-I rewrote os2.c, but did not implement the syscall() as described above.
-I had not the time and did not really need it. Feel free ...
-
-Changes to above described port:
-
-- the small program GLOB is now named PERLGLOB for better ordering in
- my /bin directory
-
-- added help page (well, a graphical user interface would be overkill
- but a simple help page should be in every program :-)
-
-- several cosmetic changes in standard distribution files because of
- naming conventions etc., #ifdef'd OS2
-
-- syscall() not supported as noted above
-
-- chdir now recognizes also drive letters and changes also the drive
-
-- new mypopen(), mypclose() functions and simulation routines for DOS mode,
- they are selected automatically in real mode
-- the new pclose() does not kill the child, my experience is that this is
- not needed.
-
-- setpriority is now: setpriority(class, pid, val)
- see description of DosSetPrty() for class and val meanings
-- getpriority is now: getpriority(dummy, pid)
- see description of DosGetPrty()
-
-- kill is now: kill(pid, sig)
- where sig can be 0 (kill process)
- 1-3 (send process flags A-C, see DosFlagProcess())
- if pid is less than zero, the signal is sent to the whole
- process tree originating at -pid.
-
-The following files are now new with patch >=29:
-
-readme.os2 this file
-
-dir.h sys/dir.h
-director.c directory routines
-os2.c kernel of OS/2 port (see below)
-popen.c new popen.c
-mktemp.c enhanced mktemp(), uses TMP env. variable, used by popen.c
-alarm.c PD implementation for alarm()
-alarm.h header for alarm.c
-
-perl.cs Compiler Shell script for perl itself
-perl.def linker definition file for perl
-perl.bad names of protect-only API calls for BIND
-perlglob.cs Compiler Shell script for perl globbing program
-perlglob.def linker definition file for perlglob
-a2p.cs Compiler Shell script for a2p (see below)
-a2p.def linker definition file for a2p
-makefile Makefile, not tested
-
-perlsh.cmd the converted perlsh
-perldb.dif changes required for perldb.pl (change for your needs)
-selfrun.cmd sample selfrunning perl script for OS/2
-selfrun.bat sample selfrunning perl script for DOS mode
-
-Note: I don't use make but my own utility, the Compiler Shell CS.
-It was posted in comp.binaries.os2 or you can ask me for the newest
-version. The .CS files are the "makefiles" for it.
-
-Note: MS C 6.00 is required. C 5.1 is not capable of compiling perl,
-especially not with -DDEBUGGING
-
-
- August 1990
-
- Kai Uwe Rommel
- rommel@lan.informatik.tu-muenchen.dbp.de
- Zennerstr. 1
- D-8000 Muenchen 70
-
-
-+ I have verified with patchlevel 37, that the OS/2 port compiles,
- after doing two minor changes. HPFS filenames support was also added.
- Some bugs were fixed.
-+ To compile,
- - you need the bison parser generator
- - copy config.h from os2 into the main perl directory (important !)
- - copy perl.cs and perlglob.cs from the os2 subdir to the main dir
- - copy a2p.cs from os2 to x2p
- - say "bison -d perl.y"
- "ren perl_tab.c perl.c" and
- "ren perl_tab.h perly.h" in the main directory
- - say "cs perl" and
- "cs perlglob" in the main directory
- - say "cs a2p" in the x2p subdir
-+ If you don't have CS or don't want to use it, you have to
- construct a makefile ...
-+ If you have GNU gdbm, you can define NDBM in config.h and link with a
- large model library of gdbm.
-+ I am not sure if I can verify the OS/2 port with each release
- from Larry Wall. Therefore, in future releases there may be
- changes required to compile perl for OS/2.
- October 1990
- Kai Uwe Rommel
- rommel@lan.informatik.tu-muenchen.dbp.de
-
-
-Verified patchlevel 40.
-Some bugs were fixed. Added alarm() support (using PD implementation).
-
-
- November 1990
-
- Kai Uwe Rommel
- rommel@lan.informatik.tu-muenchen.dbp.de
-Verified perl 4.0 at patchlevel 10
-Changes:
-- some minor corrections and updates in various files
-- new os2/config.h created from original config.H
-- added support for crypt(), PD routine by A.Tanenbaum in new os2/crypt.c
-- added support for wait4pid() in os2.c
-- fixed/added support for -P option (requires a standard CPP for OS/2)
-- os2/mktemp.c deleted, no longer needed
-- new Makefile created for MS C 6.00 and it's NMAKE
-- with os2/perl.cs, bison has no longer to be called manually
-I have successfully run most tests. Diffs are in os2/tests.dif.
-Often, only command names, shell expansion etc. have to be changed.
-Test that still don't run are Unix-specific ones or fail because
-of CR/LF-problems:
-- io/argv.t, io/inplace.t, op/exec.t, op/glob.t (minor problems)
-- io/fs.t, io/pipe.t op/fork.t, op/magic.t, op/time.t
- (under OS/2 not supported features of Unix)
-- op/pat.t (bug, not yet fixed)
-Remember to remove the HAS_GDBM symbol from os2/config.h or
-get GNU gdbm for OS/2.
- June 1991
- Kai Uwe Rommel
- rommel@lan.informatik.tu-muenchen.dbp.de
-Verified perl 4.0 at patchlevel 19
-Minor fixes. Previous fixes at PL10 were not included into distribution.
- November 1991
- Kai Uwe Rommel
- rommel@informatik.tu-muenchen.dbp.de
-
-
-Verified patchlevel 44.
-Only two #ifdefs added to eval.c. Stack size for A2P had to be corrected.
-PERLGLOB separated from DOS version because of HPFS support.
-
-[Note: instead of #ifdef'ing eval.c I fixed it in perl.h--lwall]
-
- January 1991
-
- Kai Uwe Rommel
- rommel@lan.informatik.tu-muenchen.dbp.de