robview_interpreter

Robotino View2/3 のLinux 版は,RobView と言う名前になっています.
RobView はGUI プログラミング環境ですが,コマンドライン上から起動できるrobview_interpreter というプログラムもあります.
これは名前の通り,一つずつ解釈しながら進めるタイプです.
昔のBASIC ですね.
英語などの自然言語で言うところの「同時通訳」であり,C言語などは「翻訳」タイプです.

ちなみに,robview_interpreter は,引数としてrvw2のファイルを読み込むことができます.
View3 だと,標準ではrvwx ですが,これは圧縮しているため,interpreterで読み込めないようです.

また,引数のファイル名は絶対パスでないと動きません(robviewも同様).
相対パスでもNGです.
最初,起動方法がわからず,お手上げ状態になってしまいました(泣).

簡単に絶対パスで実行する方法として,pwd の併用をお勧めします.

robview `pwd`/hogehoge.rvw2

という感じで使えば,現在のディレクトリのファイルを呼び出せます.
ただし,この書き方ではtabキーのファイル名補完が効きませんので,ちょっと不便です.

次に,rvw2のプログラムに関してですが,main program のフローの部分の最後に「Terminate」を置いても,
プログラムの実行はコマンドラインに返ってきてくれません(泣).
内部的に終了するだけであって,interpreterは終わってくれません.
ただ,debugレベルで動かすと,Terminate への状態遷移をテキストで示してくれますので,それを見つけたらkill することで,適切に(?)終了できます.

というわけで,そのためのスクリプトが次です.
`pwd`を書かなくても,勝手に追加してくれますので,第1引数にrvw2ファイルを与えて下さい.tab補完が使えます.
あと,ノートパソコンなどからプログラムしていると,Robotino のIPアドレスがlocalhost ではなくなるので,それを修正する部分も用意しています.
ノートパソコンのIPアドレスを,sed の所に追加すれば,置換してくれます.
ついでに,ファイル等の読み込み・書き込み先のディレクトリ名の置換もあります.
/home/wataruと/home/robotino を/home/<ユーザ名> に置き換えてくれます.
自分のユーザ名に置き換えて使って下さい.

#!/bin/bash

TARGETFILE=`pwd`/$1
DIRNAME=`dirname $TARGETFILE`
echo "debug : DIRNAME = $DIRNAME"
NEXTFILE=$DIRNAME/next.txt
LOG=view3.log
if [ "$2" == "" ]; then IP="\"127.0.1.1\""; else IP=\"$2\"; fi

if [ -f $NEXTFILE ]; then rm -f $NEXTFILE; fi
if [ -f $LOG ]; then grep -v 'Note: Execution state changed to "terminated"' $LOG > tmp.txt; cp tmp.txt $LOG; fi
for EXT in rvw2 rvwx; do
  if [ ! "`echo $1|grep \".\"$EXT`" == "" ]; then EXTENTION="$EXT"; fi
done

case $EXTENTION in
  rvw2)
    VIEW3FILE=$DIRNAME/temp.$EXTENTION
    if [ -f $VIEW3FILE ]; then rm -f $VIEW3FILE; fi
    USERNAME=`users|awk '{ print $1 }'`
    cat $TARGETFILE | \
      sed "s/home\/wataru/home\/$USERNAME/" | \
      sed "s/home\/robotino/home\/$USERNAME/" | \
      sed "s/\"127.0.1.1\"/$IP/" | \
      sed "s/\"172.26.1.1\"/$IP/" | \
      sed "s/\"172.26.111.10\"/$IP/" > \
        $VIEW3FILE
    ;;
  rvwx)
    VIEW3FILE=$TARGETFILE
    ;;
  *)
    echo "unkown extention"
esac

# robview_interpreter -f $VIEW3FILE

if [ "$3" == "" ]; then OPTION=""; else OPTION="--set $3 $4 $5 $6 $7 $8 $9"; fi
echo "Robotino IP address = $IP "
echo "robview_interpreter -f $VIEW3FILE $OPTION" | tee -a $LOG

robview_interpreter -f $VIEW3FILE --global-variable-output-interval 1000 -l VERBOSE $OPTION | tee -a $LOG | grep -v Load &
PID=`pidof robview_interpreter`
while [ "`grep 'Note: Execution state changed to \"terminated\"' view3.log`" == "" ]; do sleep 1; done
kill $PID

if [ -f $NEXTFILE ]; then
  $0 `cat $NEXTFILE`*.rvw?
fi

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*