1 %{ 2 3 /* 4 * +-------------------------------------------------------+ 5 * | | 6 * | videogen | 7 * | | 8 * | a simple XFree86 Modeline calculator | 9 * | (c) 1997-2003, Szabolcs Rumi | 10 * | | 11 * | http://www.dynaweb.hu/opensource/videogen | 12 * | | 13 * | the videogen package is distributed under the | 14 * | GNU General Public License Version 2 (GPLv2) | 15 * | | 16 * +-------------------------------------------------------+ 17 */ 18 19 20 21 22 23 #include <stdio.h> 24 #include <stdlib.h> 25 26 #include "config.h" 27 #include "videogen.h" 28 29 30 31 extern unsigned int lexer_num_lines; /* line counter */ 32 extern int yylex (void); 33 void yyerror (char *errtext); 34 35 36 37 38 39 %} 40 41 42 43 44 45 %union { 46 long int ival; /* integer value */ 47 double fval; /* floating point value */ 48 unsigned char bval; /* boolean value */ 49 } 50 51 %token <ival> T_INTEGER 52 %token <fval> T_FLOAT 53 %token <bval> T_BOOLEAN 54 %token T_VERBOSE 55 %token T_FBSET 56 %token T_NVIDIA 57 %token T_MODE 58 %token T_MAX_DOTCLK 59 %token T_MAX_HFREQ 60 %token T_MAX_VFREQ 61 %token T_DESIRED_VFREQ 62 %token T_HVISIBLE 63 %token T_VVISIBLE 64 %token T_HFPORCH 65 %token T_HBPORCH 66 %token T_HSYNC 67 %token T_VFPORCH 68 %token T_VBPORCH 69 %token T_VSYNC 70 71 72 73 74 75 %% 76 77 78 79 80 81 input: /* empty */ /* empty */ 82 | input line /* empty */ 83 | input error /* empty */ 84 ; 85 86 87 88 line: '\n' /* empty */ 89 | assignments '\n' /* empty */ 90 ; 91 92 93 94 assignments: ';' /* empty */ 95 | assignments ';' assignment /* empty */ 96 | assignments ';' /* empty */ 97 | assignment /* empty */ 98 ; 99 100 101 102 assignment: T_VERBOSE '=' T_BOOLEAN { 103 104 if ($3 > 0) 105 { 106 if (commit_verbose (CFG_PREC_CFGFILE, &verbose, 1) == 0) { 107 pmsg (VL_DEBUG, "[cfgfile] line %u: verbose mode on\n", lexer_num_lines); 108 } 109 } 110 else 111 { 112 if (commit_verbose (CFG_PREC_CFGFILE, &verbose, 0) == 0) 113 pmsg (VL_DEBUG, "[cfgfile] line %u: verbose mode off\n", lexer_num_lines); 114 } 115 116 } 117 118 119 120 | T_FBSET '=' T_BOOLEAN { 121 122 if ($3 > 0) 123 { 124 if (commit_fbset (CFG_PREC_CFGFILE, &fbset, 1) == 0) 125 pmsg (VL_DEBUG, "[cfgfile] line %u: fbset mode on\n", lexer_num_lines); 126 } 127 else 128 { 129 if (commit_fbset (CFG_PREC_CFGFILE, &fbset, 0) == 0) 130 pmsg (VL_DEBUG, "[cfgfile] line %u: fbset mode off\n", lexer_num_lines); 131 } 132 133 } 134 135 136 137 | T_NVIDIA '=' T_BOOLEAN { 138 139 if ($3 > 0) 140 { 141 if (commit_nvidia (CFG_PREC_CFGFILE, &nvidia, 1) == 0) 142 pmsg (VL_DEBUG, "[cfgfile] line %u: nvidia compatibility mode on\n", lexer_num_lines); 143 } 144 else 145 { 146 if (commit_nvidia (CFG_PREC_CFGFILE, &nvidia, 0) == 0) 147 pmsg (VL_DEBUG, "[cfgfile] line %u: nvidia compatibility mode off\n", lexer_num_lines); 148 } 149 150 } 151 152 153 154 | T_MODE T_INTEGER 'x' T_INTEGER { 155 156 switch (commit_mode (CFG_PREC_CFGFILE, &modes, &num_modes, $2, $4)) 157 { 158 case -1: break; 159 160 case 0: { 161 pmsg (VL_DEBUG, "[cfgfile] line %u: added mode %lux%lu\n", lexer_num_lines, $2, $4); 162 break; 163 } 164 165 case 5: { 166 pmsg (VL_DEBUG, "[cfgfile] line %u: too many modes, dropping %lux%lu\n", lexer_num_lines, $2, $4); 167 pmsg (VL_VERBOSE, "no more than 256 modes are allowed, dropping %lux%lu\n", $2, $4); 168 break; 169 } 170 171 default: { 172 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter %lux%lu\n", lexer_num_lines, $2, $4); 173 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 174 YYABORT; 175 } 176 } 177 178 } 179 180 181 182 | T_MAX_DOTCLK '=' T_INTEGER { 183 184 switch (commit_max_dotclk (CFG_PREC_CFGFILE, &max_dotclk, $3)) 185 { 186 case -1: break; 187 188 case 0: { 189 pmsg (VL_DEBUG, "[cfgfile] line %u: max_dotclk = %lu MHz\n", lexer_num_lines, $3); 190 break; 191 } 192 193 default: { 194 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_dotclk = %lu MHz)\n", lexer_num_lines, $3); 195 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 196 YYABORT; 197 } 198 } 199 200 } 201 202 203 204 | T_MAX_DOTCLK '=' T_FLOAT { 205 206 switch (commit_max_dotclk (CFG_PREC_CFGFILE, &max_dotclk, $3)) 207 { 208 case -1: break; 209 210 case 0: { 211 pmsg (VL_DEBUG, "[cfgfile] line %u: max_dotclk = %f MHz\n", lexer_num_lines, $3); 212 break; 213 } 214 215 default: { 216 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_dotclk = %f MHz)\n", lexer_num_lines, $3); 217 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 218 YYABORT; 219 } 220 } 221 222 } 223 224 225 226 | T_MAX_HFREQ '=' T_INTEGER { 227 228 switch (commit_max_hfreq (CFG_PREC_CFGFILE, &max_hfreq, $3)) 229 { 230 case -1: break; 231 232 case 0: { 233 pmsg (VL_DEBUG, "[cfgfile] line %u: max_hfreq = %lu kHz\n", lexer_num_lines, $3); 234 break; 235 } 236 237 default: { 238 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_hfreq = %lu kHz)\n", lexer_num_lines, $3); 239 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 240 YYABORT; 241 } 242 } 243 244 } 245 246 247 248 | T_MAX_HFREQ '=' T_FLOAT { 249 250 switch (commit_max_hfreq (CFG_PREC_CFGFILE, &max_hfreq, $3)) 251 { 252 case -1: break; 253 254 case 0: { 255 pmsg (VL_DEBUG, "[cfgfile] line %u: max_hfreq = %f kHz\n", lexer_num_lines, $3); 256 break; 257 } 258 259 default: { 260 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_hfreq = %f kHz)\n", lexer_num_lines, $3); 261 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 262 YYABORT; 263 } 264 } 265 266 } 267 268 269 270 | T_MAX_VFREQ '=' T_INTEGER { 271 272 switch (commit_max_vfreq (CFG_PREC_CFGFILE, &max_vfreq, $3)) 273 { 274 case -1: break; 275 276 case 0: { 277 pmsg (VL_DEBUG, "[cfgfile] line %u: max_vfreq = %lu Hz\n", lexer_num_lines, $3); 278 break; 279 } 280 281 default: { 282 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_vfreq = %lu Hz)\n", lexer_num_lines, $3); 283 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 284 YYABORT; 285 } 286 } 287 288 } 289 290 291 292 | T_MAX_VFREQ '=' T_FLOAT { 293 294 switch (commit_max_vfreq (CFG_PREC_CFGFILE, &max_vfreq, $3)) 295 { 296 case -1: break; 297 298 case 0: { 299 pmsg (VL_DEBUG, "[cfgfile] line %u: max_vfreq = %f Hz\n", lexer_num_lines, $3); 300 break; 301 } 302 303 default: { 304 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (max_vfreq = %f Hz)\n", lexer_num_lines, $3); 305 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 306 YYABORT; 307 } 308 } 309 310 } 311 312 313 314 | T_DESIRED_VFREQ '=' T_INTEGER { 315 316 switch (commit_desired_vfreq (CFG_PREC_CFGFILE, &desired_vfreq, $3)) 317 { 318 case -1: break; 319 320 case 0: { 321 pmsg (VL_DEBUG, "[cfgfile] line %u: desired_vfreq = %lu Hz\n", lexer_num_lines, $3); 322 break; 323 } 324 325 default: { 326 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (desired_vfreq = %lu Hz)\n", lexer_num_lines, $3); 327 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 328 YYABORT; 329 } 330 } 331 332 } 333 334 335 336 | T_DESIRED_VFREQ '=' T_FLOAT { 337 338 switch (commit_desired_vfreq (CFG_PREC_CFGFILE, &desired_vfreq, $3)) 339 { 340 case -1: break; 341 342 case 0: { 343 pmsg (VL_DEBUG, "[cfgfile] line %u: desired_vfreq = %f Hz\n", lexer_num_lines, $3); 344 break; 345 } 346 347 default: { 348 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (desired_vfreq = %f Hz)\n", lexer_num_lines, $3); 349 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 350 YYABORT; 351 } 352 } 353 354 } 355 356 357 358 | T_HVISIBLE '=' T_INTEGER { 359 360 switch (commit_hvisible (CFG_PREC_CFGFILE, &hvisible, $3)) 361 { 362 case -1: break; 363 364 case 0: { 365 pmsg (VL_DEBUG, "[cfgfile] line %u: hvisible = %lu%%\n", lexer_num_lines, $3); 366 break; 367 } 368 369 default: { 370 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hvisible = %lu%%)\n", lexer_num_lines, $3); 371 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 372 YYABORT; 373 } 374 } 375 376 } 377 378 379 380 | T_HVISIBLE '=' T_FLOAT { 381 382 switch (commit_hvisible (CFG_PREC_CFGFILE, &hvisible, $3)) 383 { 384 case -1: break; 385 386 case 0: { 387 pmsg (VL_DEBUG, "[cfgfile] line %u: hvisible = %.4g%%\n", lexer_num_lines, $3); 388 break; 389 } 390 391 default: { 392 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hvisible = %.4g%%)\n", lexer_num_lines, $3); 393 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 394 YYABORT; 395 } 396 } 397 398 } 399 400 401 402 | T_VVISIBLE '=' T_INTEGER { 403 404 switch (commit_vvisible (CFG_PREC_CFGFILE, &vvisible, $3)) 405 { 406 case -1: break; 407 408 case 0: { 409 pmsg (VL_DEBUG, "[cfgfile] line %u: vvisible = %lu%%\n", lexer_num_lines, $3); 410 break; 411 } 412 413 default: { 414 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vvisible = %lu%%)\n", lexer_num_lines, $3); 415 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 416 YYABORT; 417 } 418 } 419 420 } 421 422 423 424 | T_VVISIBLE '=' T_FLOAT { 425 426 switch (commit_vvisible (CFG_PREC_CFGFILE, &vvisible, $3)) 427 { 428 case -1: break; 429 430 case 0: { 431 pmsg (VL_DEBUG, "[cfgfile] line %u: vvisible = %.4g%%\n", lexer_num_lines, $3); 432 break; 433 } 434 435 default: { 436 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vvisible = %.4g%%)\n", lexer_num_lines, $3); 437 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 438 YYABORT; 439 } 440 } 441 442 } 443 444 445 446 | T_HFPORCH '=' T_INTEGER { 447 448 switch (commit_hfporch (CFG_PREC_CFGFILE, &hfporch, $3)) 449 { 450 case -1: break; 451 452 case 0: { 453 pmsg (VL_DEBUG, "[cfgfile] line %u: hfporch = %lu ticks\n", lexer_num_lines, $3); 454 break; 455 } 456 457 default: { 458 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hfporch = %lu ticks\n", lexer_num_lines, $3); 459 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 460 YYABORT; 461 } 462 } 463 464 } 465 466 467 468 | T_HBPORCH '=' T_INTEGER { 469 470 switch (commit_hbporch (CFG_PREC_CFGFILE, &hbporch, $3)) 471 { 472 case -1: break; 473 474 case 0: { 475 pmsg (VL_DEBUG, "[cfgfile] line %u: hbporch = %lu ticks\n", lexer_num_lines, $3); 476 break; 477 } 478 479 default: { 480 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hbporch = %lu ticks\n", lexer_num_lines, $3); 481 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 482 YYABORT; 483 } 484 } 485 486 } 487 488 489 490 | T_HSYNC '=' T_INTEGER { 491 492 switch (commit_hsync (CFG_PREC_CFGFILE, &hsync, $3)) 493 { 494 case -1: break; 495 496 case 0: { 497 pmsg (VL_DEBUG, "[cfgfile] line %u: hsync = %lu us\n", lexer_num_lines, $3); 498 break; 499 } 500 501 default: { 502 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hsync = %lu us\n", lexer_num_lines, $3); 503 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 504 YYABORT; 505 } 506 } 507 508 } 509 510 511 512 | T_HSYNC '=' T_FLOAT { 513 514 switch (commit_hsync (CFG_PREC_CFGFILE, &hsync, $3)) 515 { 516 case -1: break; 517 518 case 0: { 519 pmsg (VL_DEBUG, "[cfgfile] line %u: hsync = %.4g us\n", lexer_num_lines, $3); 520 break; 521 } 522 523 default: { 524 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (hsync = %.4g us\n", lexer_num_lines, $3); 525 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 526 YYABORT; 527 } 528 } 529 530 } 531 532 533 534 | T_VFPORCH '=' T_INTEGER { 535 536 switch (commit_vfporch (CFG_PREC_CFGFILE, &vfporch, $3)) 537 { 538 case -1: break; 539 540 case 0: { 541 pmsg (VL_DEBUG, "[cfgfile] line %u: vfporch = %lu ticks\n", lexer_num_lines, $3); 542 break; 543 } 544 545 default: { 546 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vfporch = %lu ticks\n", lexer_num_lines, $3); 547 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 548 YYABORT; 549 } 550 } 551 552 } 553 554 555 556 | T_VBPORCH '=' T_INTEGER { 557 558 switch (commit_vbporch (CFG_PREC_CFGFILE, &vbporch, $3)) 559 { 560 case -1: break; 561 562 case 0: { 563 pmsg (VL_DEBUG, "[cfgfile] line %u: vbporch = %lu ticks\n", lexer_num_lines, $3); 564 break; 565 } 566 567 default: { 568 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vbporch = %lu ticks\n", lexer_num_lines, $3); 569 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 570 YYABORT; 571 } 572 } 573 574 } 575 576 577 578 | T_VSYNC '=' T_INTEGER { 579 580 switch (commit_vsync (CFG_PREC_CFGFILE, &vsync, $3)) 581 { 582 case -1: break; 583 584 case 0: { 585 pmsg (VL_DEBUG, "[cfgfile] line %u: vsync = %lu us\n", lexer_num_lines, $3); 586 break; 587 } 588 589 default: { 590 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vsync = %lu us\n", lexer_num_lines, $3); 591 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 592 YYABORT; 593 } 594 } 595 596 } 597 598 599 600 | T_VSYNC '=' T_FLOAT { 601 602 switch (commit_vsync (CFG_PREC_CFGFILE, &vsync, $3)) 603 { 604 case -1: break; 605 606 case 0: { 607 pmsg (VL_DEBUG, "[cfgfile] line %u: vsync = %.4g us\n", lexer_num_lines, $3); 608 break; 609 } 610 611 default: { 612 pmsg (VL_DEBUG, "[cfgfile] line %u: invalid parameter (vsync = %.4g us\n", lexer_num_lines, $3); 613 pmsg (VL_VERBOSE, "error at line %u: invalid parameter\n", lexer_num_lines); 614 YYABORT; 615 } 616 } 617 618 } 619 620 ; 621 622 623 624 625 626 %% 627 628 629 630 631 632 void 633 yyerror (char *errtext) 634 { 635 pmsg (VL_DEBUG, "[cfgfile] parse error at line %u: %s\n", lexer_num_lines, errtext); 636 pmsg (VL_VERBOSE, "error at line %u: %s\n", lexer_num_lines, errtext); 637 } 638 639 640 641 642 643 /* EOF */ 644