All pastes #1746984 Raw Edit

Mine

public shellscript v1 · immutable
#1746984 ·published 2010-01-11 15:17 UTC
rendered paste body
dnl FSM C/m4 template for; not finisheddnl Copyright (C) 2009 Andrew O. Shadouradivert(`-1')dnl parenthesized list, simple versiondefine(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')')define(`_arg1', `$1')define(`_foreach', `ifelse(`$2', `()', `',  `define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')')define(`justincr',`define(`$1',incr(defn(`$1')))')define(`preincr',`defn(`$1')define(`$1',incr(defn(`$1')))')define(`postincr',`define(`$1',incr(defn($1)))defn(`$1')')define(`@string@trim',`translit(`$1',` ')')define(`@list@append@empty',`define(`$1',ifelse(defn(`$1'),`',`$2',`defn(`$1')`,$2''))')define(`@list@append',`ifelse(translit(`$2',` '),`',`',`define(`$1',ifelse(defn(`$1'),`',`$2',`defn(`$1')`,$2''))')')define(`@utomaton@cleanup', `foreach(`y',(defn(`@utomaton$cleanup')),`undefine(y)')')define(`_gonull',`')define(`when',`dnldefine(`@utomaton$if',`')dnldefine(`@utomaton$do',`')dnldefine(`@utomaton$go',`')dnldefine(`do',`define(`@utomaton@do',defn(`do'))dnlundefine(`do')dnlindir(`@list@append',`@utomaton$do',$'`@)dnldefine(`do',defn(`@utomaton@do'))dnlundefine(`@utomaton@do')dnl')dnldefine(`go',`dnlindir(`@list@append',`@utomaton$go',$'`@)dnl')dnlforeach(`z',($*),`indir(`@list@append',z)')dnlundefine(`go')dnlundefine(`do')dnl')define(`behaviour', `dnldefine(`state',`dnlshift($'`*)')dnl`static void `dispatch_'defn(`@utomaton$n')(void){  switch (defn(`@utomaton$n')_state)  {    '$*`  }}'dnlundefine(`state')dnl')dnl define(`automaton', `define(`@utomaton$i',`0')justincr(`@utomaton$n')$1')define(`automaton', `define(`@utomaton$i',`0')dnldefine(`@utomaton$n',$1)dnldefine(`@utomaton$cleanup',`')dnldefine(`states',`foreach(`x',($'`@),dnl`_def(dnl`A'defn(`@utomaton$n')_`'x,dnlpreincr(`@utomaton$i'))dnlindir(`@list@append',`@utomaton$cleanup',x)dnldefine(indir(`@string@trim',x),indir(`@string@trim',`A'defn(`@utomaton$n')_`'x))dnl')')dnluint8_t defn(`@utomaton$n')_state = 0;$2$3`'dnlindir(`@utomaton@cleanup')dnlundefine(`states')dnlundefine(`behaviour')dnl')dnldnl define(`states',`foreach(`x',($@),`_def(`A'defn(`@utomaton$n')_`'x,preincr(`@utomaton$i'))')')define(`_def',``#'define translit(`$1',` ') $2')define(`@utomaton$i', 0)define(`@utomaton$n', 0)divert`'dnldnl traceon(`_arg1',`automaton',`states',`foreach',`_def')dnlautomaton(  display,  states(    INIT,    POWEROFF,    DETECT,    BLANK,    SLEEP,    ACTIVE  ),  behaviour(    state(      INIT,      when(        A == B,        do(          puts("Hello");        ),        go(          INIT        )      )    )  ))indir(`@list@append',`list',`hello')dnlindir(`@list@append',`list',`    ')dnlindir(`@list@append',`list',`world')dnldefn(`list')do=defn(`@utomaton$do')go=defn(`@utomaton$go')if=defn(`@utomaton$if')EOF