diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvimerge |
Initial commit
Diffstat (limited to 'dviware/dvimerge')
-rw-r--r-- | dviware/dvimerge/dvimerge | 24 | ||||
-rw-r--r-- | dviware/dvimerge/range.c | 72 |
2 files changed, 96 insertions, 0 deletions
diff --git a/dviware/dvimerge/dvimerge b/dviware/dvimerge/dvimerge new file mode 100644 index 0000000000..f3ded6f364 --- /dev/null +++ b/dviware/dvimerge/dvimerge @@ -0,0 +1,24 @@ +#!/bin/sh +# S Rahtz July 1992. version 1, very crude, no error checking +# +# merge two dvi files together. at present, you have to say how many +# pages you want taken from each. +# Usage: dvimerge file1 file2 nstart nend +# eg +# dvimerge file1.dvi file2.dvi 1 10 +# will create a new file called `merged.dvi' which contains page 1 +# from file1 followed by page 1 from file2, then page 2 and so on up to +# page 10 +# +:>last.dvi +EACH=temp$$ +for i in `range $3 to $4` +do + dvidvi -f $i -l $i $1 $EACH-$i-a.dvi + dvidvi -f $i -l $i $2 $EACH-$i-b.dvi + dviconcat -o merged.dvi last.dvi $EACH-$i-a.dvi $EACH-$i-b.dvi + mv merged.dvi last.dvi + rm $EACH-$i-a.dvi $EACH-$i-b.dvi + echo done page $i +done +mv last.dvi merged.dvi diff --git a/dviware/dvimerge/range.c b/dviware/dvimerge/range.c new file mode 100644 index 0000000000..0dd784f55a --- /dev/null +++ b/dviware/dvimerge/range.c @@ -0,0 +1,72 @@ +/* + * range a to b [by c] + * generate for-loop values for Shell + */ + +#include <stdio.h> +#include <ctype.h> + +long atol(); +void usage(); +long number(); +int isnumeric(); + +int +main(argc, argv) +char **argv; +{ + register long a, b, c; + + if (argc < 4 || strcmp(argv[2], "to")) + usage(); + a = number(argv[1]); + b = number(argv[3]); + c = a <= b? 1: -1; + if (argc > 5) { + if (strcmp(argv[4], "by")) + usage(); + c = number(argv[5]); + } + if (c < 0) + for (; a >= b; a += c) + printf("%ld\n", a); + else if (c == 0) + printf("%ld\n", a); + else + for (; a <= b; a += c) + printf("%ld\n", a); + exit(0); +} + +void +usage() +{ + fprintf(stderr, "Usage: range n1 to n2 [by n3]\n"); + exit(1); +} + +long +number(s) +char *s; +{ + if (!isnumeric(s)) { + fprintf(stderr, "range: ill-formed number `%s'\n", s); + exit(1); + } + return(atol(s)); +} + +int +isnumeric(s) +register char *s; +{ + while (*s == ' ' || *s == '\t') + s++; + if (*s == '+' || *s == '-') + s++; + do { + if (!isascii(*s) || !isdigit(*s)) + return(0); + } while (*++s); + return(1); +} |