/* ShipWars Terminal Message Handling Functions: int printdw( dialog_win_struct *dw, char *mesg ) int MesgAdd(char *new_mesg, pixel_t mesg_color) --- */ #include "../include/string.h" #include "swterm.h" int printdw( dialog_win_struct *dw, char *mesg ) { char *buf, *strptr; if(mesg == NULL) return(-1); /* Copy message. */ buf = StringCopyAlloc(mesg); if(buf == NULL) return(-1); /* Remove any newline characters. */ strptr = strchr(buf, '\n'); if(strptr != NULL) *strptr = '\0'; MesgAdd(buf, 0); /* Free tempory message. */ free(buf); return(0); } int MesgAdd(char *new_mesg, pixel_t mesg_color) { int i, total_messages; bridge_win_mesg_struct **message; CDisplay *display = NULL; if(total_curses_displays > 0) display = curses_display[0]; if(display == NULL) return(-1); message = bridge_win.message; total_messages = bridge_win.total_messages; /* Free oldest message. */ if(total_messages > 0) { if(message[0] != NULL) { free(message[0]->message); message[0]->message = NULL; message[0]->color = 0; } } /* Shift messages. */ for(i = 0; i < (total_messages - 1); i++) { if((message[i] == NULL) || (message[i + 1] == NULL) ) continue; message[i]->message = message[i + 1]->message; message[i]->color = message[i + 1]->color; } /* Set last message. */ if(total_messages > 0) { i = total_messages - 1; if(message[i] != NULL) { message[i]->message = StringCopyAlloc(new_mesg); message[i]->color = mesg_color; } } /* Redraw messages. */ if(bridge_win.map_state) BridgeDrawMessages(display); return(0); }