2 * SURVEX Cave surveying software: stuff to do with stn position output
3 * Copyright (C) 1991-2002,2011,2012,2013,2014 Olly Betts
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.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #define PRINT_STN_POS_LIST 1
39 /* Traverse prefix tree depth first starting at from, and
40 * calling function fn at each node */
42 traverse_prefix_tree(prefix
*from
, void (*fn
)(prefix
*))
59 if (p
== from
) return; /* got back to start */
71 if (!TSTBIT(p
->sflags
, SFLAGS_SURVEY
)) {
72 /* Could do away with the SFLAGS_SURVEY check and check
73 * p->min_export instead of p->max_export I think ... */
74 if (TSTBIT(p
->sflags
, SFLAGS_ENTRANCE
) || p
->max_export
) {
75 /* p is a station which was referred to in "*entrance" and/or
76 * "*export" but not elsewhere (otherwise it'd have a position).
77 * p could also be a survey (SFLAGS_SURVEY) or be mentioned as
78 * a station, but only in a line of data which was rejected
79 * because of an error.
81 warning_in_file(p
->filename
, p
->line
,
82 /*Station “%s” referred to by *entrance or *export but never used*/190,
87 /* Do we need to worry about export violations in hanging surveys? */
90 printf("L min %d max %d pfx %s\n",
91 p
->min_export
, p
->max_export
, sprint_prefix(p
));
93 if ((p
->min_export
> 1 && p
->min_export
!= USHRT_MAX
) ||
94 (p
->min_export
== 0 && p
->max_export
)) {
96 prefix
*where
= p
->up
;
99 s
= osstrdup(sprint_prefix(where
));
100 /* Report better when station called 2.1 for example */
101 while (!where
->filename
&& where
->up
) where
= where
->up
;
103 if (TSTBIT(where
->sflags
, SFLAGS_PREFIX_ENTERED
)) {
104 msgno
= /*Station “%s” not exported from survey “%s”*/26;
106 /* TRANSLATORS: This error occurs if there's an attempt to
107 * export a station from a survey which doesn't actually exist.
109 * Here "survey" is a "cave map" rather than list of questions - it should be
110 * translated to the terminology that cavers using the language would use.
112 msgno
= /*Reference to station “%s” from non-existent survey “%s”*/286;
114 compile_diagnostic_pfx(DIAG_ERR
, where
, msgno
, sprint_prefix(p
), s
);
119 if (TSTBIT(p
->sflags
, SFLAGS_SUSPECTTYPO
)) {
120 /* TRANSLATORS: Here "station" is a survey station, not a train station. */
121 warning_in_file(p
->filename
, p
->line
,
122 /*Station “%s” referred to just once, with an explicit survey name - typo?*/70,
130 static int icOrderMac
;
137 SVX_ASSERT(pfx_fixed(p
));
141 if (order
>= icOrderMac
) {
143 cOrder
= osrealloc(cOrder
, c
* ossizeof(int));
144 while (icOrderMac
< c
) cOrder
[icOrderMac
++] = 0;
153 node_stats(prefix
*from
)
156 icOrderMac
= 8; /* Start value */
157 cOrder
= osmalloc(icOrderMac
* ossizeof(int));
158 memset(cOrder
, 0, icOrderMac
* ossizeof(int));
159 traverse_prefix_tree(from
, node_stat
);
160 for (p
= anon_list
; p
; p
= p
->right
) {
167 print_node_stats(void)
171 int max_c
= 9999; /* Always allow space for 4 digits. */
174 for (c
= 0; c
< icOrderMac
; c
++) {
175 if (cOrder
[c
] > max_c
) {
179 width
= 1 + (int)log10((double)max_c
);
180 for (c
= 0; c
< icOrderMac
; c
++) {
182 printf("%*d %d-%s.\n", width
, cOrder
[c
], c
,
184 /* TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." */
186 /* TRANSLATORS: node/nodes as in: "Survey has 1 2-node and 2 3-nodes." */
194 check_node_stats(void)
196 traverse_prefix_tree(root
, check_node
);