[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
{
GH> I want to suppress the screen output of an archiver
Well I have a idea how you would do that.... What you need to do is tap into
interrupt $21 and check if AH=9, if it does that means that dos is calling the
print_string (or whatever its called) function. So if you detect that, just
return, otherwise jump onto DOS and let it process that. so you would set that
up just b4 you exec, then exec, then restore the original interrupt. Heres
some code I made. It doesn't work but I think it comes fairly close.....
}
Unit DosTrap;
Interface
Var Int21Save : Procedure; {Pointer to the old 1C. }
Procedure InstallInt21h; {Install the interrupt routine for $1C.
}Procedure RestoreInt21h; {Restore the original interrupt for $1C.
}Procedure Suppress(ProgramName,
CommandLine:
String);
Implementation
Uses CRT,
DOS;
{$F+,S-}
Procedure IntHandler;
Interrupt;
Assembler;
Asm
Cmp AH,0
PushF
Je @Done
Call Int21Save
@Done:
End;
{$F-,S-}
Procedure InstallInt21h;
Begin
GetIntVec($21,@Int21Save);
SetIntVec($21,Addr(IntHandler));
End;
Procedure RestoreInt21h;
Begin
SetIntVec($21,@Int21Save);
End;
Procedure Suppress(ProgramName, CommandLine : String);
Begin
InstallInt21h;
SwapVectors;
Exec(ProgramName, CommandLine);
SwapVectors;
RestoreInt21h;
End;
End.
--------> A sample program using it...
{$M $4000,0,0 } { 16K stack, no heap }
Uses DosTrap, Dos,Crt;
Begin
ClrScr;
WriteLn('Exec''ing');
Suppress('C:\pkunzip.exe','');
WriteLn('Done.');
End.
---------------->End.
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]