summaryrefslogtreecommitdiff
path: root/usr/src/cmd/asa
diff options
context:
space:
mode:
authorstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
committerstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
commit7c478bd95313f5f23a4c958a745db2134aa03244 (patch)
treec871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/cmd/asa
downloadillumos-joyent-7c478bd95313f5f23a4c958a745db2134aa03244.tar.gz
OpenSolaris Launch
Diffstat (limited to 'usr/src/cmd/asa')
-rw-r--r--usr/src/cmd/asa/Makefile45
-rw-r--r--usr/src/cmd/asa/asa.c245
2 files changed, 290 insertions, 0 deletions
diff --git a/usr/src/cmd/asa/Makefile b/usr/src/cmd/asa/Makefile
new file mode 100644
index 0000000000..f27fdafc8f
--- /dev/null
+++ b/usr/src/cmd/asa/Makefile
@@ -0,0 +1,45 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+#ident "%Z%%M% %I% %E% SMI"
+#
+# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+PROG= asa
+
+include ../Makefile.cmd
+
+CFLAGS += $(CCVERBOSE)
+
+.KEEP_STATE:
+
+all: $(PROG)
+
+install: all $(ROOTPROG)
+
+clean:
+
+lint: lint_PROG
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/asa/asa.c b/usr/src/cmd/asa/asa.c
new file mode 100644
index 0000000000..79aeec4cae
--- /dev/null
+++ b/usr/src/cmd/asa/asa.c
@@ -0,0 +1,245 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+
+#include <ctype.h>
+#include <limits.h>
+#include <locale.h>
+#include <nl_types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define FF '\f'
+#define NL '\n'
+#define NUL '\0'
+
+static void usage(void);
+static void disp_file(FILE *f, char *filename);
+static FILE *get_next_file(int, char *, char *[], int);
+static void finish(int need_a_newline);
+
+int estatus = 0; /* exit status */
+int i; /* argv index */
+
+int
+main(int argc, char *argv[])
+{
+ int c;
+ int form_feeds = 0;
+ int need_a_newline = 0;
+ char *filename = NULL;
+ FILE *f;
+
+ (void) setlocale(LC_ALL, "");
+#if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
+#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it were not */
+#endif
+
+ (void) textdomain(TEXT_DOMAIN);
+
+ while ((c = getopt(argc, argv, "f")) != EOF) {
+ switch (c) {
+ case 'f':
+ form_feeds = 1;
+ break;
+
+ case '?':
+ usage();
+ }
+ }
+
+ i = optind;
+ if (argc <= i) {
+ filename = NULL;
+ f = stdin;
+ } else {
+ f = get_next_file(need_a_newline, filename, argv, argc);
+ }
+
+ need_a_newline = 0;
+ for (;;) {
+ /* interpret the first character in the line */
+
+ c = getc(f);
+ switch (c) {
+ case EOF:
+ disp_file(f, filename);
+
+ if (i >= argc)
+ finish(need_a_newline);
+
+ f = get_next_file(need_a_newline, filename, argv, argc);
+
+ if (need_a_newline) {
+ (void) putchar(NL);
+ need_a_newline = 0;
+ }
+
+ if (form_feeds)
+ (void) putchar(FF);
+
+ continue;
+
+ case NL:
+ if (need_a_newline)
+ (void) putchar(NL);
+ need_a_newline = 1;
+ continue;
+
+ case '+':
+ if (need_a_newline)
+ (void) putchar('\r');
+ break;
+
+ case '0':
+ if (need_a_newline)
+ (void) putchar(NL);
+ (void) putchar(NL);
+ break;
+
+ case '1':
+ if (need_a_newline)
+ (void) putchar(NL);
+ (void) putchar(FF);
+ break;
+
+ case ' ':
+ default:
+ if (need_a_newline)
+ (void) putchar(NL);
+ break;
+ }
+
+ need_a_newline = 0;
+
+ for (;;) {
+ c = getc(f);
+ if (c == NL) {
+ need_a_newline = 1;
+ break;
+ } else if (c == EOF) {
+ disp_file(f, filename);
+
+ if (i >= argc)
+ finish(need_a_newline);
+
+ f = get_next_file(need_a_newline, filename,
+ argv, argc);
+
+ if (form_feeds) {
+ (void) putchar(NL);
+ (void) putchar(FF);
+ need_a_newline = 0;
+ break;
+ }
+ } else {
+ (void) putchar(c);
+ }
+ }
+ }
+ /* NOTREACHED */
+ return (0);
+}
+
+static void
+usage(void)
+{
+ (void) fprintf(stderr, gettext("usage: asa [-f] [-|file...]\n"));
+ exit(1);
+}
+
+
+static void
+disp_file(FILE *f, char *filename)
+{
+
+ if (ferror(f)) {
+ int serror = errno;
+ if (filename) {
+ (void) fprintf(stderr, gettext(
+ "asa: read error on file %s\n"), filename);
+ } else {
+ (void) fprintf(stderr, gettext(
+ "asa: read error on standard input\n"));
+ }
+ errno = serror;
+ perror("");
+ estatus = 1;
+ }
+
+ (void) fclose(f);
+
+}
+
+static FILE *
+get_next_file(int need_a_newline, char *filename, char *argv[], int argc)
+{
+ FILE *f;
+ if (strcmp(argv[i], "-") == 0) {
+ filename = NULL;
+ f = stdin;
+ } else {
+ /*
+ * Process each file operand. If unsuccessful, affect the
+ * exit status and continue processing the next operand.
+ */
+ filename = argv[i];
+ while ((f = fopen(filename, "r")) == NULL) {
+ int serror = errno;
+ (void) fprintf(stderr,
+ gettext("asa: cannot open %s:"), filename);
+ errno = serror;
+ perror("");
+ estatus = 1;
+ if (++i < argc) {
+ if (strcmp(argv[i], "-") == 0) {
+ filename = NULL;
+ f = stdin;
+ break;
+ } else {
+ filename = argv[i];
+ }
+ } else {
+ finish(need_a_newline);
+ }
+ }
+ }
+ ++i;
+ return (f);
+}
+
+static void
+finish(int need_a_newline)
+{
+ if (need_a_newline)
+ (void) putchar(NL);
+ exit(estatus);
+}