X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftitle.c;h=e0191acc8bdf3880421e76c34304c0ee2f93856f;hb=1143173e5e7e57d9020a0b3303c980e8166b3642;hp=2642b9c4af90ee9f38a1f344037ed0f89072784e;hpb=fcb9e49b2a2d57af7c001ae5d2eda9ac443ba36b;p=pspp-builds.git diff --git a/src/title.c b/src/title.c index 2642b9c4..e0191acc 100644 --- a/src/title.c +++ b/src/title.c @@ -60,7 +60,7 @@ get_title (const char *cmd, char **title) return CMD_FAILURE; if (*title) free (*title); - *title = xstrdup (ds_value (&tokstr)); + *title = xstrdup (ds_c_str (&tokstr)); lex_get (); if (token != '.') { @@ -75,6 +75,7 @@ get_title (const char *cmd, char **title) if (*title) free (*title); *title = xstrdup (lex_rest_of_line (NULL)); + lex_discard_line (); for (cp = *title; *cp; cp++) *cp = toupper ((unsigned char) (*cp)); token = '.'; @@ -87,16 +88,14 @@ get_title (const char *cmd, char **title) int cmd_file_label (void) { - char *label; + const char *label; label = lex_rest_of_line (NULL); + lex_discard_line (); while (isspace ((unsigned char) *label)) label++; - free (default_dict.label); - default_dict.label = xstrdup (label); - if (strlen (default_dict.label) > 60) - default_dict.label[60] = 0; + dict_set_label (default_dict, label); token = '.'; return CMD_SUCCESS; @@ -107,14 +106,22 @@ cmd_file_label (void) static void add_document_line (const char *line, int indent) { - char *doc; - - default_dict.n_documents++; - default_dict.documents = xrealloc (default_dict.documents, - 80 * default_dict.n_documents); - doc = &default_dict.documents[80 * (default_dict.n_documents - 1)]; - memset (doc, ' ', indent); - st_bare_pad_copy (&doc[indent], line, 80 - indent); + const char *old_documents; + size_t old_len; + char *new_documents; + + old_documents = dict_get_documents (default_dict); + old_len = old_documents != NULL ? strlen (old_documents) : 0; + new_documents = xmalloc (old_len + 81); + + memcpy (new_documents, old_documents, old_len); + memset (new_documents + old_len, ' ', indent); + st_bare_pad_copy (new_documents + old_len + indent, line, 80 - indent); + new_documents[old_len + 80] = '\0'; + + dict_set_documents (default_dict, new_documents); + + free (new_documents); } /* Performs the DOCUMENT command. */ @@ -126,7 +133,7 @@ cmd_document (void) char buf[256]; struct tm *tmp = localtime (&last_vfm_invocation); - if (default_dict.n_documents) + if (dict_get_documents (default_dict) != NULL) add_document_line ("", 0); sprintf (buf, _("Document entered %s %02d:%02d:%02d by %s (%s):"), @@ -138,20 +145,21 @@ cmd_document (void) for (;;) { int had_dot; - char *line; + const char *orig_line; + char *copy_line; - line = lex_rest_of_line (&had_dot); - while (isspace ((unsigned char) *line)) - line++; + orig_line = lex_rest_of_line (&had_dot); + lex_discard_line (); + while (isspace ((unsigned char) *orig_line)) + orig_line++; + copy_line = xmalloc (strlen (orig_line) + 2); + strcpy (copy_line, orig_line); if (had_dot) - { - char *cp = strchr (line, 0); - *cp++ = '.'; - *cp = 0; - } + strcat (copy_line, "."); - add_document_line (line, 3); + add_document_line (copy_line, 3); + free (copy_line); lex_get_line (); if (had_dot) @@ -166,12 +174,7 @@ cmd_document (void) int cmd_drop_documents (void) { - lex_match_id ("DROP"); - lex_match_id ("DOCUMENTS"); - - free (default_dict.documents); - default_dict.documents = NULL; - default_dict.n_documents = 0; + dict_set_documents (default_dict, NULL); return lex_end_of_command (); }