Mercurial > ~dholland > hg > ag > index.cgi
diff examples/dsl/redirect.h @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children | 607e3be6bad8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/dsl/redirect.h Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,80 @@ +/***** + + AnaGram Programming Examples + + A Dos Script Language + Redirection Class Definition + + Copyright 1993 Parsifal Software. All Rights Reserved. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +*****/ + +#ifndef REDIRECT_H +#define REDIRECT_H +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <string.h> +#include <fcntl.h> + +#if defined(__MSDOS__) || defined(__WINDOWS__) +#include <io.h> +#else +#include <unistd.h> +#include <stdlib.h> +#define O_TEXT 0 +#define O_BINARY 0 +#define tell(fd) lseek(fd, 0, SEEK_CUR) +/* This is only meant to compile, not run. (Unix) */ +#define filelength(fd) ((void)(fd), 0) +#endif + +#define STDIN 0 +#define STDOUT 1 +#define STDERR 2 + +class redirect { + int handle; // actual handle + int old_handle; // old handle + char name[L_tmpnam]; // temporary name, if any + int copy_flag; // is it live or is it memorex? +public: + +// Constructors + redirect(int h); + redirect(int h, char *file_name, int append_flag = 0); + redirect(redirect &); + +// Reset + friend redirect &reset(redirect &e) { + lseek(e.handle,0,0); + return e; + } + +// Destructor + ~redirect(); + +// Save resultant file + friend char *save_file(redirect &s); + +// Extract contents + friend char *content(redirect &s); +}; + +#endif