diff options
Diffstat (limited to 'os2/README.OS2')
-rw-r--r-- | os2/README.OS2 | 434 |
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 |