ncurses 6.2 - patch 20200627
[ncurses.git] / test / cardfile.c
index f9557bd64c7bf53bc0e78bc747093ab5336be36e..bf03755f658acc879e4da5aa82ba057f54298486 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 1999-2008,2010 Free Software Foundation, Inc.              *
+ * Copyright 2019,2020 Thomas E. Dickey                                     *
+ * Copyright 1999-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -29,7 +30,7 @@
 /*
  * Author: Thomas E. Dickey
  *
 /*
  * Author: Thomas E. Dickey
  *
- * $Id: cardfile.c,v 1.38 2010/11/14 00:58:45 tom Exp $
+ * $Id: cardfile.c,v 1.47 2020/02/02 23:34:34 tom Exp $
  *
  * File format: text beginning in column 1 is a title; other text is content.
  */
  *
  * File format: text beginning in column 1 is a title; other text is content.
  */
@@ -68,17 +69,13 @@ static CARD *all_cards;
 static bool try_color = FALSE;
 static char default_name[] = "cardfile.dat";
 
 static bool try_color = FALSE;
 static char default_name[] = "cardfile.dat";
 
-#if !HAVE_STRDUP
-#define strdup my_strdup
-static char *
-strdup(const char *s)
+static void
+failed(const char *s)
 {
 {
-    char *p = typeMalloc(char, strlen(s) + 1);
-    if (p)
-       strcpy(p, s);
-    return (p);
+    perror(s);
+    endwin();
+    ExitProgram(EXIT_FAILURE);
 }
 }
-#endif /* not HAVE_STRDUP */
 
 static const char *
 skip(const char *buffer)
 
 static const char *
 skip(const char *buffer)
@@ -111,7 +108,7 @@ add_title(const char *title)
            break;
     }
 
            break;
     }
 
-    card = typeCalloc(CARD, 1);
+    card = typeCalloc(CARD, (size_t) 1);
     card->title = strdup(title);
     card->content = strdup("");
 
     card->title = strdup(title);
     card->content = strdup("");
 
@@ -129,15 +126,19 @@ add_title(const char *title)
 static void
 add_content(CARD * card, const char *content)
 {
 static void
 add_content(CARD * card, const char *content)
 {
-    size_t total, offset;
+    size_t total;
 
     content = skip(content);
     if ((total = strlen(content)) != 0) {
 
     content = skip(content);
     if ((total = strlen(content)) != 0) {
+       size_t offset;
+
        if (card->content != 0 && (offset = strlen(card->content)) != 0) {
            total += 1 + offset;
            card->content = typeRealloc(char, total + 1, card->content);
        if (card->content != 0 && (offset = strlen(card->content)) != 0) {
            total += 1 + offset;
            card->content = typeRealloc(char, total + 1, card->content);
-           if (card->content)
-               strcpy(card->content + offset++, " ");
+           if (card->content) {
+               _nc_STRCPY(card->content + offset, " ", total + 1 - offset);
+               offset++;
+           }
        } else {
            offset = 0;
            if (card->content != 0)
        } else {
            offset = 0;
            if (card->content != 0)
@@ -145,7 +146,9 @@ add_content(CARD * card, const char *content)
            card->content = typeMalloc(char, total + 1);
        }
        if (card->content)
            card->content = typeMalloc(char, total + 1);
        }
        if (card->content)
-           strcpy(card->content + offset, content);
+           _nc_STRCPY(card->content + offset, content, total + 1 - offset);
+       else
+           failed("add_content");
     }
 }
 
     }
 }
 
@@ -173,10 +176,11 @@ static void
 read_data(char *fname)
 {
     FILE *fp;
 read_data(char *fname)
 {
     FILE *fp;
-    CARD *card = 0;
-    char buffer[BUFSIZ];
 
     if ((fp = fopen(fname, "r")) != 0) {
 
     if ((fp = fopen(fname, "r")) != 0) {
+       CARD *card = 0;
+       char buffer[BUFSIZ];
+
        while (fgets(buffer, sizeof(buffer), fp)) {
            trim(buffer);
            if (isspace(UChar(*buffer))) {
        while (fgets(buffer, sizeof(buffer), fp)) {
            trim(buffer);
            if (isspace(UChar(*buffer))) {
@@ -197,15 +201,17 @@ static void
 write_data(const char *fname)
 {
     FILE *fp;
 write_data(const char *fname)
 {
     FILE *fp;
-    CARD *p = 0;
-    int n;
 
     if (!strcmp(fname, default_name))
        fname = "cardfile.out";
 
     if ((fp = fopen(fname, "w")) != 0) {
 
     if (!strcmp(fname, default_name))
        fname = "cardfile.out";
 
     if ((fp = fopen(fname, "w")) != 0) {
+       CARD *p = 0;
+
        for (p = all_cards; p != 0; p = p->link) {
            FIELD **f = form_fields(p->form);
        for (p = all_cards; p != 0; p = p->link) {
            FIELD **f = form_fields(p->form);
+           int n;
+
            for (n = 0; f[n] != 0; n++) {
                char *s = field_buffer(f[n], 0);
                if (s != 0
            for (n = 0; f[n] != 0; n++) {
                char *s = field_buffer(f[n], 0);
                if (s != 0
@@ -337,7 +343,7 @@ form_virtualize(WINDOW *w)
 static FIELD **
 make_fields(CARD * p, int form_high, int form_wide)
 {
 static FIELD **
 make_fields(CARD * p, int form_high, int form_wide)
 {
-    FIELD **f = typeCalloc(FIELD *, 3);
+    FIELD **f = typeCalloc(FIELD *, (size_t) 3);
 
     f[0] = new_field(1, form_wide, 0, 0, 0, 0);
     set_field_back(f[0], A_REVERSE);
 
     f[0] = new_field(1, form_wide, 0, 0, 0, 0);
     set_field_back(f[0], A_REVERSE);
@@ -365,7 +371,7 @@ show_legend(void)
 
 #if (defined(KEY_RESIZE) && HAVE_WRESIZE) || NO_LEAKS
 static void
 
 #if (defined(KEY_RESIZE) && HAVE_WRESIZE) || NO_LEAKS
 static void
-free_form_fields(FIELD ** f)
+free_form_fields(FIELD **f)
 {
     int n;
 
 {
     int n;
 
@@ -391,7 +397,6 @@ cardfile(char *fname)
     int form_high;
     int y;
     int x;
     int form_high;
     int y;
     int x;
-    int ch = ERR;
     int finished = FALSE;
 
     show_legend();
     int finished = FALSE;
 
     show_legend();
@@ -414,7 +419,7 @@ cardfile(char *fname)
        if ((win = newwin(panel_high, panel_wide, y, x)) == 0)
            break;
 
        if ((win = newwin(panel_high, panel_wide, y, x)) == 0)
            break;
 
-       wbkgd(win, COLOR_PAIR(pair_2));
+       wbkgd(win, (chtype) COLOR_PAIR(pair_2));
        keypad(win, TRUE);
        p->panel = new_panel(win);
        box(win, 0, 0);
        keypad(win, TRUE);
        p->panel = new_panel(win);
        box(win, 0, 0);
@@ -432,6 +437,8 @@ cardfile(char *fname)
     order_cards(top_card, visible_cards);
 
     while (!finished) {
     order_cards(top_card, visible_cards);
 
     while (!finished) {
+       int ch = ERR;
+
        update_panels();
        doupdate();
 
        update_panels();
        doupdate();
 
@@ -522,13 +529,11 @@ cardfile(char *fname)
     }
 #if NO_LEAKS
     while (all_cards != 0) {
     }
 #if NO_LEAKS
     while (all_cards != 0) {
-       FIELD **f;
-
        p = all_cards;
        all_cards = all_cards->link;
 
        if (isVisible(p)) {
        p = all_cards;
        all_cards = all_cards->link;
 
        if (isVisible(p)) {
-           f = form_fields(p->form);
+           FIELD **f = form_fields(p->form);
 
            unpost_form(p->form);       /* ...so we can free it */
            free_form(p->form); /* this also disconnects the fields */
 
            unpost_form(p->form);       /* ...so we can free it */
            free_form(p->form); /* this also disconnects the fields */
@@ -549,7 +554,7 @@ usage(void)
 {
     static const char *msg[] =
     {
 {
     static const char *msg[] =
     {
-       "Usage: view [options] file"
+       "Usage: cardfile [options] file"
        ,""
        ,"Options:"
        ," -c       use color if terminal supports it"
        ,""
        ,"Options:"
        ," -c       use color if terminal supports it"
@@ -588,7 +593,7 @@ main(int argc, char *argv[])
            start_color();
            init_pair(pair_1, COLOR_WHITE, COLOR_BLUE);
            init_pair(pair_2, COLOR_WHITE, COLOR_CYAN);
            start_color();
            init_pair(pair_1, COLOR_WHITE, COLOR_BLUE);
            init_pair(pair_2, COLOR_WHITE, COLOR_CYAN);
-           bkgd(COLOR_PAIR(pair_1));
+           bkgd((chtype) COLOR_PAIR(pair_1));
        } else {
            try_color = FALSE;
        }
        } else {
            try_color = FALSE;
        }