[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]
{
MARTIN AUSTERMEIER
> PKZIP Filename -Z < zipcomment
> Is there any way to do this WithOUT calling COMSPEC For anothershell?
yes, but much more complicated than leaving the job to %comspec..
Before executing PKZIP, you have to
* open a Text File
* get its handle (see TextRec); save it in - say - "newStdIn"
* then perform something like
if (newSTDIN <> 0) then begin
saveHandle[STDIN]:=DosExt.DuplicateHandle (STDIN);
DosExt.ForceDuplicateHandle (newSTDIN, STDIN);
created[STDIN]:=True;
end;
(DosExt.xx Routines and STDIN Const explained below)
* Exec()
* Cancel redirections:
}
Procedure CancelRedirections; { of ExecuteProgram }
Var
redirCnt : Word;
begin
For redirCnt := STDIN to STDOUT do
begin
if created[redirCnt] then
begin
DosExt.ForceDuplicateHandle(saveHandle[redirCnt], redirCnt);
DosExt.CloseHandle(saveHandle[redirCnt]);
end;
end;
end;
Const
STDIN = 0;
STDOUT = 1;
STDERR = 2;
Procedure CallDos; Assembler;
Asm
mov Dos.DosError, 0
Int 21h
jnc @@Ok
mov Dos.DosError, ax
@@Ok:
end;
Function DuplicateHandle(handle : Word) : Word; Assembler;
Asm
mov ah, 45h
mov bx, handle
call CallDos
{ DuplicateHandle := AX; }
end;
Procedure ForceDuplicateHandle(h1, h2 : Word); Assembler;
Asm
mov ah, 46h
mov bx, h1
mov cx, h2
call CallDos
end;
[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]