summaryrefslogtreecommitdiff
path: root/src/mdevd/PARSING.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/mdevd/PARSING.txt')
-rw-r--r--src/mdevd/PARSING.txt105
1 files changed, 53 insertions, 52 deletions
diff --git a/src/mdevd/PARSING.txt b/src/mdevd/PARSING.txt
index 2d7fc61..8702d6a 100644
--- a/src/mdevd/PARSING.txt
+++ b/src/mdevd/PARSING.txt
@@ -30,106 +30,106 @@ ENDLINE | +
Second pass: we need to fill the envmatches and scriptelems with values.
The whole mdev.conf semantics must be encoded in here.
-class | ` a b c d e f g h i j k l m n o p
-st\ev | \0 space ; $ # - @ \n , = > : * ! 0-7 8-9 other
+class | ` a b c d e f g h i j k l m n o p q r
+st\ev | \0 space ; $ # - @ \n , = > : * ! 0-7 8-9 + & other
-START | $ cont @ + m|d m|d m|d m|d m|d m|d m|d
-00 | END START X ENV1 COMMENT MINUS TOMAJ START DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
+START | $ cont @ + m|d m|d m|d m|d m|d m|d m|d m|d m|d
+00 | END START X ENV1 COMMENT MINUS TOMAJ START DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
COMMENT | +
-01 | END COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT START COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT
+01 | END COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT START COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT COMMENT
-MINUS | $ @ m|d m|d m|d m|d m|d m|d m|d
-02 | X X X ENV1 X X TOMAJ X DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
+MINUS | $ @ m|d m|d m|d m|d m|d m|d m|d m|d m|d
+02 | X X X ENV1 X X TOMAJ X DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
-ENV1 | m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v
-03 | X X X INVAR1 X INVAR1 INVAR1 X INVAR1 X INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1
+ENV1 | m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v m|v
+03 | X X X INVAR1 X INVAR1 INVAR1 X INVAR1 X INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1
INVAR1 | z
-04 | X X X INVAR1 X INVAR1 INVAR1 X INVAR1 TOVAL1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1
+04 | X X X INVAR1 X INVAR1 INVAR1 X INVAR1 TOVAL1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1 INVAR1
-TOVAL1 | m m m m m m m m m m
-05 | X X X X X INVAL1 INVAL1 X INVAL1 X INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1
+TOVAL1 | m m m m m m m m m m m m
+05 | X X X X X INVAL1 INVAL1 X INVAL1 X INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1
INVAL1 | z|re$
-06 | X TOUSER X INVAL1 X INVAL1 INVAL1 X INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1
+06 | X TOUSER X INVAL1 X INVAL1 INVAL1 X INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1 INVAL1
TOMAJ | m m
-07 | X X X X X X X X X X X X X X INMAJ INMAJ X
+07 | X X X X X X X X X X X X X X INMAJ INMAJ X X X
INMAJ | z|mj
-08 | X X X X X X X X TOMIN X X X X X INMAJ INMAJ X
+08 | X X X X X X X X TOMIN X X X X X INMAJ INMAJ X X X
TOMIN | m m
-09 | X X X X X X X X X X X X X X INMIL INMIL X
+09 | X X X X X X X X X X X X X X INMIL INMIL X X X
INMIL | z|ml|h z|ml
-0a | X TOUSER X X X TOMIH X X X X X X X X INMIL INMIL X
+0a | X TOUSER X X X TOMIH X X X X X X X X INMIL INMIL X X X
TOMIH | m m
-0b | X X X X X X X X X X X X X X INMIH INMIH X
+0b | X X X X X X X X X X X X X X INMIH INMIH X X X
INMIH | z|mh
-0c | X TOUSER X X X X X X X X X X X X INMIH INMIH X
+0c | X TOUSER X X X X X X X X X X X X INMIH INMIH X X X
DEVNAME | z|re z|v
-0d | X TOUSER X DEVNAME X DEVNAME DEVNAME X DEVNAME TORE X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
+0d | X TOUSER X DEVNAME X DEVNAME DEVNAME X DEVNAME TORE X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
-TORE | m m m m m m m m m m m m
-0e | X X X INRE X INRE INRE X INRE INRE INRE INRE INRE INRE INRE INRE INRE
+TORE | m m m m m m m m m m m m m m
+0e | X X X INRE X INRE INRE X INRE INRE INRE INRE INRE INRE INRE INRE INRE INRE INRE
INRE | z|re$
-0f | X X TODEV INRE X INRE INRE X INRE INRE INRE INRE INRE INRE INRE INRE INRE
+0f | X X TODEV INRE X INRE INRE X INRE INRE INRE INRE INRE INRE INRE INRE INRE INRE INRE
-TODEV | m m m m m m m m m m
-10 | X X X LASTRE X DEVNAME DEVNAME X DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
+TODEV | m m m m m m m m m m m m
+10 | X X X LASTRE X DEVNAME DEVNAME X DEVNAME X X DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME DEVNAME
LASTRE | z|re
-11 | X TOUSER X LASTRE X LASTRE LASTRE X LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE
+11 | X TOUSER X LASTRE X LASTRE LASTRE X LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE LASTRE
-TOUSER | m m m m
-12 | X TOUSER X X X INUSER X X X X X X X X INUSER INUSER INUSER
+TOUSER | m m m m m m
+12 | X TOUSER X X X INUSER X X X X X X X X INUSER INUSER INUSER INUSER INUSER
INUSER | z|u
-13 | X X X X X INUSER X X X X X TOGRP X X INUSER INUSER INUSER
+13 | X X X X X INUSER X X X X X TOGRP X X INUSER INUSER INUSER INUSER INUSER
-TOGRP | m m m m
-14 | X X X X X INGRP X X X X X X X X INGRP INGRP INGRP
+TOGRP | m m m m m m
+14 | X X X X X INGRP X X X X X X X X INGRP INGRP INGRP INGRP INGRP
INGRP | z|g
-15 | X TOMODE X X X INGRP X X X X X X X X INGRP INGRP INGRP
+15 | X TOMODE X X X INGRP X X X X X X X X INGRP INGRP INGRP INGRP INGRP
TOMODE | m
-16 | X TOMODE X X X X X X X X X X X X INMODE X X
+16 | X TOMODE X X X X X X X X X X X X INMODE X X X X
INMODE | z|M z|M|L|+
-17 | X TOPATH X X X X X START X X X X X X INMODE X X
+17 | X TOPATH X X X X X START X X X X X X INMODE X X X X
-TOPATH | L r L a L|+ = > r|a !
-18 | END TOPATH X CMD COMMENT X CMD START X PATH PATH X CMD TOCMD X X X
+TOPATH | L r L r|E a L|+ = > r|a ! a|E r|a|E
+18 | END TOPATH X CMD COMMENT CMD CMD START X PATH PATH X CMD TOCMD X X CMD CMD X
-PATH | p p p p p p p p p
-19 | X X X X X INPATH INPATH X INPATH INPATH X INPATH X INPATH INPATH INPATH INPATH
+PATH | p p p p p p p p p p p
+19 | X X X X X INPATH INPATH X INPATH INPATH X INPATH X INPATH INPATH INPATH INPATH INPATH INPATH
INPATH | L z z|L z|L|+
-1a | END TOCMD X X COMMENT INPATH INPATH START INPATH INPATH X INPATH X INPATH INPATH INPATH INPATH
+1a | END TOCMD X X COMMENT INPATH INPATH START INPATH INPATH X INPATH X INPATH INPATH INPATH INPATH INPATH INPATH
-TOCMD | L r L a L|+ r|a
-1b | END TOCMD X CMD COMMENT X CMD START X X X X CMD X X X X
+TOCMD | L r L r|E a L|+ r|a a|E r|a|E
+1b | END TOCMD X CMD COMMENT CMD CMD START X X X X CMD X X X CMD CMD X
-CMD | c c c c c c c c c c c c c
-1c | X INCMD X INCMD X INCMD INCMD X INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD
+CMD | c c c c c c c c c c c c c c c
+1c | X INCMD X INCMD X INCMD INCMD X INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD
INCMD | L z|L|+
-1d | END INCMD INCMD INCMD INCMD INCMD INCMD START INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD
+1d | END INCMD INCMD INCMD INCMD INCMD INCMD START INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD INCMD
-st/ev | \0 space ; $ # - @ \n , = > : * ! 0-7 8-9 other
-class | ` a b c d e f g h i j k l m n o p
+st/ev | \0 space ; $ # - @ \n , = > : * ! 0-7 8-9 + & other
+class | ` a b c d e f g h i j k l m n o p q r
END = 1e, X = 1f
States : 30+2. They fit exactly into 5 bits.
- Actions: 25.
+ Actions: 26.
0x80000000 unused, to avoid having to explicitly write U everywhere
0x40000000 $: prepare an envmatch, the scriptelem is DEVMATCH_NOTHING
@@ -149,21 +149,21 @@ END = 1e, X = 1f
0x00010000 g: compute gid
0x00008000 M: compute mode
0x00004000 L: finalize/accept scriptelem, move to next one
- 0x00002000 r: elem->cmdtype |= ACTION_REMOVE
- 0x00001000 a: elem->cmdtype |= ACTION_ADD
+ 0x00002000 r: elem->cmdtype |= ACTION_REMOVE, interpreter=sh
+ 0x00001000 a: elem->cmdtype |= ACTION_ADD, interpreter=sh
0x00000800 =: elem->movetype = MOVEINFO_MOVE
0x00000400 >: elem->movetype = MOVEINFO_MOVEANDLINK
0x00000200 !: elem->movetype = MOVEINFO_NOCREATE
0x00000100 p: set movepath
0x00000080 c: set command
0x00000040 +: line++
- 0x00000020 unused.
+ 0x00000020 E: interpreter=execlineb
Actions + states fit in a uint32_t.
To debug script_secondpass: at the start of the loop, add
- LOLDEBUG("state: %02x char: %c newstate: %02x actions: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", state, s[pos] == '\n' ? '\\' : s[pos], what & 0x1f,
+ LOLDEBUG("state: %02x char: %c newstate: %02x actions: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", state, s[pos] == '\n' ? '\\' : s[pos], what & 0x1f,
what & 0x40000000 ? "$ " : "",
what & 0x20000000 ? "@ " : "",
what & 0x10000000 ? "d " : "",
@@ -188,5 +188,6 @@ END = 1e, X = 1f
what & 0x00000200 ? "! " : "",
what & 0x00000100 ? "p " : "",
what & 0x00000080 ? "c " : "",
- what & 0x00000040 ? "+ " : "") ;
+ what & 0x00000040 ? "+ " : "",
+ what & 0x00000020 ? "E " : "") ;