Index: app/src/rs12/Makefile
===================================================================
--- app/src/rs12/Makefile	(revision 25ae32e4c2354e0ed6756bbe1de83f39cd814652)
+++ app/src/rs12/Makefile	(revision 25ae32e4c2354e0ed6756bbe1de83f39cd814652)
@@ -0,0 +1,12 @@
+main: rs12
+
+rs12: rs12.c
+	gcc -static -o rs12 rs12.c
+
+clean:
+	rm rs12
+
+copy:
+ifdef UTT_BIN_DIR
+	cp rs12 ${UTT_BIN_DIR}
+endif
Index: app/src/rs12/rs12.c
===================================================================
--- app/src/rs12/rs12.c	(revision 25ae32e4c2354e0ed6756bbe1de83f39cd814652)
+++ app/src/rs12/rs12.c	(revision 25ae32e4c2354e0ed6756bbe1de83f39cd814652)
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <string.h>
+
+#define MAXLINE 1000
+
+main()
+{
+  char buf[MAXLINE+1], outbuf[MAXLINE+1];
+  char form[MAXLINE+1];
+  int len;
+  int curpos,nextpos=0;
+  int a,b;
+  while(fgets(buf,MAXLINE,stdin))
+  {
+    int n=sscanf(buf,"%d %d",&a,&b);
+    if(n==2)
+    {
+      nextpos=a+b;
+      fputs(buf,stdout);
+    }
+    else
+    {
+      if(n==1)
+      {
+        curpos=a;
+        sscanf(buf,"%*d %*s %s",form);
+      }
+      else
+      {
+        curpos=nextpos;
+        sscanf(buf,"%*s %s",form);
+      }
+ 
+      if(*form == '*')
+        len=0;
+      else
+      {
+        char *f = form;
+        for(len=0; *f; ++f) if(*f != '\\') ++len;
+      }
+      
+      char *buf1=buf; while(!isalpha(*buf1)) ++buf1;
+      sprintf(outbuf,"%04i %02i %s", curpos, len, buf1);
+      fputs(outbuf,stdout);
+      nextpos = curpos+len;
+    }   
+  }
+}
