diff --git a/jni/pjproject-android/.svn/pristine/3e/3e95aa6dec032d28f78c5e7ce79fd4d85f697c07.svn-base b/jni/pjproject-android/.svn/pristine/3e/3e95aa6dec032d28f78c5e7ce79fd4d85f697c07.svn-base
new file mode 100644
index 0000000..fb39504
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/3e/3e95aa6dec032d28f78c5e7ce79fd4d85f697c07.svn-base
@@ -0,0 +1,94 @@
+/*
+ * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
+ * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
+ * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+ */
+
+/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/lin2txt.c,v 1.1 1994/10/21 20:52:11 jutta Exp $*/
+
+#include <stdio.h>
+
+#include "gsm.h"
+#include "proto.h"
+
+char  * pname;
+
+int	debug      = 0;
+int	verbosity  = 0;
+int	error      = 0;
+
+usage P0()
+{
+	fprintf(stderr, "Usage: %s [-v] [files...]\n", pname);
+	exit(1);
+}
+
+void process P2((f, filename), FILE * f, char * filename)
+{
+	short		source[160];
+	int		cc, j, k;
+	gsm		r;
+
+	if (!(r = gsm_create())) {
+		perror("gsm_create");
+		error = 1;
+		return ;
+	}
+	gsm_option(r, GSM_OPT_VERBOSE, &verbosity);
+	for (;;) {
+
+		if ((cc = fread((char *)source, 1, sizeof(source), f)) == 0) {
+			gsm_destroy(r);
+#ifdef	COUNT_OVERFLOW
+			dump_overflow(stderr);
+#endif
+			return;
+		}
+		
+		printf("{\t");
+		for (j = 0; j < 4; j++) {
+			printf("{\t");
+			for (k = 0; k < 40; k++) {
+				printf("%d", (int)source[ j * 40 + k ]);
+				if (k < 39) {
+					printf(", ");
+					if (k % 4 == 3) printf("\n\t\t");
+				} else {
+					printf("\t}");
+					if (j == 3) printf("\t},\n");
+					else printf(",\n\t");
+				}
+			}
+		}
+	}
+}
+
+main P2((ac, av), int ac, char ** av)
+{
+	int 		opt;
+	extern char   * optarg;
+	extern int	optind;
+
+	FILE		* f;
+
+	if (!(pname = av[0])) pname = "inp2txt";
+
+	while ((opt = getopt(ac, av, "v")) != EOF) switch (opt) {
+	case 'v': verbosity++;    break;
+	default:  usage();
+	}
+
+	ac -= optind;
+	av += optind;
+
+	if (!ac) process(stdin, "*stdin*");
+	else for (; *av; av++) {
+		if (!(f = fopen(*av, "r"))) perror(*av);
+		else {
+			process(f, *av);
+			fclose(f);
+		}
+	}
+
+	exit(error);
+}
