#!/bin/bash
cat -v | tr '[a-z]' '[A-Z]' > ocformat_$$.in

grep FUNCTION ocformat_$$.in | awk 'BEGIN {n=0;} {s=sprintf("s/%s/FUNC%04i/g",$2,n); print length(s)"::"s; n++}' | sort -n -r | sed 's/[0-9]*:://g' > func_$$.sed

cat ocformat_$$.in | sed -f func_$$.sed | sed 's/\^M//g' | sed 's/\$.*//g' | sed 's/ BM(/ BMAG(/g' |
awk '{
  maxlen=80;
  minlen=5;
  line=$0;
  while (length(line)>maxlen) {
    cut=maxlen;
    while (1) {
      while (cut>minlen && index(" -+",substr(line,cut,1)) == 0) {cut--;}
      if (cut<=minlen) {cut=maxlen; break;}
      if(substr(line,cut-1,1)!="E") break;
      cut--;
    }
    print substr(line,1,cut-1);
    line="    " substr(line,cut);
  }
  print line;
}' | awk '{
  if (match($0,"^ *ELEMENT")) {
    e=e "\n" $0;
  }
  else if (match($0,"^ *TYPE_DEF")) {
    t=t "\n" $0;
  }
  else {
    r=r "\n" $0;
  }
}
END {print e; print t; print r;}'

rm ocformat_$$.in func_$$.sed
