diff options
Diffstat (limited to 'msdos/README.msdos')
-rw-r--r-- | msdos/README.msdos | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/msdos/README.msdos b/msdos/README.msdos new file mode 100644 index 0000000000..fb7be1afe4 --- /dev/null +++ b/msdos/README.msdos @@ -0,0 +1,100 @@ + Notes on the MS-DOS Perl port + + Diomidis Spinellis + (dds@cc.ic.ac.uk) + +[0. First copy the files in the msdos directory into the parent +directory--law] + +1. Compiling. + + Perl has been compiled under MS-DOS using the Microsoft +C compiler version 5.1. Before compiling install dir.h as +<sys/dir.h>. You will need a Unix-like make program (e.g. +pdmake) and something like yacc (e.g. bison). You could get +away by running yacc and dry running make on a Unix host, +but I haven't tried it. Compilation takes 12 minutes on a +20MHz 386 machine (together with formating the manual), so +you will probably need something to do in the meantime. The +executable is 272k and the top level directory needs 1M for +sources and about the same ammount for the object code and +the executables. + + The makefile will compile glob for you which you will +need to place somewhere in your path so that perl globbing +will work correctly. I have not tried all the tests or the +examples, nor the awk and sed to Perl translators. You are +on your own with them. In the eg directory I have included +an example program that uses ioctl to display the charac- +teristics of the storage devices of the system. + +2. Using MS-DOS Perl + + The MS-DOS version of perl has most of the functional- +ity of the Unix version. Functions that can not be provided +under MS-DOS like sockets, password and host database +access, fork and wait have been ommited and will terminate +with a fatal error. Care has been taken to implement the +rest. In particular directory access, redirection (includ- +ing pipes, but excluding the pipe function), system, ioctl +and sleep have been provided. + +2.1. Interface to the MS-DOS ioctl system call. + + The function code of the ioctl function (the second +argument) is encoded as follows: + +- The lowest nibble of the function code goes to AL. +- The two middle nibbles go to CL. +- The high nibble goes to CH. + + The return code is -1 in the case of an error and if +successful: + +- for functions AL = 00, 09, 0a the value of the register DX +- for functions AL = 02 - 08, 0e the value of the register AX +- for functions AL = 01, 0b - 0f the number 0. + + See the perl manual for instruction on how to distin- +guish between the return value and the success of ioctl. + + Some ioctl functions need a number as the first argu- +ment. Provided that no other files have been opened the +number can be obtained if ioctl is called with +@fdnum[number] as the first argument after executing the +following code: + + @fdnum = ("STDIN", "STDOUT", "STDERR"); + $maxdrives = 15; + for ($i = 3; $i < $maxdrives; $i++) { + open("FD$i", "nul"); + @fdnum[$i - 1] = "FD$i"; + } + +2.2. 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 `binary' function should be used. There is +currently no way to reverse the effect of the binary func- +tion. If that is needed close and reopen the file. + +2.3. Interpreter startup. + + The effect of the Unix #!/bin/perl interpreter startup +can be obtained under MS-DOS by giving the script a .bat +extension and using the following lines on its begining: + + @REM=(" + @perl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 + @end ") if 0 ; + +(Note that you will probably want an absolute path name in +front of %0.bat). + + March 1990 + + Diomidis Spinellis <dds@cc.ic.ac.uk> + Myrsinis 1 + GR-145 62 Kifissia + Greece |