~ubuntu-branches/debian/jessie/gman/jessie

« back to all changes in this revision

Viewing changes to .pc/pre-0.9.3-5.1.patch/context.c

  • Committer: Package Import Robot
  • Author(s): Osamu Aoki
  • Date: 2012-01-04 00:48:23 UTC
  • Revision ID: package-import@ubuntu.com-20120104004823-wbo6r3f2eslbt1ln
Tags: 0.9.3-5.2
* Non-maintainer upload.
* Switched from mozilla to sensible-browser.
* Added evince as choice since this is gnome/GTK+ app.
* Updated manpath default values to current situation.
* Updated policy version, used 3.0 (quilt) format, and
  made some lintian touch-ups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************** context.c ******************/
 
2
/****************** 1999.6.17 ******************/
 
3
#include <stdio.h>
 
4
#include <string.h>
 
5
#include "context.h"
 
6
#include "util.h"
 
7
 
 
8
AppContext::AppContext()
 
9
{
 
10
        names = new List();
 
11
        types = new List();
 
12
        values = new List();
 
13
        name_default = new List();
 
14
        type_default = new List();
 
15
        value_default = new List();
 
16
 
 
17
        set_default_value("h_size","int",(void *)300);
 
18
        set_default_value("v_size","int",(void *)200);
 
19
}
 
20
 
 
21
AppContext::~AppContext()
 
22
{
 
23
        delete names;
 
24
        delete types;
 
25
        delete values;
 
26
        delete name_default;
 
27
        delete type_default;
 
28
        delete value_default;
 
29
}
 
30
 
 
31
int AppContext::search_name(List * list,char * name)
 
32
{
 
33
        int i,j;
 
34
        j = list->get_size();
 
35
        for (i = 0;i < j;i++) 
 
36
                if (!strcmp((char*)(list->get_item(i)),name)) break;
 
37
        return (i<j)? i:-1;
 
38
}
 
39
 
 
40
int AppContext::set_value(char * _name, char * type, void * data)
 
41
{
 
42
        int i;
 
43
        if((i = search_name(name_default,_name)) != -1) {
 
44
                if( !strcmp((char*)type_default->get_item(i),type)) {
 
45
                        if((i = search_name(names,_name)) != -1)
 
46
                                values->reset_item(i,data);
 
47
                        else{
 
48
                                values->add_item(data);
 
49
                                types->add_item(type);
 
50
                                names->add_item(_name);
 
51
                        }
 
52
                } 
 
53
                else {
 
54
                        fprintf(stderr,"Warning: class AppContext: data type mismatch, "
 
55
                                        " variable \"%s\" is a \"%s\" instead of \"%s\"\n",
 
56
                                        name_default->get_item(i),type_default->get_item(i),type);
 
57
                        return 1;
 
58
                }
 
59
        }
 
60
        else {
 
61
                if((i = search_name(names,_name)) != -1)
 
62
                        values->reset_item(i,data);
 
63
                else{
 
64
                        values->add_item(data);
 
65
                        types->add_item(type);
 
66
                        names->add_item(_name);
 
67
                }
 
68
        }
 
69
        return 0;
 
70
}
 
71
 
 
72
void * AppContext::get_value(char * _name)
 
73
{
 
74
        int i;
 
75
        if((i = search_name(names,_name)) != -1)
 
76
                return values->get_item(i);
 
77
        else if ((i = search_name(name_default,_name)) != -1)
 
78
                return value_default->get_item(i);
 
79
        return  0;
 
80
}
 
81
 
 
82
char * AppContext::get_value_type(char * _name)
 
83
{
 
84
        int i;
 
85
        if((i = search_name(names,_name)) != -1)
 
86
                return (char*)types->get_item(i);
 
87
        else if ((i = search_name(name_default,_name)) != -1)
 
88
                return (char*)type_default->get_item(i);
 
89
        return  NULL;
 
90
}
 
91
 
 
92
void AppContext::set_default_value(char * _name, char * type, void * data)
 
93
{
 
94
        int i;
 
95
        if((i = search_name(name_default,_name)) != -1) {
 
96
                value_default->reset_item(i,data);
 
97
                type_default->reset_item(i,type);
 
98
        }
 
99
        else{
 
100
                name_default->add_item(_name);
 
101
                type_default->add_item(type);
 
102
                value_default->add_item(data);
 
103
        }
 
104
}
 
105
 
 
106
void AppContext::restore_default(char * _name)
 
107
{
 
108
        int i;
 
109
        if((i = search_name(names,_name)) != -1) {
 
110
                values->delete_item(i);
 
111
                types->delete_item(i);
 
112
                names->delete_item(i);
 
113
        }
 
114
}
 
115
 
 
116
void AppContext::restore_all()
 
117
{
 
118
        names->delete_all();
 
119
        types->delete_all();
 
120
        values->delete_all();
 
121
}
 
122
 
 
123
void AppContext::display_values()
 
124
{
 
125
        int i,j,k;
 
126
        printf("values:\n");
 
127
        j = names->get_size();
 
128
        for(i = 0; i<j;i++)
 
129
                if(!strcmp((char*)types->get_item(i),"char*")) 
 
130
                        printf("\"%s\" = \"%s\"\n",names->get_item(i),values->get_item(i));
 
131
                else if(!strcmp((char*)types->get_item(i),"int"))
 
132
                        printf("\"%s\" = %d\n",names->get_item(i),values->get_item(i));
 
133
                else
 
134
                        printf("\"%s\" = 0x%x\n",names->get_item(i),values->get_item(i));
 
135
        printf("default values:\n");
 
136
        j = name_default->get_size();
 
137
        for(i = 0; i<j;i++)
 
138
                if(!strcmp((char*)type_default->get_item(i),"char*")) 
 
139
                        printf("\"%s\" = \"%s\"\n",name_default->get_item(i),value_default->get_item(i));
 
140
                else if(!strcmp((char*)type_default->get_item(i),"int"))
 
141
                        printf("\"%s\" = %d\n",name_default->get_item(i),value_default->get_item(i));
 
142
                else
 
143
                        printf("\"%s\" = 0x%x\n",name_default->get_item(i),value_default->get_item(i));
 
144
}
 
145
 
 
146
#define BUFFER_LENGTH 200
 
147
#define BEGIN 1
 
148
#define NAME 2
 
149
#define NAME_ESCAPE 4
 
150
#define VALUE 3
 
151
 
 
152
static int is_blank(char c) { return c==' ' || c==9;}
 
153
static int is_end(char c) { return c=='\n' || c == 0;}
 
154
static int is_number(char c) {return c<='9' && c>='0';}
 
155
 
 
156
static void * my_parser(char *a, char ** type)
 
157
{
 
158
        char * b;
 
159
        int n;
 
160
        for(b = a; is_number(*b) && !is_blank(*b) && !is_end(*b);b++);
 
161
        if(!(is_blank(*b)||is_end(*b))) {
 
162
                for(;!is_blank(*b) && !is_end(*b);b++);
 
163
                *b = '\0';
 
164
                *type = "char*";
 
165
                return (void*)my_strdup(a);
 
166
        }
 
167
        else {
 
168
                *type = "int";
 
169
                sscanf(a,"%d",&n);
 
170
                return (void*) n;
 
171
        }
 
172
}
 
173
 
 
174
void AppContext::load(FILE * fd)
 
175
{
 
176
        int i,j,k,state;
 
177
        long pos;
 
178
        char *a,*b,*c,*name,*type;
 
179
        void * value;
 
180
        char buffer[BUFFER_LENGTH];
 
181
 
 
182
        a = buffer;
 
183
        pos = 0L;
 
184
        for(k = 1;k;){
 
185
                fseek(fd,pos,SEEK_SET);
 
186
                i = fread(buffer,1,BUFFER_LENGTH-1,fd);
 
187
                if (i == 0) break;
 
188
                buffer[i] = '\0';
 
189
                //printf(buffer);
 
190
                b = strchr(buffer,(int)'\n');
 
191
                if (b) {
 
192
                        pos += b - buffer +1;
 
193
                        *b = '\0';
 
194
                }
 
195
                else k = 0;
 
196
 
 
197
                for(a = buffer;is_blank(*a) && !is_end(*a);a++);
 
198
                if (*a == '#' || is_end(*a)) continue;
 
199
                for(b = a;!is_blank(*b) && !is_end(*b) && *b != '=';b++);
 
200
                if(is_end(*b)) continue;
 
201
                c = strchr(b,(int)'=');
 
202
                if(!c) continue;
 
203
                c++;
 
204
                for(;is_blank(*c) && !is_end(*c);c++);
 
205
                if(is_end(*c)) continue;
 
206
                *b = 0;
 
207
                //              printf("name = %s, value = %s",a,c);
 
208
                name = my_strdup(a);
 
209
                value = my_parser(c,&type);
 
210
                set_value(name,type,value);
 
211
        }
 
212
}
 
213
 
 
214
void AppContext::save(FILE * fp, char * header)
 
215
{
 
216
        int i,j,k;
 
217
        char * type;
 
218
        if(header != NULL)
 
219
                fprintf(fp,"#%s\n\n",header);
 
220
 
 
221
        j = names->get_size();
 
222
        for (i = 0;i<j;i++) {
 
223
                type = (char*)types->get_item(i);
 
224
                if (!strcmp(type,"char*"))
 
225
                        fprintf(fp,"%s = %s\n",names->get_item(i),values->get_item(i));
 
226
                else if (!strcmp(type,"int"))
 
227
                        fprintf(fp,"%s = %d\n",names->get_item(i),values->get_item(i));
 
228
                else fprintf(stderr,"class AppContext: save: type \"%s\" does not be supported yet.\n",type);
 
229
        }
 
230
}
 
231
 
 
232
#undef BUFFER_LENGTH
 
233
 
 
234