summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2003-07-22 14:16:50 +0000
committerJim Meyering <jim@meyering.net>2003-07-22 14:16:50 +0000
commit0bdc16c6f5e4f822112da43534ea0fba82d4d10c (patch)
treee3b584072f6662f48dda8242f4e5e65736947804 /src
parent52393e15b7c6b5580f6395b2a49b4ea494b4104a (diff)
downloadcoreutils-0bdc16c6f5e4f822112da43534ea0fba82d4d10c.tar.xz
.
Diffstat (limited to 'src')
-rw-r--r--src/asa.c261
1 files changed, 0 insertions, 261 deletions
diff --git a/src/asa.c b/src/asa.c
deleted file mode 100644
index 10b7ee4b7..000000000
--- a/src/asa.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
-TODO
- mark translatable strings
- add usage function
- call parse_long_options
- dcl, set program_name
- do fclose/error checking
- */
-
-/* asa.c - interpret ASA carriage control characters
- Copyright (C) 94, 1996, 2003 Thomas Koenig
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* System Headers */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* Macros */
-
-#define LINESIZE 135
-#define NUMLINES 5
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
-/* Structures and unions */
-
-struct Str
- {
- char *chr;
- size_t len;
- };
-typedef struct Str str;
-
-/* File scope variables */
-
-static str *line_buffer = (str *) 0;
-static size_t line_num = 0;
-static size_t linebuf_size;
-
-/* Function declarations */
-
-static size_t readline (FILE *fp, char **a);
-static void add_line (str *);
-static void flush (void);
-static void copy_file (FILE *fp);
-
-/* Local functions */
-
-static void
-form_feed ()
-{
- putchar ('\f');
-}
-
-static void
-new_line ()
-{
- putchar ('\n');
-}
-
-static void
-add_line (str *line)
-{
- if (line_num >= linebuf_size)
- {
- linebuf_size += NUMLINES;
- line_buffer = xrealloc (line_buffer, linebuf_size * sizeof (str *));
- }
- line_buffer[line_num] = *line;
- line_num++;
-}
-
-static void
-flush ()
-{
- size_t i, j;
- size_t max_len;
-
- if (line_num == 0)
- return;
- if (line_num == 1)
- {
- printf ("%s\n", line_buffer[0].chr + 1);
- line_num = 0;
- return;
- }
- max_len = 0;
- for (j = 0; j < line_num; j++)
- max_len = MAX (max_len, line_buffer[j].len);
-
- for (i = 1; i <= max_len; i++)
- {
- int printed = 0;
-
- for (j = 0; j < line_num; j++)
- {
- if (line_buffer[j].len > i)
- {
- int ch = line_buffer[j].chr[i];
-
- if (ch != ' ')
- {
- if (printed)
- putchar ('\b');
- putchar (ch);
- printed = 1;
- }
- }
- }
- if (!printed)
- putchar (' ');
- }
- for (j = 0; j < line_num; j++)
- free (line_buffer[j].chr);
-
- line_num = 0;
- putchar ('\n');
-}
-
-static size_t
-readline (FILE *fp, char **ret)
-{
- static char *buffer = (char *) 0;
- char *ret_buff;
- static int bufsize = LINESIZE;
- int ch;
- size_t len = 0;
- int inc;
- int i;
-
- if (buffer == (char *) 0)
- buffer = xmalloc (LINESIZE);
-
- while (1)
- {
- ch = fgetc (fp);
- if (ch == EOF)
- break;
- if (ch == '\t')
- {
- ch = ' ';
- inc = 8 - (len % 8);
- }
- else
- inc = 1;
-
- if (len + inc > bufsize - 2)
- {
- bufsize += LINESIZE;
- buffer = xrealloc (buffer, bufsize);
- }
- for (i = 0; i < inc; i++)
- buffer[len + i] = ch;
- len += inc;
- if (ch == '\n')
- break;
- }
- buffer[len] = '\0';
- ret_buff = xmalloc (len + 1);
- strcpy (ret_buff, buffer);
- *ret = ret_buff;
- return len;
-}
-
-static void
-copy_file (FILE *fp)
-{
- str line;
- static first_line = 1;
-
- while ((line.len = readline (fp, &(line.chr))))
- {
- if (line.chr[line.len - 1] == '\n')
- {
- line.chr[line.len - 1] = '\0';
- line.len--;
- }
-
- switch (line.chr[0])
- {
- case '+':
- add_line (&line);
- break;
-
- case '0':
- flush ();
- new_line ();
- add_line (&line);
- break;
-
- case '1':
- flush ();
- if (!first_line)
- form_feed ();
- add_line (&line);
- break;
-
- case ' ':
- flush ();
- add_line (&line);
- break;
-
- default:
- flush ();
- add_line (&line);
- break;
- }
- first_line = 0;
- }
-}
-
-/* Global functions */
-
-int
-main (int argc, char **argv)
-{
- int err;
- line_buffer = xmalloc (NUMLINES * sizeof (str *));
- linebuf_size = NUMLINES;
-
- err = 0;
- if (argc == 1)
- copy_file (stdin);
- else
- {
- FILE *fp;
- char *fname;
-
- while (--argc > 0)
- {
- fname = *++argv;
- if ((fp = fopen (fname, "r")) == NULL)
- {
- err = 1;
- error (0, errno, "%s", fname);
- }
- else
- {
- copy_file (fp);
- fclose (fp);
- }
- }
- }
- flush ();
- exit (err ? EXIT_FAILURE : EXIT_SUCCESS);
-}