diff examples/dsl/screen.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 a02e9434072e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/dsl/screen.h	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,123 @@
+/*****
+
+ AnaGram Programming Examples
+
+ A Dos Script Language
+ Screen Control Class Definitions
+
+ 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 SCREEN_H
+#define SCREEN_H
+
+#include "pair.h"
+
+#define COLOR(fg,bg) (((bg & 0xf) << 4) | (fg & 0xf))
+
+#ifdef __386__
+  #define INT int386
+  #define COLOR_ADAPTER_ADDRESS   0XB8000
+#else
+  #define INT int86
+  #define COLOR_ADAPTER_ADDRESS   0XB8000000
+#endif
+
+
+// char_cell class
+
+class char_cell {
+public:
+  unsigned char data, color;
+  char_cell() {data = color = 0;}
+  char_cell(int d, int c) {
+    data = (unsigned char) d, color = (unsigned char) c;
+  }
+  char_cell(int d, int fg, int bg) {
+    data = (unsigned char) d, color = (unsigned char) COLOR(fg,bg);
+  }
+  char_cell &operator = (int d) {
+    data = (unsigned char) d;
+    return *this;
+  }
+};
+
+
+// Protect Display
+
+class protect_display {
+  char_cell *p;
+  unsigned n;
+  pair<int> cursor_position;
+public:
+  protect_display();
+  ~protect_display();
+};
+
+
+// Screen Rectangle class
+
+class screen_rect{
+public:
+  pair <int> pos, size;              // position and size of screen_rect
+  pair <int> jm;                     // justification mode
+
+// No constructors or destructors defined
+
+// Build a screen rectangle at absolute coordinates
+  friend screen_rect at(int, int, int);
+
+// Build a screen rectangle at relative coordinates
+  screen_rect at(int,int,int = 0);
+
+// Build a single line rectange at absolute coordinates
+  friend screen_rect line(int, int, int, int = 0);
+
+// Build a single line rectangle at relative coordinates
+  screen_rect line(int,int,int,int = 0) const;
+
+// Read the contents of a screen rectangle
+  friend char_cell *contents(const screen_rect &);
+
+// Set the contents of a screen rectangle
+  screen_rect &operator << (const char_cell *);
+
+// Build a sub-rectangle of given width, depth
+  screen_rect rect(int w, int d, int jm = 11);
+
+// Draw a box around a screen rectangle
+  friend screen_rect box(screen_rect);
+
+// Display data in rectangle
+  screen_rect &operator << (const char_cell &p);
+  screen_rect &operator << (const int);
+  screen_rect &operator << (const char *s);
+
+// Tint a rectangle
+   screen_rect &tint(int color);
+   screen_rect &tint(int fg, int bg);
+
+// Set cursor relative to rectangle
+  screen_rect &set_cursor(const int = 0, const int = 0);
+};
+
+screen_rect at(int, int, int = 0);
+
+#endif