GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:computers:dos_err
    DOS 2.0 HAS PROBLEMS WITH REDIRECTION OF I/O
   There  are  problems  in  DOS  2.0 with the redirection of I/O and

piping for programs that use the original DOS 1.1 INT 21 function calls for input. This problem is readily apparent to users of C language packages such as Computer Innovation C-86, Lattice C, or Microsoft C (you'd think they would get it right!). One problem is that all output to the screen is redirected, even keyboard echo. Correct operation would redirect all program output for the screen (stdout) to the specified >file, but the echo of keyboard input would still be sent to the screen. Instead, both the keyboard echo and the program output are sent to the redirected >file. Thus, if you run programs such as the CAT.C (K&R,page 154) example that Microsoft distributes with their C; or COPYIO.C (K&R,page 15) with the output redirected to a file, you will get the following results:

    1.   Under  DOS  1.1, keyboard input is echoed to the screen
    as you type and each line  appears  in  the  >file  once	as
    expected.
    2.   Under  DOS  2.0,  keyboard  input  is not echoed to the
    screen, but each line appears in the >file twice!
   This situation is handled correctly in DOS  2.0  if  the  new  INT

21 function call 3F is used. This can be demonstrated by redirecting output for the DOS 2.0 function MORE - it works as desired.

   The redirecting of input to these programs doesn't  work  properly

either. If the file has not been edited with debug to end with a control-Z, the program will hang up at the end of the <input file. You must reboot the system to continue! Also, if you pipe the output of the first program into a second program, the final output will contain each line four times, doubled spaced after the second line! These problems do not occur for programs that use the new DOS 2.0 calls for I/O, such as SORT and MORE.

   The  question  now  is  how  do  you fixup C programs to run under

DOS 2.0 and not redirect keyboard echo to the stdout file? The easiest way for C compilers that include their own redirection code is to change their redirection symbols from <, >, and » to something else. Then DOS 2.0 won't do the redirection, so the C code will be able to do it correctly. With the Microsoft C compiler, this is easily accomplished by modifying three lines of code in _MAIN.C. A good choice is to modify _MAIN.C so that it redirects on the symbols {, }, and }}. The only restriction is that these symbols then should not be used in filenames. With these changes, the user can choose to let either DOS <, >, » or C {, }, }} do the redirecting. The modified version of _MAIN.C is compiled to obtain a new _MAIN.OBJ, which can either be put into the library MC.LIB to replace the original _MAIN by using the LIB.EXE utility, i.e. LIB MC.LIB -_MAIN+_MAIN or it can be kept separate. If kept separate, remember to include it in the list of .OBJ files specified in the LINK call, i.e. LINK c _main myprogram.

   The three lines to change in Microsoft C's  _MAIN are:
  case '{':
  case '}':
  if (*line == '}')
   Kludgy, yes, but it works better than before!!	 WHR	9-26-83

END OF TRANSFER - PRESS ENTER TO RETURN TO MENU = '}

/data/webs/external/dokuwiki/data/pages/archive/computers/dos_err.txt · Last modified: 1999/08/01 17:51 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki