BSD 1 development
authorJeff Schriebman <jeff@ucbvax.Berkeley.EDU>
Sun, 27 Nov 1977 02:14:01 +0000 (18:14 -0800)
committerJeff Schriebman <jeff@ucbvax.Berkeley.EDU>
Sun, 27 Nov 1977 02:14:01 +0000 (18:14 -0800)
Work on file s6/linerm.c

Synthesized-from: 1bsd

s6/linerm.c [new file with mode: 0644]

diff --git a/s6/linerm.c b/s6/linerm.c
new file mode 100644 (file)
index 0000000..129d921
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+       linerm - remove lines from a file
+       linerm [+n -n +n ...] <std input >std output
+
+       Jeff Schriebman 8-75
+*/
+extern fout;
+struct numb {
+       int line;
+       int sign;
+} lineb[50];
+
+main(argc, argv)
+char **argv;
+{
+       register struct numb *nptr;
+       register char c;
+       register int sw;
+       int n, lineon, i;
+       char *aptr;
+       static pbuf[259];
+
+       fout = dup(1);
+       nptr = lineb;
+       n = 0;
+       while (--argc) {
+               n++;
+               aptr = *++argv;
+               if (*aptr == '-') {
+                       aptr++;
+                       nptr->sign = 0;
+               } else
+                       nptr->sign = 1;
+               if (*aptr == '+')
+                       aptr++;
+               nptr->line = numcv(aptr);
+               nptr++;
+       }
+       nptr->line = 0;
+       nptr->sign = -1;
+       nptr = lineb;
+       for (i=0; i<n-1; i++) {
+               lineon = nptr->line;
+               if (lineon >= (++nptr)->line) {
+                       printf("Illegal column sequence\n");
+                       exit();
+               }
+       }
+       lineon = 1;
+       sw = 1;
+       nptr = lineb;
+       for (;;nptr++) {
+               if (nptr->sign == -1 && sw == 0)
+                       flush(), exit();
+               while (nptr->line != lineon) {
+                       while ((c=getc(pbuf)) != '\n') {
+                               if (c <= 0)
+                                       flush(), exit();
+                               if (sw)
+                                       putchar(c);
+                       }
+                       if (sw)
+                               putchar(c);
+                       lineon++;
+               }
+               sw = nptr->sign;
+       }
+       flush();
+}
+
+numcv(ptr)
+char *ptr;
+{
+       register char *aptr, c;
+       register int num;
+
+       aptr = ptr;
+       num = 0;
+       while ((c = *aptr++) != '\0') {
+               if (c<'0' || c>'9') {
+                       printf("Illegal number %s\n", ptr);
+                       exit();
+               }
+               num = num*10 + c - '0';
+       }
+       return(num);
+}