summaryrefslogtreecommitdiffstats
path: root/usr.bin/f2c/niceprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/f2c/niceprintf.c')
-rw-r--r--usr.bin/f2c/niceprintf.c388
1 files changed, 0 insertions, 388 deletions
diff --git a/usr.bin/f2c/niceprintf.c b/usr.bin/f2c/niceprintf.c
deleted file mode 100644
index 3c6cb3a..0000000
--- a/usr.bin/f2c/niceprintf.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/****************************************************************
-Copyright 1990, 1991, 1993 by AT&T Bell Laboratories and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T Bell Laboratories or
-Bellcore or any of their entities not be used in advertising or
-publicity pertaining to distribution of the software without
-specific, written prior permission.
-
-AT&T and Bellcore disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall AT&T or Bellcore be liable for
-any special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#include "defs.h"
-#include "names.h"
-#include "output.h"
-
-#define TOO_LONG_INDENT (2 * tab_size)
-#define MAX_INDENT 44
-#define MIN_INDENT 22
-static int last_was_newline = 0;
-int indent = 0;
-int in_comment = 0;
-int in_define = 0;
- extern int gflag1;
- extern char *file_name;
-
- static int
-write_indent(fp, use_indent, extra_indent, start, end)
- FILE *fp;
- int use_indent, extra_indent;
- char *start, *end;
-{
- int ind, tab;
-
- if (gflag1 && last_was_newline)
- fprintf(fp, "#line %ld \"%s\"\n", lineno, infname ? infname : file_name);
- if (in_define == 1) {
- in_define = 2;
- use_indent = 0;
- }
- if (last_was_newline && use_indent) {
- if (*start == '\n') do {
- putc('\n', fp);
- if (++start > end)
- return;
- }
- while(*start == '\n');
-
- ind = indent <= MAX_INDENT
- ? indent
- : MIN_INDENT + indent % (MAX_INDENT - MIN_INDENT);
-
- tab = ind + extra_indent;
-
- while (tab > 7) {
- putc ('\t', fp);
- tab -= 8;
- } /* while */
-
- while (tab-- > 0)
- putc (' ', fp);
- } /* if last_was_newline */
-
- while (start <= end)
- putc (*start++, fp);
-} /* write_indent */
-
-
-/*VARARGS2*/
-int margin_printf (fp, a, b, c, d, e, f, g)
-FILE *fp;
-char *a;
-long b, c, d, e, f, g;
-{
- ind_printf (0, fp, a, b, c, d, e, f, g);
-} /* margin_printf */
-
-/*VARARGS2*/
-int nice_printf (fp, a, b, c, d, e, f, g)
-FILE *fp;
-char *a;
-long b, c, d, e, f, g;
-{
- ind_printf (1, fp, a, b, c, d, e, f, g);
-} /* nice_printf */
-
-
-#define max_line_len c_output_line_length
- /* 74Number of characters allowed on an output
- line. This assumes newlines are handled
- nicely, i.e. a newline after a full text
- line on a terminal is ignored */
-
-/* output_buf holds the text of the next line to be printed. It gets
- flushed when a newline is printed. next_slot points to the next
- available location in the output buffer, i.e. where the next call to
- nice_printf will have its output stored */
-
-static char *output_buf;
-static char *next_slot;
-static char *string_start;
-
-static char *word_start = NULL;
-static int cursor_pos = 0;
-static int In_string = 0;
-
- void
-np_init()
-{
- next_slot = output_buf = Alloc(MAX_OUTPUT_SIZE);
- memset(output_buf, 0, MAX_OUTPUT_SIZE);
- }
-
- static char *
-adjust_pointer_in_string(pointer)
- register char *pointer;
-{
- register char *s, *s1, *se, *s0;
-
- /* arrange not to break \002 */
- s1 = string_start ? string_start : output_buf;
- for(s = s1; s < pointer; s++) {
- s0 = s1;
- s1 = s;
- if (*s == '\\') {
- se = s++ + 4;
- if (se > pointer)
- break;
- if (*s < '0' || *s > '7')
- continue;
- while(++s < se)
- if (*s < '0' || *s > '7')
- break;
- --s;
- }
- }
- return s0 - 1;
- }
-
-/* ANSI says strcpy's behavior is undefined for overlapping args,
- * so we roll our own fwd_strcpy: */
-
- static void
-fwd_strcpy(t, s)
- register char *t, *s;
-{ while(*t++ = *s++); }
-
-/* isident -- true iff character could belong to a unit. C allows
- letters, numbers and underscores in identifiers. This also doubles as
- a check for numeric constants, since we include the decimal point and
- minus sign. The minus has to be here, since the constant "10e-2"
- cannot be broken up. The '.' also prevents structure references from
- being broken, which is a quite acceptable side effect */
-
-#define isident(x) (Tr[x] & 1)
-#define isntident(x) (!Tr[x])
-
-int ind_printf (use_indent, fp, a, b, c, d, e, f, g)
-int use_indent;
-FILE *fp;
-char *a;
-long b, c, d, e, f, g;
-{
- extern int max_line_len;
- extern FILEP c_file;
- extern char tr_tab[]; /* in output.c */
- register char *Tr = tr_tab;
- int ch, inc, ind;
- static int extra_indent, last_indent, set_cursor = 1;
-
- cursor_pos += indent - last_indent;
- last_indent = indent;
- sprintf (next_slot, a, b, c, d, e, f, g);
-
- if (fp != c_file) {
- fprintf (fp,"%s", next_slot);
- return 1;
- } /* if fp != c_file */
-
- do {
- char *pointer;
-
-/* The for loop will parse one output line */
-
- if (set_cursor) {
- ind = indent <= MAX_INDENT
- ? indent
- : MIN_INDENT + indent % (MAX_INDENT - MIN_INDENT);
- cursor_pos = ind + extra_indent;
- set_cursor = 0;
- }
- if (in_comment)
- for (pointer = next_slot; *pointer && *pointer != '\n' &&
- cursor_pos <= max_line_len; pointer++)
- cursor_pos++;
- else
- for (pointer = next_slot; *pointer && *pointer != '\n' &&
- cursor_pos <= max_line_len; pointer++) {
-
- /* Update state variables here */
-
- if (In_string) {
- switch(*pointer) {
- case '\\':
- if (++cursor_pos > max_line_len) {
- cursor_pos -= 2;
- --pointer;
- goto overflow;
- }
- ++pointer;
- break;
- case '"':
- In_string = 0;
- word_start = 0;
- }
- }
- else switch (*pointer) {
- case '"':
- if (cursor_pos + 5 > max_line_len) {
- word_start = 0;
- --pointer;
- goto overflow;
- }
- In_string = 1;
- string_start = word_start = pointer;
- break;
- case '\'':
- if (pointer[1] == '\\')
- if ((ch = pointer[2]) >= '0' && ch <= '7')
- for(inc = 3; pointer[inc] != '\''
- && ++inc < 5;);
- else
- inc = 3;
- else
- inc = 2;
- /*debug*/ if (pointer[inc] != '\'')
- /*debug*/ fatalstr("Bad character constant %.10s",
- pointer);
- if ((cursor_pos += inc) > max_line_len) {
- cursor_pos -= inc;
- word_start = 0;
- --pointer;
- goto overflow;
- }
- word_start = pointer;
- pointer += inc;
- break;
- case '\t':
- cursor_pos = 8 * ((cursor_pos + 8) / 8) - 1;
- break;
- default: {
-
-/* HACK Assumes that all characters in an atomic C token will be written
- at the same time. Must check for tokens first, since '-' is considered
- part of an identifier; checking isident first would mean breaking up "->" */
-
- if (word_start) {
- if (isntident(*(unsigned char *)pointer))
- word_start = NULL;
- }
- else if (isident(*(unsigned char *)pointer))
- word_start = pointer;
- break;
- } /* default */
- } /* switch */
- cursor_pos++;
- } /* for pointer = next_slot */
- overflow:
- if (*pointer == '\0') {
-
-/* The output line is not complete, so break out and don't output
- anything. The current line fragment will be stored in the buffer */
-
- next_slot = pointer;
- break;
- } else {
- char last_char;
- int in_string0 = In_string;
-
-/* If the line was too long, move pointer back to the character before
- the current word. This allows line breaking on word boundaries. Make
- sure that 80 character comment lines get broken up somehow. We assume
- that any non-string 80 character identifier must be in a comment.
-*/
-
- if (*pointer == '\n')
- in_define = 0;
- else if (word_start && word_start > output_buf)
- if (In_string)
- if (string_start && pointer - string_start < 5)
- pointer = string_start - 1;
- else {
- pointer = adjust_pointer_in_string(pointer);
- string_start = 0;
- }
- else if (word_start == string_start
- && pointer - string_start >= 5) {
- pointer = adjust_pointer_in_string(next_slot);
- In_string = 1;
- string_start = 0;
- }
- else
- pointer = word_start - 1;
- else if (cursor_pos > max_line_len) {
-#ifndef ANSI_Libraries
- extern char *strchr();
-#endif
- if (In_string) {
- pointer = adjust_pointer_in_string(pointer);
- if (string_start && pointer > string_start)
- string_start = 0;
- }
- else if (strchr("&*+-/<=>|", *pointer)
- && strchr("!%&*+-/<=>^|", pointer[-1])) {
- pointer -= 2;
- if (strchr("<>", *pointer)) /* <<=, >>= */
- pointer--;
- }
- else {
- if (word_start)
- while(isident(*(unsigned char *)pointer))
- pointer++;
- pointer--;
- }
- }
- last_char = *pointer;
- write_indent(fp, use_indent, extra_indent, output_buf, pointer);
- next_slot = output_buf;
- if (In_string && !string_start && Ansi == 1 && last_char != '\n')
- *next_slot++ = '"';
- fwd_strcpy(next_slot, pointer + 1);
-
-/* insert a line break */
-
- if (last_char == '\n') {
- if (In_string)
- last_was_newline = 0;
- else {
- last_was_newline = 1;
- extra_indent = 0;
- }
- }
- else {
- extra_indent = TOO_LONG_INDENT;
- if (In_string && !string_start) {
- if (Ansi == 1) {
- fprintf(fp, "\"\n");
- use_indent = 1;
- last_was_newline = 1;
- }
- else {
- fprintf(fp, "\\\n");
- last_was_newline = 0;
- }
- In_string = in_string0;
- }
- else {
- if (in_define)
- putc('\\', fp);
- putc ('\n', fp);
- last_was_newline = 1;
- }
- } /* if *pointer != '\n' */
-
- if (In_string && Ansi != 1 && !string_start)
- cursor_pos = 0;
- else
- set_cursor = 1;
-
- string_start = word_start = NULL;
-
- } /* else */
-
- } while (*next_slot);
-
- return 0;
-} /* ind_printf */
OpenPOWER on IntegriCloud