home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / ide / redirout.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-03  |  2.1 KB  |  88 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      REDIROUT.PAS                      *)
  3. (*            Umleitung der Standard-Ausgabe              *)
  4. (*            (c) 1993 te-wi Verlag, München              *)
  5. (* ------------------------------------------------------ *)
  6. UNIT RedirOut;
  7.  
  8. {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
  9. {$M 16384,0,655360}
  10.  
  11. INTERFACE
  12.  
  13. CONST
  14.   stdin   : WORD = 0;
  15.   stdout  : WORD = 1;
  16.   stderr  : WORD = 2;
  17.  
  18.   RedFile : STRING = 'STDOUT.RED' + #0;
  19.  
  20. VAR
  21.   oldin  : WORD;
  22.   oldout : WORD;
  23.   olderr : WORD;
  24.   Err    : WORD;
  25.  
  26.   FUNCTION RedOut  : WORD;
  27.   FUNCTION RedBack : WORD;
  28.  
  29. IMPLEMENTATION
  30.  
  31.   FUNCTION RedOut : WORD;
  32.   BEGIN
  33.     ASM
  34.       MOV  BX, stdout
  35.       MOV  AH, 45h
  36.       INT  21h                 (* duplicate stdout        *)
  37.       JC   @Error              (* failed                  *)
  38.  
  39.       MOV  oldout, AX          (* save stdout             *)
  40.  
  41.       MOV  CX, 0               (* normal attribute        *)
  42.       MOV  DX, OFFSET redfile + 1
  43.       MOV  AH, 3Ch
  44.       INT  21h
  45.       JC   @Error              (* failed                  *)
  46.  
  47.       MOV  BX, AX              (* redirect stdout hdle to *)
  48.       MOV  CX, stdout          (* track the new file hdle *)
  49.       MOV  AH, 46h
  50.       INT  21h
  51.       JC   @Error              (* failed                  *)
  52.  
  53.       MOV  Err, 0
  54.       JMP  @ok
  55.     @Error:
  56.       MOV  Err, AX             (* Error code              *)
  57.     @Ok:
  58.     END;
  59.   END;
  60.  
  61.   FUNCTION RedBack : WORD;
  62.   BEGIN
  63.     ASM
  64.       MOV  BX, oldout          (* restore original handle *)
  65.       MOV  CX, stdout
  66.       MOV  AH, 46h
  67.       INT  21h
  68.       JC   @Error2             (* failed                  *)
  69.  
  70.       MOV  BX, oldout          (* close dup'd handle      *)
  71.       MOV  AH, 3Eh
  72.       INT  21h
  73.       JC   @Error2             (* failed                  *)
  74.  
  75.       MOV  Err, 0
  76.       JMP  @ok2
  77.     @Error2:
  78.       MOV  Err, AX
  79.     @Ok2:
  80.     END;
  81.   END;
  82.  
  83. BEGIN
  84. END.
  85. (* ------------------------------------------------------ *)
  86. (*                  Ende von REDIROUT.PAS                 *)
  87.  
  88.