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