#define -> static const int. Also got rid of some big static buffers.
diff --git a/tr.c b/tr.c
index fd547b8..d21e672 100644
--- a/tr.c
+++ b/tr.c
@@ -34,14 +34,15 @@
 #define bb_need_write_error
 #include "messages.c"
 
-#define ASCII		0377
+static const int ASCII = 0377;
 
 /* some glabals shared across this file */
 static char com_fl, del_fl, sq_fl;
-static unsigned char output[BUFSIZ], input[BUFSIZ];
-static unsigned char vector[ASCII + 1];
-static char invec[ASCII + 1], outvec[ASCII + 1];
 static short in_index, out_index;
+/* these last are pointers to static buffers declared in tr_main */
+static unsigned char *poutput, *pinput;
+static unsigned char *pvector;
+static char *pinvec, *poutvec;
 
 
 static void convert()
@@ -52,22 +53,22 @@
 
 	for (;;) {
 		if (in_index == read_chars) {
-			if ((read_chars = read(0, (char *) input, BUFSIZ)) <= 0) {
-				if (write(1, (char *) output, out_index) != out_index)
+			if ((read_chars = read(0, (char *) pinput, BUFSIZ)) <= 0) {
+				if (write(1, (char *) poutput, out_index) != out_index)
 					write(2, write_error, strlen(write_error));
 				exit(0);
 			}
 			in_index = 0;
 		}
-		c = input[in_index++];
-		coded = vector[c];
-		if (del_fl && invec[c])
+		c = pinput[in_index++];
+		coded = pvector[c];
+		if (del_fl && pinvec[c])
 			continue;
-		if (sq_fl && last == coded && (invec[c] || outvec[coded]))
+		if (sq_fl && last == coded && (pinvec[c] || poutvec[coded]))
 			continue;
-		output[out_index++] = last = coded;
+		poutput[out_index++] = last = coded;
 		if (out_index == BUFSIZ) {
-			if (write(1, (char *) output, out_index) != out_index) {
+			if (write(1, (char *) poutput, out_index) != out_index) {
 				write(2, write_error, strlen(write_error));
 				exit(1);
 			}
@@ -86,9 +87,9 @@
 
 	for (j = 0, i = 0; i < string1_len; i++) {
 		if (string2_len <= j)
-			vector[string1[i]] = last;
+			pvector[string1[i]] = last;
 		else
-			vector[string1[i]] = last = string2[j++];
+			pvector[string1[i]] = last = string2[j++];
 	}
 }
 
@@ -143,6 +144,17 @@
 	int output_length=0, input_length;
 	int index = 1;
 	int i;
+	/* set up big arrays here (better than making a bunch of static arrays up top) */
+	unsigned char output[BUFSIZ], input[BUFSIZ];
+	unsigned char vector[ASCII + 1];
+	char invec[ASCII + 1], outvec[ASCII + 1];
+
+	/* ... but make them available globally */
+	poutput = output;
+	pinput  = input;
+	pvector = vector;
+	pinvec  = invec;
+	poutvec = outvec;
 
 	if (argc > 1 && argv[index][0] == '-') {
 		for (ptr = (unsigned char *) &argv[index][1]; *ptr; ptr++) {