I am trying to fumble through learning how to do some C programming. In the book I am using, Beginning Linux Programming they are now trying to use ncurses. I am getting the following errors when I try to compile my source. I am compiling with this command:
$ cc -o screenmenu screenmenu.c -lncurses this is the error: screenmenu.c: In function `getchoice': screenmenu.c:72: warning: passing arg 3 of `tputs' from incompatible pointer type I get the same error when I compile the source from the book also. I also get it when I try and compile it on another Linux machine. I was just wondering if someone could look at the code and help me figure out why it is not working. It would be nice if just one person could write a book that has examples that work. Here is the source below: #include <stdio.h> #include <unistd.h> #include <termios.h> #include <term.h> #include <curses.h> static FILE *output_stream = (FILE *)0; char *menu[] = { "a - add new record", "d - delete record", "q - quit", NULL, }; int getchoice(char *greet, char *choices[], FILE *in, FILE *out); int char_to_terminal(int char_to_write); int main() { int choice = 0; FILE *input; FILE *output; struct termios initial_settings, new_settings; if (!isatty(fileno(stdout))) { fprintf(stderr,"You are not a terminal, OK.\n"); } input = fopen("/dev/tty", "r"); output = fopen("/dev/tty", "w"); if(!input || !output) { fprintf(stderr, "Unable to open /dev/tty\n"); exit(1); } tcgetattr(fileno(input),&initial_settings); new_settings = initial_settings; new_settings.c_lflag &= ~ICANON; new_settings.c_lflag &= ~ECHO; new_settings.c_cc[VMIN] = 1; new_settings.c_cc[VTIME] = 0; new_settings.c_lflag &= ~ISIG; if(tcsetattr(fileno(input), TCSANOW, &new_settings) != 0) { fprintf(stderr,"could not set attributes\n"); } choice = getchoice("Please select an action", menu, input, output); printf("You have chosen: %c\n", choice); } while (choice != 'q'); tcsetattr(fileno(input),TCSANOW,&initial_settings); exit(0); } int getchoice(char *greet, char *choices[], FILE *in, FILE *out) { do { choice = getchoice("Please select an action", menu, input, output); printf("You have chosen: %c\n", choice); } while (choice != 'q'); tcsetattr(fileno(input),TCSANOW,&initial_settings); exit(0); } int getchoice(char *greet, char *choices[], FILE *in, FILE *out) { int chosen = 0; int selected; int screenrow, screencol = 10; char **option; char *cursor, *clear; output_stream = out; setupterm(NULL,fileno(out), (int *)0); cursor = tigetstr("cup"); clear - tigetstr("clear"); screenrow = 4; tputs(clear, 1, (int *) char_to_terminal); tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "Choice: %s", greet); screenrow += 2; option = choices; while(*option) { tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "%s\n",*option); screenrow++; option++; } do { selected = fgetc(in); option = choices; while(*option) { if(selected == *option[0]) { chosen = 1; break; } option++; } if(!chosen) { tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "Incorrect choice, select again\n"); } } while(!chosen); tputs(clear, 1, char_to_terminal); return selected; } int char_to_terminal(int char_to_write) { if (output_stream) putc(char_to_write, output_stream); return 0; } ------------------------------------------------------------------ end of code ------------------------------------------------------------------ -- Thanks, Keith MCNE ******************************************************************************** Debian GNU/Linux http://www.naples.net/~nfn11988/linux