|
|
1.1 root 1: /* dp.c - parse dates 822-style */
2:
3: #include "../h/mh.h"
4: #include "../h/formatsbr.h"
5: #include "../zotnet/tws.h"
6: #include <stdio.h>
7:
8:
9: #define NDATES 100
10:
11: #define WIDTH 78
12: #define WBUFSIZ BUFSIZ
13:
14: #define FORMAT "%<(nodate{text})error: %{text}%|%(putstr(pretty{text}))%>"
15:
16: /* */
17:
18: static struct swit switches[] = {
19: #define FORMSW 0
20: "form formatfile", 0,
21: #define FMTSW 1
22: "format string", 5,
23:
24: #define WIDSW 2
25: "width columns", 0,
26:
27: #define HELPSW 3
28: "help", 4,
29:
30: NULL, NULL
31: };
32:
33: /* */
34:
35: static struct format *fmt;
36:
37: static int dat[4];
38:
39: /* */
40:
41: /* ARGSUSED */
42:
43: main (argc, argv)
44: int argc;
45: char **argv;
46: {
47: int datep = 0,
48: width = 0,
49: status = 0;
50: char *cp,
51: *form = NULL,
52: *format = NULL,
53: *nfs,
54: buf[80],
55: **ap,
56: **argp,
57: *arguments[MAXARGS],
58: *dates[NDATES];
59:
60: invo_name = r1bindex (argv[0], '/');
61: if ((cp = m_find (invo_name)) != NULL) {
62: ap = brkstring (cp = getcpy (cp), " ", "\n");
63: ap = copyip (ap, arguments);
64: }
65: else
66: ap = arguments;
67: (void) copyip (argv + 1, ap);
68: argp = arguments;
69:
70: /* */
71:
72: while (cp = *argp++) {
73: if (*cp == '-')
74: switch (smatch (++cp, switches)) {
75: case AMBIGSW:
76: ambigsw (cp, switches);
77: done (1);
78: case UNKWNSW:
79: adios (NULLCP, "-%s unknown", cp);
80: case HELPSW:
81: (void) sprintf (buf, "%s [switches] dates ...", invo_name);
82: help (buf, switches);
83: done (1);
84:
85: case FORMSW:
86: if (!(form = *argp++) || *form == '-')
87: adios (NULLCP, "missing argument to %s", argp[-2]);
88: format = NULL;
89: continue;
90: case FMTSW:
91: if (!(format = *argp++) || *format == '-')
92: adios (NULLCP, "missing argument to %s", argp[-2]);
93: form = NULL;
94: continue;
95:
96: case WIDSW:
97: if (!(cp = *argp++) || *cp == '-')
98: adios (NULLCP, "missing argument to %s", argp[-2]);
99: width = atoi (cp);
100: continue;
101: }
102: if (datep > NDATES)
103: adios (NULLCP, "more than %d dates", NDATES);
104: else
105: dates[datep++] = cp;
106: }
107: dates[datep] = NULL;
108:
109: /* */
110:
111: if (datep == 0)
112: adios (NULLCP, "usage: %s [switches] dates ...", invo_name);
113:
114: nfs = new_fs (form, format, FORMAT);
115: if (width == 0) {
116: if ((width = sc_width ()) < WIDTH / 2)
117: width = WIDTH / 2;
118: width -= 2;
119: }
120: if (width > WBUFSIZ)
121: width = WBUFSIZ;
122: (void) fmt_compile (nfs, &fmt);
123: dat[0] = dat[1] = dat[2] = 0;
124: dat[3] = width;
125:
126: for (datep = 0; dates[datep]; datep++)
127: status += process (dates[datep], width);
128:
129: m_update ();
130:
131: done (status);
132: }
133:
134: /* */
135:
136: static int process (date, length)
137: register char *date;
138: int length;
139: {
140: int status = 0;
141: char buffer[WBUFSIZ + 1];
142: register struct comp *cptr;
143:
144: FINDCOMP (cptr, "text");
145: if (cptr)
146: cptr -> c_text = date;
147: (void) fmtscan (fmt, buffer, length, dat);
148: (void) fputs (buffer, stdout);
149:
150: return status;
151: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.