Re: c programming question w/ ncurses
Fix below:
Keith wrote:
> 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(clear, 1, 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
>
> --
> Unsubscribe? mail -s unsubscribe debian-user-request@lists.debian.org < /dev/null
--
Jens B. Jorgensen
jjorgens@bdsinc.com
Reply to: