]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/tcsh/MAKESHAR
amd64: use register macros for gdb_cpu_getreg()
[FreeBSD/FreeBSD.git] / contrib / tcsh / MAKESHAR
1 #!/bin/sh
2 #
3 # MAKESHAR.sh: Make a shar file for the sources
4 #
5
6 AWK=/usr/bin/nawk       # Must be nawk or gawk cause of 2D arrays
7 WC=/usr/ucb/wc          
8 GREP=/usr/bin/egrep
9 SORT=/usr/bin/sort
10 SH=/bin/sh
11
12 dirs=
13 name=kit
14 files=
15 verbose=0
16 size=45000
17
18 for i 
19 do
20     case $i in
21     -n) 
22         name=;;
23     -v)
24         verbose=1;;
25     -d)
26         SH=/bin/cat;;
27     -s)
28         size=$1;;
29     *)
30         if [ -z "$name" ]
31         then
32             name=$i
33         elif [ -d $i ]
34         then
35             dirs="$dirs $i"
36         elif [ -f $i ]
37         then
38             files="$files $i"
39         else
40             echo "$0: File `$i' not found." 1>&2
41             exit 1
42         fi;;
43     esac
44 done
45         
46 if [ \( -z "$files" \) -a \( -z "$dirs" \) ]
47 then
48     echo "Usage: $0 [-n name] [-s size] [-vd] <files>." 1>&2
49     exit 1
50 fi
51
52 $WC $files | $GREP -v total | $SORT +2 | $AWK '
53     BEGIN {
54         i = 0;
55         seq = 1;
56         size = 0;
57         name = 1;
58         used = 2;
59         verbose='"$verbose"';
60         tty = "/dev/tty";
61         maxsize = '"$size"';
62         dirs = "'"$dirs"'";
63     };
64     {
65         a[i, size] = $3;
66         a[i, name] = $4;
67         a[i, used] = 0;
68         i++;
69     };
70     END {
71         for (maxi = i--; i >= 0; i--) {
72             idx = 0;
73             if (a[i, used] == 0) {
74                 if (verbose && a[i, size] > maxsize) 
75                     printf("Warning: File %s is %d > %d\n",
76                            a[i, name], a[i, size], maxsize) > tty;
77                 s = a[i, size];
78                 a[i, used] = 1;
79                 kit[seq, idx++] = i; 
80                 j = 0;
81                 while (j < maxi) {
82                     # Find the greatest file we can add
83                     j = maxi;
84                     for (k = 0; k < maxi; k++)
85                         if (a[k, used] == 0 && a[k, size] + s < maxsize)
86                             j = k;
87                     if (j < maxi) {
88                         s += a[j, size];
89                         a[j, used] = 1;
90                         kit[seq, idx++] = j; 
91                     }
92                 }
93                 sizes[seq] = s;
94                 kit[seq++, idx] = -1; 
95             }
96         }
97         for (i = 1; i < seq; i++) {
98             printf("shar -n%d -e%d %s ", i, seq - 1, dirs);
99             if (verbose) {
100                 printf("%3d of %3d: ", i, seq - 1) > tty;
101                 len = 12;
102             }
103             for (j = 0; kit[i, j] != -1; j++) {
104                 s = a[kit[i, j], name];
105                 if (verbose) {
106                     clen = length(s) + 1;
107                     len += clen;
108                     if (len > 70) {
109                         printf("\n            ") > tty;
110                         len = 12 + clen;
111                     }
112                     printf("%s ", s) > tty;
113                 }
114                 printf("%s ", s);
115             }
116             printf("> '"$name"'-%d.shar;", i);
117             if (verbose)
118                 printf("= %5d\n", sizes[i]) > tty;
119         }
120     }' | $SH