summaryrefslogtreecommitdiff
path: root/dviware/quicspool/libqmsquery/qmspag.y
diff options
context:
space:
mode:
Diffstat (limited to 'dviware/quicspool/libqmsquery/qmspag.y')
-rw-r--r--dviware/quicspool/libqmsquery/qmspag.y162
1 files changed, 162 insertions, 0 deletions
diff --git a/dviware/quicspool/libqmsquery/qmspag.y b/dviware/quicspool/libqmsquery/qmspag.y
new file mode 100644
index 0000000000..ce3e25235a
--- /dev/null
+++ b/dviware/quicspool/libqmsquery/qmspag.y
@@ -0,0 +1,162 @@
+%{
+#ifndef lint
+static char *rcs = "$Header: qmspag.y,v 1.1 88/01/15 12:19:19 simpson Rel $";
+#endif
+/*
+$Log: qmspag.y,v $
+ * Revision 1.1 88/01/15 12:19:19 simpson
+ * initial release
+ *
+ * Revision 0.1 87/12/11 17:12:07 simpson
+ * beta test
+ *
+*/
+#include <stdio.h>
+#include <setjmp.h>
+#include <local/standard.h>
+#include "qms.h"
+
+extern FILE *_Ifp, *_Ofp;
+extern Boolean _FirstChar;
+static jmp_buf Env;
+static struct qmspag Result;
+%}
+%union {
+ float r;
+ int i;
+}
+%token PAG POT TMT BMT LMT RMT LPIT CPIT PROP PTT PST SOT CCT ENDLINE
+%token <r> REAL
+%token <i> INTEGER
+%type <i> orientation yesorno 'P' 'L' 'Y' 'N'
+%%
+paglines : paglines pagline | pagline ;
+
+pagline : PAG settings ENDLINE ;
+
+settings : settings setting optcomma | /* epsilon */ ;
+
+setting :
+ POT '=' orientation
+ {
+ Result.PO = $3;
+ }
+ |
+ TMT '=' INTEGER
+ {
+ Result.TM = $3;
+ }
+ |
+ TMT '=' REAL
+ {
+ Result.TM = $3;
+ }
+ |
+ BMT '=' INTEGER
+ {
+ Result.BM = $3;
+ }
+ |
+ BMT '=' REAL
+ {
+ Result.BM = $3;
+ }
+ |
+ LMT '=' INTEGER
+ {
+ Result.LM = $3;
+ }
+ |
+ LMT '=' REAL
+ {
+ Result.LM = $3;
+ }
+ |
+ RMT '=' INTEGER
+ {
+ Result.RM = $3;
+ }
+ |
+ RMT '=' REAL
+ {
+ Result.RM = $3;
+ }
+ |
+ LPIT '=' INTEGER
+ {
+ Result.LPI = $3;
+ }
+ |
+ LPIT '=' REAL
+ {
+ Result.LPI = $3;
+ }
+ |
+ CPIT '=' INTEGER
+ {
+ Result.CPI = $3;
+ }
+ |
+ CPIT '=' REAL
+ {
+ Result.CPI = $3;
+ }
+ |
+ CPIT '=' PROP
+ {
+ Result.CPI = 0;
+ }
+ |
+ PTT '=' INTEGER
+ {
+ Result.PT = $3;
+ }
+ |
+ PST '=' INTEGER
+ {
+ Result.PS = $3;
+ }
+ |
+ SOT '=' yesorno
+ {
+ Result.SO = $3;
+ }
+ |
+ CCT '=' INTEGER
+ {
+ Result.CC = $3;
+ }
+ ;
+
+orientation : 'P' | 'L' ;
+
+yesorno : 'Y' | 'N' ;
+
+optcomma : ',' | /* epsilon */ ;
+%%
+#include "qmspaglex.c"
+
+struct qmspag *qmspag()
+{
+ _FirstChar = TRUE;
+ fputs(QUICON, _Ofp);
+ fprintf(_Ofp, "%s00000", SYNTAX);
+ fprintf(_Ofp, "%sPAG%s", INFO, ENDCMD);
+ fputs(QUICOFF, _Ofp);
+ (void)fflush(_Ofp);
+ if (setjmp(Env)) {
+ while (timedgetc(_Ifp) != EOF) /* Discard remaining input */
+ ;
+ return NULL;
+ }
+ if (yyparse() != 0)
+ return NULL;
+ yysptr = yysbuf; /* Resets lex lookahead buffer */
+ return &Result;
+}
+
+static yyerror(s)
+char *s;
+{
+ longjmp(Env, TRUE);
+}