|
|
researchv10 Norman
%start input
%{
#define LTIME(t, hr, mi, se, fr) (t.h=hr, t.m=mi, t.s=se, t.f=fr)
#define YYDEBUG 1
#include "hdr.h"
%}
%token AUTO CUE EDIT HELP INSERT MODE PLAY REC SET SNAP STATUS STEP STOP
%token LOOP VIEW WAIT FRAME STANDBY REMOTE SHOOT SLEEP
%token FWD REV OFF ON PREROLL STILL GO
%token VIDSYNC AUDIO1 AUDIO2 AUDIO3 VIDEO
%token TIME LTC VITC T1 T2 TCR UB
%token NUMBER STRING
%type <time> time
%type <ival> NUMBER timertype channel channels
%type <str> STRING
%union{
int ival;
Time time;
char *str;
}
%%
input : /* nothing */
| input line '\n'
| input line ';'
| input line error '\n'
| input line error ';'
;
/*
help can be done explicitly by :help info::
*/
line : /* nothing */
| AUTO ON { two("auto on", 0x40, 0x41); } /*:::*/
| AUTO OFF { two("auto off", 0x40, 0x40); } /*:AUTO [ON|OFF]::*/
| CUE time { cue($2); }
| EDIT OFF { two("edit off", 0x20, 0x64); }
| FRAME OFF { frame(0); } /*:::*/
| FRAME ON { frame(1); } /*:FRAME [ON|OFF]::*/
| HELP { help(); }
| EDIT SET time time channels { editset($3, $4, $5); }/*:EDIT SET in_time out_time channels::*/
| EDIT GO { editgo(); }
| INSERT time { insert($2, 1); }/*:INSERT time [nframes=1]::*/
| INSERT time NUMBER { insert($2, $3); } /*:::*/
| LOOP time time NUMBER { loop($2, $3, $4); } /*:LOOP tbegin tend frames/s:: */
| PLAY { two("play", 0x20, 0x01); }
| PREROLL TIME time { prerollt($3); }
| REC { two("rec", 0x20, 0x02); }
| REC STEP { three("rec step", 0x41, 0x3F, 2); }
| REMOTE NUMBER { remiframe($2); } /*:REMOTE [frame|str]::*/
| REMOTE STRING { remsframe($2); } /*:::*/
| REMOTE { remiframe(-1); } /*:::*/
| REMOTE STRING STRING { remsetup($2, $3, (char *)0); } /*:REMOTE system prog [relay]::*/
| REMOTE STRING STRING STRING { remsetup($2, $3, $4); } /*:REMOTE system prog [relay]::*/
| SET TIME T1 time { settimer($4, 0); } /*:SET TIME [T1|TCR] time::*/
| SET TIME TCR time { settimer($4, 4); } /*:::*/
| SHOOT NUMBER NUMBER { shoot($2, $3, 1); } /*:SHOOT start nframes::*/
| SLEEP NUMBER { sleep($2); }
| snap { snap(1); } /*:SNAP [nframes=1]::*/
| snap NUMBER { snap($2); } /*:::*/
| STANDBY OFF { two("stop", 0x20, 0x00); two("standby off", 0x20, 0x04); }
| STATUS { status(0); }
| STATUS STATUS { status(1); }
| STEP FWD { two("step fwd", 0x20, 0x14); } /*:STEP [FWD|REV]::*/
| STEP REV { two("step rev", 0x20, 0x24); } /*:::*/
| STILL time { still($2); }
| STILL MODE ON { three("", 0x41, 0x3F, 0x01); } /*:STILL MODE [ON|OFF]::*/
| STILL MODE OFF { three("", 0x41, 0x3F, 0x00); } /*:::*/
| STOP { two("stop", 0x20, 0x00); printclock(); }
| TIME timertype { timer($2); }
| TIME MODE TCR { three("time mode tcr", 0x41, 0x36, 0); } /*:TIME MODE [T1|T2|TCR]::*/
| TIME MODE T1 { three("time mode t1", 0x41, 0x36, 1); } /*:::*/
| TIME MODE T2 { three("time mode t2", 0x41, 0x36, 2); } /*:::*/
| VIEW time time { view($2,$3); } /*:VIEW tbegin tend:: */
| WAIT { swait(); }
;
/*DO NOT MOVE, used to generate helptab.c*/
snap : SNAP
| EDIT ON
;
time : NUMBER { LTIME($$, 0, 0, $1, 0); }
| NUMBER '.' NUMBER { LTIME($$, 0, 0, $1, $3); }
| NUMBER '.' NUMBER '.' NUMBER { LTIME($$, 0, $1, $3, $5); }
| NUMBER '.' NUMBER '.' NUMBER '.' NUMBER { LTIME($$, $1, $3, $5, $7); }
;
timertype : LTC { $$ = 0x01; }
| { $$ = 0x01; }
| VITC { $$ = 0x02; }
| T1 { $$ = 0x04; }
| T2 { $$ = 0x08; }
;
channels : channel { $$ = $1; }
| channels channel { $$ = $1|$2; }
;
channel : AUDIO1 { $$ = 0x01; }
| AUDIO2 { $$ = 0x02; }
| AUDIO3 { $$ = 0x04; }
| VIDEO { $$ = 0x18; }
;
%%
yywrap()
{
return(1);
}
yyerror(s1, s2)
char *s1;
{
fprint(2, s1, s2);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.