home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
375.lha
/
ARPTools_v1.0
/
src
/
Tee.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-02
|
2KB
|
97 lines
/*
Tee - Create a T junction in a pipe.
Original effort by Fabio Rossetti. Inspired by the tee program
by Gary Brant found on <>< 179.
(c) 1989 by Fabio Rossetti
To compile under Lattice C v5.0x use:
lc -O -v -cus tee
blink lib:cres.o tee.o to tee lib lib:a.lib lib:lc.lib sd nd
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/libraries.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <libraries/arpbase.h>
#include <arpfunctions.h>
#include <proto/exec.h>
#include <proto/dos.h>
#define BFSIZE 256
struct ArpBase *ArpBase;
BPTR Stdout,Stdin,fh;
struct Process *Pr;
TEXT *Buf;
/* Trick to keep code down to size */
VOID MemCleanup()
{
}
/* as above */
VOID _main(Line)
STRPTR Line;
{
STRPTR argv;
REGISTER ULONG count;
Pr = (struct Process*)FindTask(NULL);
if(!(ArpBase = (struct ArpBase*)OpenLibrary(ArpName,ArpVersion))){
Pr->pr_Result2=ERROR_INVALID_RESIDENT_LIBRARY;
exit(RETURN_FAIL);
}
/* parse command line */
argv = NULL;
while(*Line > ' ')
++Line;
/* don't need argc */
if (GADS(++Line,
strlen(Line),
"Usage: Tee <Stdin >Stdout Filename",
&argv,
"FILE/A") <= 0) {
Puts(argv);
CloseLibrary((struct Library *)ArpBase);
exit(RETURN_WARN);
}
Stdout = Output();
Stdin = Input();
if (!(Buf=(ArpAlloc(BFSIZE)))) {;
Puts ("Error: No memory");
Pr->pr_Result2 = ERROR_NO_FREE_STORE;
exit(RETURN_FAIL);
}
if (!(fh = ArpOpen(argv,MODE_NEWFILE))) {
Puts ("Error: Can't open file.");
Pr->pr_Result2 = ERROR_OBJECT_NOT_FOUND;
exit(RETURN_ERROR);
}
/* Now copy streams */
while (count = Read(Stdin,Buf,BFSIZE)){
Write(Stdout,Buf,count);
Write(fh,Buf,count);
}
CloseLibrary((struct Library *)ArpBase);
}