|
|
1.1 root 1: %start input
2:
3: %{
4:
5: #define LTIME(t, hr, mi, se, fr) (t.h=hr, t.m=mi, t.s=se, t.f=fr)
6:
7: #define YYDEBUG 1
8:
9: #include "hdr.h"
10:
11: %}
12:
13: %token AUTO CUE EDIT HELP INSERT MODE PLAY REC SET SNAP STATUS STEP STOP
14: %token LOOP VIEW WAIT FRAME STANDBY REMOTE SHOOT SLEEP
15: %token FWD REV OFF ON PREROLL STILL GO
16: %token VIDSYNC AUDIO1 AUDIO2 AUDIO3 VIDEO
17: %token TIME LTC VITC T1 T2 TCR UB
18: %token NUMBER STRING
19:
20: %type <time> time
21: %type <ival> NUMBER timertype channel channels
22: %type <str> STRING
23:
24: %union{
25: int ival;
26: Time time;
27: char *str;
28: }
29:
30: %%
31:
32: input : /* nothing */
33: | input line '\n'
34: | input line ';'
35: | input line error '\n'
36: | input line error ';'
37: ;
38: /*
39: help can be done explicitly by :help info::
40: */
41:
42: line : /* nothing */
43: | AUTO ON { two("auto on", 0x40, 0x41); } /*:::*/
44: | AUTO OFF { two("auto off", 0x40, 0x40); } /*:AUTO [ON|OFF]::*/
45: | CUE time { cue($2); }
46: | EDIT OFF { two("edit off", 0x20, 0x64); }
47: | FRAME OFF { frame(0); } /*:::*/
48: | FRAME ON { frame(1); } /*:FRAME [ON|OFF]::*/
49: | HELP { help(); }
50: | EDIT SET time time channels { editset($3, $4, $5); }/*:EDIT SET in_time out_time channels::*/
51: | EDIT GO { editgo(); }
52: | INSERT time { insert($2, 1); }/*:INSERT time [nframes=1]::*/
53: | INSERT time NUMBER { insert($2, $3); } /*:::*/
54: | LOOP time time NUMBER { loop($2, $3, $4); } /*:LOOP tbegin tend frames/s:: */
55: | PLAY { two("play", 0x20, 0x01); }
56: | PREROLL TIME time { prerollt($3); }
57: | REC { two("rec", 0x20, 0x02); }
58: | REC STEP { three("rec step", 0x41, 0x3F, 2); }
59: | REMOTE NUMBER { remiframe($2); } /*:REMOTE [frame|str]::*/
60: | REMOTE STRING { remsframe($2); } /*:::*/
61: | REMOTE { remiframe(-1); } /*:::*/
62: | REMOTE STRING STRING { remsetup($2, $3, (char *)0); } /*:REMOTE system prog [relay]::*/
63: | REMOTE STRING STRING STRING { remsetup($2, $3, $4); } /*:REMOTE system prog [relay]::*/
64: | SET TIME T1 time { settimer($4, 0); } /*:SET TIME [T1|TCR] time::*/
65: | SET TIME TCR time { settimer($4, 4); } /*:::*/
66: | SHOOT NUMBER NUMBER { shoot($2, $3, 1); } /*:SHOOT start nframes::*/
67: | SLEEP NUMBER { sleep($2); }
68: | snap { snap(1); } /*:SNAP [nframes=1]::*/
69: | snap NUMBER { snap($2); } /*:::*/
70: | STANDBY OFF { two("stop", 0x20, 0x00); two("standby off", 0x20, 0x04); }
71: | STATUS { status(0); }
72: | STATUS STATUS { status(1); }
73: | STEP FWD { two("step fwd", 0x20, 0x14); } /*:STEP [FWD|REV]::*/
74: | STEP REV { two("step rev", 0x20, 0x24); } /*:::*/
75: | STILL time { still($2); }
76: | STILL MODE ON { three("", 0x41, 0x3F, 0x01); } /*:STILL MODE [ON|OFF]::*/
77: | STILL MODE OFF { three("", 0x41, 0x3F, 0x00); } /*:::*/
78: | STOP { two("stop", 0x20, 0x00); printclock(); }
79: | TIME timertype { timer($2); }
80: | TIME MODE TCR { three("time mode tcr", 0x41, 0x36, 0); } /*:TIME MODE [T1|T2|TCR]::*/
81: | TIME MODE T1 { three("time mode t1", 0x41, 0x36, 1); } /*:::*/
82: | TIME MODE T2 { three("time mode t2", 0x41, 0x36, 2); } /*:::*/
83: | VIEW time time { view($2,$3); } /*:VIEW tbegin tend:: */
84: | WAIT { swait(); }
85: ;
86:
87: /*DO NOT MOVE, used to generate helptab.c*/
88:
89: snap : SNAP
90: | EDIT ON
91: ;
92:
93: time : NUMBER { LTIME($$, 0, 0, $1, 0); }
94: | NUMBER '.' NUMBER { LTIME($$, 0, 0, $1, $3); }
95: | NUMBER '.' NUMBER '.' NUMBER { LTIME($$, 0, $1, $3, $5); }
96: | NUMBER '.' NUMBER '.' NUMBER '.' NUMBER { LTIME($$, $1, $3, $5, $7); }
97: ;
98:
99: timertype : LTC { $$ = 0x01; }
100: | { $$ = 0x01; }
101: | VITC { $$ = 0x02; }
102: | T1 { $$ = 0x04; }
103: | T2 { $$ = 0x08; }
104: ;
105:
106: channels : channel { $$ = $1; }
107: | channels channel { $$ = $1|$2; }
108: ;
109:
110: channel : AUDIO1 { $$ = 0x01; }
111: | AUDIO2 { $$ = 0x02; }
112: | AUDIO3 { $$ = 0x04; }
113: | VIDEO { $$ = 0x18; }
114: ;
115:
116: %%
117:
118: yywrap()
119: {
120: return(1);
121: }
122:
123: yyerror(s1, s2)
124: char *s1;
125: {
126: fprint(2, s1, s2);
127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.