| 1 |
%{ |
|---|
| 2 |
/* |
|---|
| 3 |
* Copyright (c) 2000, Red Hat, Inc. |
|---|
| 4 |
* |
|---|
| 5 |
* This program is free software; you can redistribute it and/or modify |
|---|
| 6 |
* it under the terms of the GNU General Public License as published by |
|---|
| 7 |
* the Free Software Foundation; either version 2 of the License, or |
|---|
| 8 |
* (at your option) any later version. |
|---|
| 9 |
* |
|---|
| 10 |
* A copy of the GNU General Public License can be found at |
|---|
| 11 |
* http://www.gnu.org/ |
|---|
| 12 |
* |
|---|
| 13 |
* Written by DJ Delorie <dj@cygnus.com> |
|---|
| 14 |
* |
|---|
| 15 |
*/ |
|---|
| 16 |
|
|---|
| 17 |
/* Parse the setup.ini files. inilex.l provides the tokens for this. */ |
|---|
| 18 |
|
|---|
| 19 |
#include <stdio.h> |
|---|
| 20 |
#include <stdlib.h> |
|---|
| 21 |
#include <string.h> |
|---|
| 22 |
#include "win32.h" |
|---|
| 23 |
|
|---|
| 24 |
#include "ini.h" |
|---|
| 25 |
#include "iniparse.h" |
|---|
| 26 |
|
|---|
| 27 |
#include "port.h" |
|---|
| 28 |
|
|---|
| 29 |
#define YYERROR_VERBOSE 1 |
|---|
| 30 |
/*#define YYDEBUG 1*/ |
|---|
| 31 |
|
|---|
| 32 |
static Package *cp; |
|---|
| 33 |
static int trust; |
|---|
| 34 |
extern unsigned int setup_timestamp; |
|---|
| 35 |
extern char *setup_version; |
|---|
| 36 |
extern int yylineno; |
|---|
| 37 |
extern int CDECL yyerror (char *s, ...); |
|---|
| 38 |
|
|---|
| 39 |
#define cpt (cp->info+trust) |
|---|
| 40 |
|
|---|
| 41 |
%} |
|---|
| 42 |
|
|---|
| 43 |
%token STRING |
|---|
| 44 |
%token SETUP_TIMESTAMP SETUP_VERSION VERSION INSTALL SOURCE SDESC LDESC TYPE |
|---|
| 45 |
%token T_PREV T_CURR T_TEST T_UNKNOWN |
|---|
| 46 |
|
|---|
| 47 |
%% |
|---|
| 48 |
|
|---|
| 49 |
whole_file |
|---|
| 50 |
: setup_headers packages |
|---|
| 51 |
; |
|---|
| 52 |
|
|---|
| 53 |
setup_headers |
|---|
| 54 |
: setup_header setup_headers |
|---|
| 55 |
| /* empty */ |
|---|
| 56 |
; |
|---|
| 57 |
|
|---|
| 58 |
setup_header |
|---|
| 59 |
: SETUP_TIMESTAMP STRING '\n' { setup_timestamp = strtoul ($2, 0, 0); } |
|---|
| 60 |
| SETUP_VERSION STRING '\n' { setup_version = strdup ($2); } |
|---|
| 61 |
| '\n' |
|---|
| 62 |
| error { yyerror ("unrecognized line in setup.ini headers (do you have the latest setup?)"); } '\n' |
|---|
| 63 |
; |
|---|
| 64 |
|
|---|
| 65 |
packages |
|---|
| 66 |
: package packages |
|---|
| 67 |
| /* empty */ |
|---|
| 68 |
; |
|---|
| 69 |
|
|---|
| 70 |
package |
|---|
| 71 |
: '@' STRING '\n' { new_package($2); } |
|---|
| 72 |
lines |
|---|
| 73 |
; |
|---|
| 74 |
|
|---|
| 75 |
lines |
|---|
| 76 |
: simple_line '\n' lines |
|---|
| 77 |
| simple_line |
|---|
| 78 |
; |
|---|
| 79 |
|
|---|
| 80 |
simple_line |
|---|
| 81 |
: VERSION STRING { cpt->version = $2; } |
|---|
| 82 |
| SDESC STRING { cp->sdesc = $2; } |
|---|
| 83 |
| LDESC STRING { cp->ldesc = $2; } |
|---|
| 84 |
| INSTALL STRING STRING { cpt->install = $2; |
|---|
| 85 |
cpt->install_size = atoi($3); } |
|---|
| 86 |
| SOURCE STRING STRING { cpt->source = $2; |
|---|
| 87 |
cpt->source_size = atoi($3); } |
|---|
| 88 |
| TYPE STRING { if (!strcmp ($2, "cygwin")) |
|---|
| 89 |
cp->type = TY_CYGWIN; |
|---|
| 90 |
else if (!strcmp ($2, "native")) |
|---|
| 91 |
cp->type = TY_NATIVE; |
|---|
| 92 |
else |
|---|
| 93 |
cp->type = TY_GENERIC; } |
|---|
| 94 |
| T_PREV { trust = TRUST_PREV; } |
|---|
| 95 |
| T_CURR { trust = TRUST_CURR; } |
|---|
| 96 |
| T_TEST { trust = TRUST_TEST; } |
|---|
| 97 |
| T_UNKNOWN { trust = TRUST_UNKNOWN; } |
|---|
| 98 |
| /* empty */ |
|---|
| 99 |
| error '\n' { yylineno --; |
|---|
| 100 |
yyerror ("unrecognized line in package %s (do you have the latest setup?)", cp->name); |
|---|
| 101 |
yylineno ++; |
|---|
| 102 |
} |
|---|
| 103 |
; |
|---|
| 104 |
|
|---|
| 105 |
%% |
|---|
| 106 |
|
|---|
| 107 |
Package *package = 0; |
|---|
| 108 |
Package *xemacs_package = 0; |
|---|
| 109 |
int npackages = 0; |
|---|
| 110 |
static int maxpackages = 0; |
|---|
| 111 |
|
|---|
| 112 |
Package * |
|---|
| 113 |
new_package (char *name) |
|---|
| 114 |
{ |
|---|
| 115 |
if (package == 0) |
|---|
| 116 |
maxpackages = npackages = 0; |
|---|
| 117 |
if (npackages >= maxpackages) |
|---|
| 118 |
{ |
|---|
| 119 |
maxpackages += 10; |
|---|
| 120 |
if (package) |
|---|
| 121 |
package = (Package *) realloc (package, maxpackages * sizeof (Package)); |
|---|
| 122 |
else |
|---|
| 123 |
package = (Package *) malloc (maxpackages * sizeof (Package)); |
|---|
| 124 |
} |
|---|
| 125 |
cp = package + npackages; |
|---|
| 126 |
npackages ++; |
|---|
| 127 |
|
|---|
| 128 |
memset (cp, 0, sizeof (Package)); |
|---|
| 129 |
cp->name = name; |
|---|
| 130 |
|
|---|
| 131 |
trust = TRUST_CURR; |
|---|
| 132 |
|
|---|
| 133 |
return cp; |
|---|
| 134 |
} |
|---|