source: git/src/datain.h @ 8a7804fb

main
Last change on this file since 8a7804fb was 0b99107, checked in by Olly Betts <olly@…>, 3 months ago

Eliminate old FSF addresses

Update GPL/LGPL licence files and boilerplate to direct people who
didn't receive the licence text to the FSF website, as the current
versions of the FSF licence texts now do, rather than giving a postal
address.

  • Property mode set to 100644
File size: 3.6 KB
RevLine 
[b0d908e]1/* datain.h
[d1b1380]2 * Header file for code that...
3 * Reads in survey files, dealing with special characters, keywords & data
[fdd4ed76]4 * Copyright (C) 1994-2024 Olly Betts
[846746e]5 *
[89231c4]6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
[846746e]10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
[89231c4]13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
[846746e]15 *
[89231c4]16 * You should have received a copy of the GNU General Public License
[0b99107]17 * along with this program; if not, see
18 * <https://www.gnu.org/licenses/>.
[d1b1380]19 */
20
[c7c0f93]21#ifndef DATAIN_H
22#define DATAIN_H
[d1b1380]23
[c7c0f93]24#include <setjmp.h>
[a420b49]25#include <stdio.h> /* for FILE */
26
[37d6b84]27#include "message.h" /* for DIAG_WARN, etc */
28
[fdd4ed76]29// We rely on implicit initialisation of this struct, so members will be
30// initialised to NULL, 0, false, etc.
[a420b49]31typedef struct parse {
[58cc1fb]32   FILE *fh;
[a63fb408]33   const char *filename;
[8ae73a0]34   // ftell() at start of the current line.
[da96015]35   long lpos;
[7cd5b8d]36   unsigned int line;
37   bool reported_where : 1;
[3b073fa]38   unsigned prev_line_len : 31;
[421b7d2]39   struct parse *parent;
[d1b1380]40} parse;
[58cc1fb]41
42extern int ch;
[d1b1380]43extern parse file;
[fdd4ed76]44extern jmp_buf jbSkipLine;
[932f7e9]45extern bool f_export_ok;
[d1b1380]46
[e02a6a6]47#define nextch() (ch = GETC(file.fh))
[c80bd34]48
49typedef struct {
50   long offset;
51   int ch;
52} filepos;
53
54void get_pos(filepos *fp);
55void set_pos(const filepos *fp);
[d1b1380]56
[1650ba1]57void set_declination_location(real x, real y, real z, const char *proj_str,
58                              filepos *fp);
59
[a9f5117]60void skipblanks(void);
[d1b1380]61
[3a54fd29]62/* reads complete data file */
[a9f5117]63void data_file(const char *pth, const char *fnm);
[3a54fd29]64
[b1d6069]65real calculate_convergence_xy(const char *proj_str,
66                              double x, double y, double z);
67
[a9f5117]68void skipline(void);
[d1b1380]69
[d5a206ec]70/* Read the current line into a string, converting each tab to a space.
[37d6b84]71 *
72 * The string is allocated with malloc() the caller is responsible for calling
73 * free().
74 */
75char* grab_line(void);
76
77/* The severity values are defined in message.h. */
[501dd27]78#define DIAG_SEVERITY_MASK      0x03
79
[f0e31b0]80// Call skipline() after reporting the diagnostic:
[501dd27]81#define DIAG_SKIP               0x04
82
83// Context type values:
84
85#define DIAG_CONTEXT_MASK       0x78
[bdabf9f]86// Report column number based on the current file position.
[501dd27]87#define DIAG_COL                0x08
[f0e31b0]88// Set caret_width to s_len(&token):
[501dd27]89#define DIAG_TOKEN              0x10
[f0e31b0]90// The following codes say to parse and discard a value from the current file
91// position - caret_width is set to its length:
[501dd27]92#define DIAG_WORD               0x18    // Span of non-blanks and non-comments.
93#define DIAG_UINT               0x20    // Span of digits.
94#define DIAG_DATE               0x28    // Span of digits and full stops.
95#define DIAG_NUM                0x30    // Real number.
96#define DIAG_STRING             0x38    // Possibly quoted string value.
97#define DIAG_TAIL               0x40    // Rest of the line (not including
98                                        // trailing blanks or comment).
99
100// A non-zero caret_width value can be encoded in the upper bits.
101#define DIAG_FROM_SHIFT 7
102// Mask to detect embedded caret_width value.
103#define DIAG_FROM_MASK  (~((1U << DIAG_FROM_SHIFT) - 1))
[725d3b1]104// Specify the caret_width explicitly.
[501dd27]105#define DIAG_WIDTH(W)   ((W) << DIAG_FROM_SHIFT)
[725d3b1]106// Specify caret_width to be from filepos POS to the current position.
107#define DIAG_FROM(POS)  DIAG_WIDTH(ftell(file.fh) - (POS).offset)
[39fba51]108
[cab0f26]109void compile_diagnostic(int flags, int en, ...);
110
111void compile_diagnostic_at(int flags, const char * file, unsigned line, int en, ...);
112void compile_diagnostic_pfx(int flags, const prefix * pfx, int en, ...);
113
114void compile_diagnostic_token_show(int flags, int en);
115void compile_diagnostic_buffer(int flags, int en, ...);
[c7c0f93]116
117#endif
Note: See TracBrowser for help on using the repository browser.