#!/bin/sh
# textaddr.sh - multi-language support low level script
#  for compiling progmem1.var and lang_en.txt files
#  to textaddr.txt file (mapping of progmem addreses to text idenifiers)
#
# Input files:
#  progmem1.var
#  lang_en.txt
#
# Output files:
#  textaddr.txt
#
#
# Dscription of process:
#  check if input files exists
#  create sorted list of strings from progmem1.var and lang_en.txt
#  lines from progmem1.var will contain addres (8 chars) and english text
#  lines from lang_en.txt will contain linenumber and english text
#  after sort this will generate pairs of lines (line from progmem1 first)
#  result of sort is compiled with simple script and stored into file textaddr.txt
#

echo "textaddr.sh started" >&2

if [ ! -e progmem1.var ]; then echo 'textaddr.sh - file progmem1.var not found!' >&2; exit 1; fi 
if [ ! -e lang_en.txt ]; then echo 'textaddr.sh - file lang_en.txt not found!' >&2; exit 1; fi 
addr=''
text=''
(cat progmem1.var | sed -E "s/^([^ ]*) ([^ ]*) (.*)/\1 \"\3\"/";\
 cat lang_en.txt | sed "/^$/d;/^#/d" | sed = | sed '{N;s/\n/ /}') |\
 sort -k2 |\
 sed "s/\\\/\\\\\\\/g" | while read num txt; do
 if [ ${#num} -eq 8 ]; then
  if [ -z "$addr" ]; then
   addr=$num
  else
   if [ "$text" == "$txt" ]; then
    addr="$addr $num"
   else
    echo "ADDR NF $addr $text"
    addr=$num
   fi
  fi
  text=$txt   
 else
  if [ -z "$addr" ]; then
   echo "TEXT NF $num $txt"
  else
   if [ "$text" == "$txt" ]; then
    if [ ${#addr} -eq 8 ]; then
     echo "ADDR OK $addr $num"
    else
     echo "$addr" | sed "s/ /\n/g" | while read ad; do
      echo "ADDR OK $ad $num"
     done
    fi
    addr=''
    text=''
   else
    echo "TEXT NF $num $txt"
   fi
  fi
 fi
done > textaddr.txt

echo "textaddr.sh finished" >&2

exit 0