home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / redout / redout.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1993-05-01  |  1.9 KB  |  70 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       REDOUT.PAS                       *)
  3. (*   Standardausgabe für einen Tochterprozeß umleiten     *)
  4. (*             (c) 1993 te-wi Verlag, München             *)
  5. (* ------------------------------------------------------ *)
  6. PROGRAM RedirectOutput;
  7.  
  8. CONST
  9.   stdin   : WORD = 0;
  10.   stdout  : WORD = 1;
  11.   stderr  : WORD = 2;
  12.  
  13.   RedFile : STRING = 'STDOUT.RED' + #0;
  14.  
  15. VAR
  16.   oldin  : WORD;
  17.   oldout : WORD;
  18.   olderr : WORD;
  19.   Err    : WORD;
  20.  
  21. BEGIN
  22.   ASM
  23.     MOV  BX, stdout
  24.     MOV  AH, 45h
  25.     INT  21h                   (* duplicate stdout        *)
  26.     JC   @Error                (* failed                  *)
  27.  
  28.     MOV  oldout, AX            (* save stdout             *)
  29.  
  30.     MOV  CX, 0                 (* normal attribute        *)
  31.     MOV  DX, OFFSET redfile + 1
  32.     MOV  AH, 3Ch
  33.     INT  21h
  34.     JC   @Error                (* failed                  *)
  35.  
  36.     MOV  BX, AX                (* redirect stdout hdle to *)
  37.     MOV  CX, stdout            (* track the new file hdle *)
  38.     MOV  AH, 46h
  39.     INT  21h
  40.     JC   @Error                (* failed                  *)
  41.  
  42.     JMP  @ok
  43.   @Error:
  44.     MOV  Err, AX               (* Error code              *)
  45.   @Ok:
  46.   END;
  47.   WriteLn('Error #', Err);     (* Ok: Error to STDOUT.RED *)
  48.  
  49.   ASM
  50.     MOV  BX, oldout            (* restore original handle *)
  51.     MOV  CX, stdout
  52.     MOV  AH, 46h
  53.     INT  21h
  54.     JC   @Error2               (* failed                  *)
  55.  
  56.     MOV  BX, oldout            (* close dup'd handle      *)
  57.     MOV  AH, 3Eh
  58.     INT  21h
  59.     JC   @Error2               (* failed                  *)
  60.  
  61.     JMP  @ok2
  62.   @Error2:
  63.     MOV  Err, AX
  64.   @Ok2:
  65.   END;
  66.   WriteLn('Error #', Err);     (* Ok: Error to CON        *)
  67. END.
  68. (* ------------------------------------------------------ *)
  69. (*                  Ende von REDOUT.PAS                   *)
  70.