/****************************************************************************
- * Copyright (c) 1999-2010,2012 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 *
/*
* Author: Thomas E. Dickey
*
- * $Id: cardfile.c,v 1.40 2012/10/27 19:37:56 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.
*/
ExitProgram(EXIT_FAILURE);
}
-#if !HAVE_STRDUP
-#define strdup my_strdup
-static char *
-strdup(const char *s)
-{
- char *p = typeMalloc(char, strlen(s) + 1);
- if (p)
- strcpy(p, s);
- else
- failed("strdup");
- return (p);
-}
-#endif /* not HAVE_STRDUP */
-
static const char *
skip(const char *buffer)
{
break;
}
- card = typeCalloc(CARD, 1);
+ card = typeCalloc(CARD, (size_t) 1);
card->title = strdup(title);
card->content = strdup("");
static void
add_content(CARD * card, const char *content)
{
- size_t total, offset;
+ size_t total;
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)
- strcpy(card->content + offset++, " ");
+ if (card->content) {
+ _nc_STRCPY(card->content + offset, " ", total + 1 - offset);
+ offset++;
+ }
} else {
offset = 0;
if (card->content != 0)
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");
}
read_data(char *fname)
{
FILE *fp;
- CARD *card = 0;
- char buffer[BUFSIZ];
if ((fp = fopen(fname, "r")) != 0) {
+ CARD *card = 0;
+ char buffer[BUFSIZ];
+
while (fgets(buffer, sizeof(buffer), fp)) {
trim(buffer);
if (isspace(UChar(*buffer))) {
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) {
+ CARD *p = 0;
+
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
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);
#if (defined(KEY_RESIZE) && HAVE_WRESIZE) || NO_LEAKS
static void
-free_form_fields(FIELD ** f)
+free_form_fields(FIELD **f)
{
int n;
int form_high;
int y;
int x;
- int ch = ERR;
int finished = FALSE;
show_legend();
order_cards(top_card, visible_cards);
while (!finished) {
+ int ch = ERR;
+
update_panels();
doupdate();
}
#if NO_LEAKS
while (all_cards != 0) {
- FIELD **f;
-
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 */
{
static const char *msg[] =
{
- "Usage: view [options] file"
+ "Usage: cardfile [options] file"
,""
,"Options:"
," -c use color if terminal supports it"