Full ANSIfication with prototypes.
[vms-empire.git] / display.c
index 6f90017..0970c58 100644 (file)
--- a/display.c
+++ b/display.c
@@ -1,5 +1,3 @@
-/* $Id: display.c,v 1.13 2006/07/25 17:21:51 esr Exp esr $  - (c) Copyright 1987, 1988 Chuck Simmons */
-
 /*
  *    Copyright (C) 1987, 1988 Chuck Simmons
  * 
@@ -30,9 +28,9 @@ static int save_sector; /* the currently displayed sector */
 static int save_cursor; /* currently displayed cursor position */
 static int change_ok = TRUE; /* true if new sector may be displayed */
 
-static void show_loc(view_map_t vmap[],long loc);
+static void show_loc(view_map_t vmap[],loc_t loc);
 static void disp_square(view_map_t *vp);
-int on_screen(long loc);
+int on_screen(loc_t loc);
 
 #ifdef A_COLOR
 void init_colors(void)
@@ -48,6 +46,7 @@ void init_colors(void)
     init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
     init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
     attron(A_BOLD);    /* otherwise we get gray for white */
+    keypad(stdscr, TRUE);
 }
 #endif /* A_COLOR */
 
@@ -58,6 +57,64 @@ void announce (char *msg) {
     (void) addstr (msg);
 }
 
+
+/*
+ * Map input character to direction offset.
+ * Attempts to enable arrow and keypad keys.
+ */
+int direction(chtype c)
+{
+    switch (c)
+    {
+    case 'w':
+    case 'W':
+    case KEY_UP:
+       return 0;
+
+    case 'e':
+    case 'E':
+    case KEY_A3:
+    case KEY_PPAGE:
+       return 1;
+
+    case 'd':
+    case 'D':
+    case KEY_RIGHT:
+       return 2;
+
+    case 'c':
+    case 'C':
+    case KEY_C3:
+    case KEY_NPAGE:
+       return 3;
+
+    case 'x':
+    case 'X':
+    case KEY_DOWN:
+       return 4;
+
+    case 'z':
+    case 'Z':
+    case KEY_C1:
+    case KEY_END:
+       return 5;
+
+    case 'a':
+    case 'A':
+    case KEY_LEFT:
+       return 6;
+
+    case 'q':
+    case 'Q':
+    case KEY_A1:
+    case KEY_HOME:
+       return 7;
+
+    default:
+       return -1;
+    }
+}
+
 /*
 This routine is called when the current display has been
 trashed and no sector is shown on the screen.
@@ -91,7 +148,7 @@ Return the current position of the cursor.  If the user's map
 is not on the screen, we return -1.
 */
 
-long cur_cursor (void) {
+loc_t cur_cursor (void) {
        if (whose_map != USER) return (-1);
        return (save_cursor);
 }
@@ -106,10 +163,8 @@ redisplay the sector, or if the location is not on the screen.
 */
 
 void
-display_loc (whose, vmap, loc)
-int whose; /* whose map to display */
-view_map_t vmap[];
-long loc; /* location to display */
+display_loc (int whose, view_map_t vmap[], loc_t loc)
+/* whose is whose map to display; loc is location to display */
 {
        if (change_ok || whose != whose_map || !on_screen (loc))
                print_sector (whose, vmap, loc_sector (loc));
@@ -122,10 +177,8 @@ Display a location iff the location is on the screen.
 */
 
 void
-display_locx (whose, vmap, loc)
-int whose; /* whose map to display */
-view_map_t vmap[];
-long loc; /* location to display */
+display_locx (int whose, view_map_t vmap[], loc_t loc)
+/* whose is whose map to display; loc is location to display */
 {
        if (whose == whose_map && on_screen (loc))
                show_loc (vmap, loc);
@@ -136,9 +189,7 @@ Display a location which exists on the screen.
 */
 
 void
-show_loc (vmap, loc)
-view_map_t vmap[];
-long loc;
+show_loc (view_map_t vmap[], loc_t loc)
 {
        int r, c;
        
@@ -170,10 +221,8 @@ screen.
 */
  
 void
-print_sector (whose, vmap, sector)
-char whose; /* USER or COMP */
-view_map_t vmap[]; /* map to display */
-int sector; /* sector to display */
+print_sector(int whose, view_map_t vmap[], int sector)
+/* whose is USER or COMP, vmap is map to display, sector is sector to display */
 {
        void display_screen();
 
@@ -251,8 +300,7 @@ pretty.
 */
 
 
-static void disp_square(vp)
-view_map_t *vp;
+static void disp_square(view_map_t *vp)
 {
 #ifdef A_COLOR
        chtype attr;
@@ -295,12 +343,11 @@ view_map_t *vp;
 Display the portion of the map that appears on the screen.
 */
 
-void display_screen (vmap)
-view_map_t vmap[];
+void display_screen(view_map_t vmap[])
 {
        int display_rows, display_cols;
        int r, c;
-       long t;
+       loc_t t;
 
        display_rows = lines - NUMTOPS - 1; /* num lines to display */
        display_cols = cols - NUMSIDES;
@@ -320,11 +367,10 @@ We display the cursor on the screen, if possible.
 */
 
 int
-move_cursor (cursor, offset)
-long *cursor; /* current cursor position */
-int offset; /* offset to add to cursor */
+move_cursor(loc_t *cursor, int offset)
+/* cursor is current cursor position, offset is offset to add to cursor */
 {
-       long t;
+       loc_t t;
        int r, c;
  
        t = *cursor + offset; /* proposed location */
@@ -345,8 +391,7 @@ int offset; /* offset to add to cursor */
 See if a location is displayed on the screen.
 */
 
-int on_screen (loc)
-long loc;
+int on_screen (loc_t loc)
 {
        int new_r, new_c;
        
@@ -365,8 +410,7 @@ long loc;
 /* Print a view map for debugging. */
 
 void
-print_xzoom (vmap)
-view_map_t *vmap;
+print_xzoom(view_map_t *vmap)
 {
        print_zoom (vmap);
 #if 0
@@ -382,8 +426,7 @@ Print a condensed version of the map.
 char zoom_list[] = "XO*tcbsdpfaTCBSDPFAzZ+. ";
 
 void
-print_zoom (vmap)
-view_map_t *vmap;
+print_zoom(view_map_t *vmap)
 {
        void print_zoom_cell ();
 
@@ -409,10 +452,8 @@ Print a single cell in condensed format.
 */
 
 void
-print_zoom_cell (vmap, row, col, row_inc, col_inc)
-view_map_t *vmap;
-int row, col;
-int row_inc, col_inc;
+print_zoom_cell(view_map_t *vmap, 
+                int row, int col, int row_inc, int col_inc)
 {
        int r, c;
        char cell;
@@ -433,10 +474,7 @@ Print a condensed version of a pathmap.
 */
 
 void
-print_pzoom (s, pmap, vmap)
-char *s;
-path_map_t *pmap;
-view_map_t *vmap;
+print_pzoom(char *s, path_map_t *pmap, view_map_t *vmap)
 {
        void print_pzoom_cell();
 
@@ -468,11 +506,8 @@ between P and Z are printed as U.
 */
 
 void
-print_pzoom_cell (pmap, vmap, row, col, row_inc, col_inc)
-path_map_t *pmap;
-view_map_t *vmap;
-int row, col;
-int row_inc, col_inc;
+print_pzoom_cell(path_map_t *pmap, view_map_t *vmap, 
+                 int row, int col, int row_inc, int col_inc)
 {
        int r, c;
        int sum, d;
@@ -512,7 +547,7 @@ Display the score off in the corner of the screen.
 */
 
 void
-display_score (void)
+display_score(void)
 {
        pos_str (1, cols-12, " User  Comp",0,0,0,0,0,0,0,0);
        pos_str (2, cols-12, "%5d %5d", user_score, comp_score,0,0,0,0,0,0);
@@ -523,8 +558,7 @@ Clear the end of a specified line starting at the specified column.
 */
 
 void
-clreol(linep, colp)
-int linep, colp;
+clreol(int linep, int colp)
 {
        (void) move (linep, colp);
        (void) clrtoeol();
@@ -558,7 +592,8 @@ display.
 */
 
 void
-clear_screen (void) {
+clear_screen(void)
+{
        (void) clear ();
        (void) refresh ();
        kill_display ();
@@ -569,12 +604,14 @@ Redraw the screen.
 */
 
 void 
-redisplay (void) {
+redisplay(void)
+{
        (void) refresh ();
 }
 
 void
-redraw (void) {
+redraw(void)
+{
        (void) clearok (curscr, TRUE);
        (void) refresh ();
 }
@@ -585,7 +622,8 @@ the screen and pause for a few milliseconds.
 */
 
 void
-delay (void) {
+delay(void)
+{
         int t = delay_time;
         int i = 500;
        (void) refresh ();
@@ -619,19 +657,16 @@ Position the cursor and output a string.
 */
 
 void
-pos_str1 (row, col, str, a, b, c, d, e, f, g, h)
-int row, col;
-char *str, *a;
-int b, c, d, e, f, g, h;
+pos_str1(int row, int col, char *str, char *a, 
+         int b, int c, int d, int e, int f, int g, int h)
 {
        (void) move (row, col);
        addprintf1 (str, a, b, c, d, e, f, g, h);
 }
+
 void
-pos_str (row, col, str, a, b, c, d, e, f, g, h)
-int row, col;
-char *str;
-int a, b, c, d, e, f, g, h;
+pos_str(int row, int col, char *str, 
+       int a, int b, int c, int d, int e, int f, int g, int h)
 {
        (void) move (row, col);
        addprintf (str, a, b, c, d, e, f, g, h);
@@ -639,9 +674,7 @@ int a, b, c, d, e, f, g, h;
 
 void
 /* VARARGS1 */
-addprintf (str, a, b, c, d, e, f, g, h)
-char *str;
-int a, b, c, d, e, f, g, h;
+addprintf(char *str, int a, int b, int c, int d, int e, int f, int g, int h)
 {
        char junkbuf[STRSIZE];
        
@@ -650,22 +683,17 @@ int a, b, c, d, e, f, g, h;
 }
 void
 /* VARARGS1 */
-addprintf1 (str, a, b, c, d, e, f, g, h)
-char *str;
-char *a;
-int b, c, d, e, f, g, h;
+addprintf1(char *str, char *a, int b, int c, int d, int e, int f, int g, int h)
 {
        char junkbuf[STRSIZE];
        
        (void) sprintf (junkbuf, str, a, b, c, d, e, f, g, h);
        (void) addstr (junkbuf);
 }
+
 void
 /* VARARGS1 */
-addprintf2 (str, a, b, c, d, e, f, g, h)
-char *str;
-char *a, *e, *f;
-int b, c, d, g, h;
+addprintf2(char *str, char *a, int b, int c, int d, char *e, char *f, int g, int h)
 {
        char junkbuf[STRSIZE];
        
@@ -680,10 +708,7 @@ Print a single cell in condensed format.
 extern char zoom_list[];
 
 void
-print_movie_cell (mbuf, row, col, row_inc, col_inc)
-char *mbuf;
-int row, col;
-int row_inc, col_inc;
+print_movie_cell(char *mbuf, int row, int col, int row_inc, int col_inc)
 {
        int r, c;
        char cell;