Full ANSIfication with prototypes.
[vms-empire.git] / display.c
index 99abea7..0970c58 100644 (file)
--- a/display.c
+++ b/display.c
@@ -1,5 +1,3 @@
-/* $Id: display.c,v 1.8 2002/04/19 09:17:01 esr Exp esr $  - (c) Copyright 1987, 1988 Chuck Simmons */
-
 /*
  *    Copyright (C) 1987, 1988 Chuck Simmons
  * 
@@ -18,12 +16,7 @@ information:
        point of view;
 */
 
-#ifdef SYSV
 #include <string.h>
-#else
-#include <strings.h>
-#endif
-
 #include <curses.h>
 #include "empire.h"
 #include "extern.h"
@@ -35,12 +28,12 @@ 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 init_colors(void)
 {
     start_color();
 
@@ -52,15 +45,82 @@ void init_colors()
     init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
     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 */
 
+/*
+Used for win announcements 
+ */
+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.
 */
 
-void kill_display () {
+void kill_display (void) {
        whose_map = UNOWNED;
 }
 
@@ -69,7 +129,7 @@ This routine is called when a new sector may be displayed on the
 screen even if the location to be displayed is already on the screen.
 */
 
-void sector_change () {
+void sector_change (void) {
        change_ok = TRUE;
 }
 
@@ -78,7 +138,7 @@ Return the currently displayed user sector, if any.  If a user
 sector is not displayed, return -1.
 */
 
-int cur_sector () {
+int cur_sector (void) {
        if (whose_map != USER) return (-1);
        return (save_sector);
 }
@@ -88,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 () {
+loc_t cur_cursor (void) {
        if (whose_map != USER) return (-1);
        return (save_cursor);
 }
@@ -103,13 +163,9 @@ 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 */
 {
-       void print_sector();
-       
        if (change_ok || whose != whose_map || !on_screen (loc))
                print_sector (whose, vmap, loc_sector (loc));
                
@@ -121,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);
@@ -135,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;
        
@@ -169,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();
 
@@ -250,17 +300,18 @@ pretty.
 */
 
 
-static void disp_square(vp)
-view_map_t *vp;
+static void disp_square(view_map_t *vp)
 {
 #ifdef A_COLOR
+       chtype attr;
+
        switch(vp->contents)
        {
        case '+':
-               attron(COLOR_PAIR(COLOR_GREEN));
+           attr = COLOR_PAIR(COLOR_GREEN);
                break;
        case '.':
-               attron(COLOR_PAIR(COLOR_CYAN));
+               attr = COLOR_PAIR(COLOR_CYAN);
                break;
        case 'a':
        case 'f':
@@ -272,16 +323,17 @@ view_map_t *vp;
        case 's':
        case 'z':
        case 'X':
-               attron(COLOR_PAIR(COLOR_RED));
+               attr = COLOR_PAIR(COLOR_RED);
                break;
        default:
-               attron(COLOR_PAIR(COLOR_WHITE));
+               attr = COLOR_PAIR(COLOR_WHITE);
                break;
        }
+       attron(attr);
 #endif /* A_COLOR */
        (void) addch ((chtype)vp->contents);
 #ifdef A_COLOR
-       attrset(0);
+       attroff(attr);
        attron(COLOR_PAIR(COLOR_WHITE));
 #endif /* A_COLOR */
 }
@@ -291,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;
@@ -316,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 */
@@ -341,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;
        
@@ -361,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
@@ -378,10 +426,9 @@ 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();
+       void print_zoom_cell ();
 
        int row_inc, col_inc;
        int r, c;
@@ -405,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;
@@ -429,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();
 
@@ -464,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;
@@ -508,7 +547,7 @@ Display the score off in the corner of the screen.
 */
 
 void
-display_score ()
+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);
@@ -519,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();
@@ -531,7 +569,7 @@ Initialize the terminal.
 */
 
 void
-ttinit()
+ttinit(void)
 {
        (void) initscr();
        (void) noecho();
@@ -554,7 +592,8 @@ display.
 */
 
 void
-clear_screen () {
+clear_screen(void)
+{
        (void) clear ();
        (void) refresh ();
        kill_display ();
@@ -564,8 +603,15 @@ clear_screen () {
 Redraw the screen.
 */
 
+void 
+redisplay(void)
+{
+       (void) refresh ();
+}
+
 void
-redraw () {
+redraw(void)
+{
        (void) clearok (curscr, TRUE);
        (void) refresh ();
 }
@@ -576,7 +622,8 @@ the screen and pause for a few milliseconds.
 */
 
 void
-delay () {
+delay(void)
+{
         int t = delay_time;
         int i = 500;
        (void) refresh ();
@@ -597,7 +644,7 @@ Clean up the display.  This routine gets called as we leave the game.
 */
 
 void
-close_disp()
+close_disp(void)
 {
        (void) move (LINES - 1, 0);
        (void) clrtoeol ();
@@ -610,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);
@@ -630,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];
        
@@ -641,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];
        
@@ -671,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;