1 | #include "madx.h" |
---|
2 | |
---|
3 | struct in_buffer* |
---|
4 | new_in_buffer(int length) |
---|
5 | { |
---|
6 | char rout_name[] = "new_in_buffer"; |
---|
7 | struct in_buffer* new = |
---|
8 | (struct in_buffer*) mycalloc(rout_name,1, sizeof(struct in_buffer)); |
---|
9 | strcpy(new->name, "in_buffer"); |
---|
10 | new->stamp = 123456; |
---|
11 | if (watch_flag) fprintf(debug_file, "creating ++> %s\n", new->name); |
---|
12 | new->c_a = new_char_array(length); |
---|
13 | new->flag = -1; |
---|
14 | return new; |
---|
15 | } |
---|
16 | |
---|
17 | struct in_buff_list* |
---|
18 | new_in_buff_list(int length) |
---|
19 | { |
---|
20 | char rout_name[] = "new_inbuf_list"; |
---|
21 | struct in_buff_list* bll = |
---|
22 | (struct in_buff_list*) mycalloc(rout_name,1, sizeof(struct in_buff_list)); |
---|
23 | strcpy(bll->name, "in_buff_list"); |
---|
24 | bll->stamp = 123456; |
---|
25 | if (watch_flag) fprintf(debug_file, "creating ++> %s\n", bll->name); |
---|
26 | bll->buffers = |
---|
27 | (struct in_buffer**) mycalloc(rout_name,length, sizeof(struct in_buffer*)); |
---|
28 | bll->input_files = |
---|
29 | (FILE**) mycalloc(rout_name,length, sizeof(FILE*)); |
---|
30 | bll->max = length; |
---|
31 | return bll; |
---|
32 | } |
---|
33 | |
---|
34 | void |
---|
35 | grow_in_buff_list(struct in_buff_list* p) |
---|
36 | { |
---|
37 | char rout_name[] = "grow_in_buff_list"; |
---|
38 | struct in_buffer** e_loc = p->buffers; |
---|
39 | FILE** f_loc = p->input_files; |
---|
40 | int j, new = 2*p->max; |
---|
41 | p->max = new; |
---|
42 | p->buffers |
---|
43 | = (struct in_buffer**) mycalloc(rout_name,new, sizeof(struct in_buffer*)); |
---|
44 | for (j = 0; j < p->curr; j++) p->buffers[j] = e_loc[j]; |
---|
45 | myfree(rout_name, e_loc); |
---|
46 | p->input_files = mycalloc(rout_name, new, sizeof(FILE*)); |
---|
47 | for (j = 0; j < p->curr; j++) p->input_files[j] = f_loc[j]; |
---|
48 | myfree(rout_name, f_loc); |
---|
49 | } |
---|
50 | |
---|
51 | int |
---|
52 | down_unit(char* file_name) |
---|
53 | /* makes a called file the current input unit */ |
---|
54 | { |
---|
55 | FILE* new; |
---|
56 | if ((new = fopen(file_name, "r")) == NULL) |
---|
57 | { |
---|
58 | if (interactive) warning("cannot open input file:", file_name); |
---|
59 | else fatal_error("cannot open input file:", file_name); |
---|
60 | return 0; |
---|
61 | } |
---|
62 | if (in->curr+1 == in->max) grow_in_buff_list(in); |
---|
63 | in->input_files[++in->curr] = new; |
---|
64 | strcpy(filenames[in->curr],file_name); |
---|
65 | currentline[in->curr] = 0; |
---|
66 | return 1; |
---|
67 | } |
---|
68 | |
---|