summaryrefslogtreecommitdiffstats
path: root/lib/libcurses/PSD.doc/ex2.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libcurses/PSD.doc/ex2.c')
-rw-r--r--lib/libcurses/PSD.doc/ex2.c210
1 files changed, 210 insertions, 0 deletions
diff --git a/lib/libcurses/PSD.doc/ex2.c b/lib/libcurses/PSD.doc/ex2.c
new file mode 100644
index 0000000..13e8f29
--- /dev/null
+++ b/lib/libcurses/PSD.doc/ex2.c
@@ -0,0 +1,210 @@
+.\" Copyright (c) 1992, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)ex2.c 8.1 (Berkeley) 6/8/93
+.\"
+#include <curses.h>
+#include <stdio.h>
+#include <signal.h>
+
+#define YSIZE LINES
+#define XSIZE COLS
+
+static int quit();
+
+/*
+ * This program fills the screen up with characters and the allows the user to
+ * manipulate the text on the screen using some basic commands.
+ * Nothing fancy, just a demonstration of the elementary features of the
+ * curses(3) package.
+ */
+main()
+{
+ int i, j, c, n, d = 0;
+ char id[100];
+ int hh = 0;
+ int curx, cury, base, arg;
+
+ initscr();
+ signal(SIGINT, quit);
+ crmode();
+ noecho();
+ nonl();
+ delwin(stdscr);
+ stdscr = newwin(YSIZE, XSIZE, 0, 0);
+ flushok(stdscr, TRUE);
+ scrollok(stdscr, TRUE);
+ erase();
+ refresh();
+
+ move(0,0);
+ refresh();
+ for (i = 0; i < YSIZE + 2; i++) {
+ sprintf(id, "%d: ", i);
+ addstr(id);
+ for (j = 0; j < XSIZE - strlen(id); j++)
+ addch('0' + (i % 10));
+ }
+ c = getchar();
+ base = 2;
+ curx = cury = 0;
+ move(0, 0);
+ refresh();
+
+ /*
+ * The screen manipulator has the following commands:
+ * 'D' - clear to the end of the current line.
+ * 'B' - clear to the bottom of the screen.
+ * 'E' - erase the screen.
+ * 's' - enter standout mode.
+ * 'e' - exit standout mode.
+ * 'd' n - delete n lines below cursor line.
+ * 'i' n - insert n lines below cursor line.
+ * 'q' - quit.
+ * 'f' - move cursor one position to the right.
+ * 'b' - move cursor one position to the left.
+ * 'n' - move cursor one line down.
+ * 'p' - move cursor one line up.
+ * 'h' - home cusor.
+ * 'l' - force refresh.
+ * 'r' - simulate a carriage return.
+ *
+ * All other characters are ignored.
+ */
+ for(;;) {
+ switch(c = getchar()) {
+ case 'D':
+ clrtoeol();
+ refresh();
+ continue;
+ case 'B':
+ clrtobot();
+ refresh();
+ continue;
+ case 'E':
+ erase();
+ refresh();
+ continue;
+ case 's':
+ standout();
+ continue;
+ case 'e':
+ standend();
+ continue;
+ case 'd':
+ arg = getchar() - '0';
+ for (i = 0; i < arg; i++)
+ deleteln();
+ refresh();
+ continue;
+ case 'i':
+ arg = getchar() - '0';
+ for (i = 0; i < arg; i++)
+ insertln();
+ refresh();
+ continue;
+ case 'q':
+ quit();
+ case 'f':
+ if (curx < XSIZE - 1)
+ curx++;
+ else {
+ cury++;
+ curx = 0;
+ }
+ break;
+ case 'b':
+ if (curx == 0) {
+ cury--;
+ curx = XSIZE - 1;
+ } else
+ curx--;
+ break;
+ case 'n':
+ cury++;
+ break;
+ case 'p':
+ cury--;
+ break;
+ case 'h':
+ curx = cury = 0;
+ break;
+ case 'l':
+ wrefresh(curscr);
+ continue;
+ case 'r': /* return */
+ {
+ int x, y;
+ getyx(stdscr, y, x);
+ move(y+1, 0);
+ insertln();
+ move(y, x);
+ clrtoeol();
+ refresh();
+ continue;
+ }
+ default:
+ continue;
+ }
+
+ if (cury < 0) {
+ base--;
+ move(0, 0);
+ insertln();
+ sprintf(id, "%d: ", base);
+ addstr(id);
+ for (j = 0; j < XSIZE - strlen(id) - 2; j++)
+ addch('0' + (base % 10));
+ cury++;
+ } else if (cury >= YSIZE) {
+ move(0, 0);
+ deleteln();
+ move(YSIZE - 1, 0);
+ sprintf(id, "%d: ", base + YSIZE);
+ addstr(id);
+ for (j = 0; j < XSIZE - strlen(id) - 2; j++)
+ addch('0' + ((base + YSIZE) % 10));
+ cury--;
+ base++;
+ }
+ move(cury, curx);
+ refresh();
+ }
+}
+
+int
+quit()
+{
+ erase();
+ refresh();
+ endwin();
+ exit(0);
+}
OpenPOWER on IntegriCloud