]> git.mxchange.org Git - simgear.git/blob - simgear/metar/Local.h
#includes based off of srcdir rather than builddir.
[simgear.git] / simgear / metar / Local.h
1 /*********************************************************************/
2 /*                                                                   */
3 /*  Title: local h                                                   */
4 /*  Updated: 3 June 1996                                             */
5 /*  Organization: W/OSO242 - Graphics and Display Section            */
6 /*  Language: C/370                                                  */
7 /*                                                                   */
8 /*  Abstract:                                                        */
9 /*  This header file provides all function definitions necessary for */
10 /*  the OSO242 C function library.                                   */
11 /*                                                                   */
12 /*********************************************************************/
13  
14 #ifndef locallib_defined
15 #define locallib_defined
16  
17  
18  
19 /*****************/
20 /* Include Files */
21 /*****************/
22  
23 #include <assert.h>
24 #include <ctype.h>
25 #include <errno.h>
26 #include <float.h>
27 #include <limits.h>
28 #include <locale.h>
29 #include <math.h>
30 #include <setjmp.h>
31 #include <signal.h>
32 #include <stdarg.h>
33 #include <stddef.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
37 #include <time.h>
38  
39  
40  
41 /********************/
42 /* Standard Defines */
43 /********************/
44  
45 #define FALSE        0                 /* boolean value */
46 #define MAXINT       INT_MAX           /* maximum integer */
47 #define MININT       INT_MIN           /* minimum integer */
48 #define MAXNEG       INT_MIN           /* minimum integer */
49 #define NO           FALSE             /* boolean value */
50 #define TRUE         1                 /* boolean value */
51 #define TRUNCATED    -1                /* indicates truncation */
52 #define YES          TRUE              /* boolean value */
53  
54  
55 /*****************/
56 /* Macro defines */
57 /*****************/
58  
59 #define ABS(x)       (((x) < 0) ? -(x) : (x))
60 #define clearscrn    system("CLRSCRN")
61 #define assgndev(d, v) v = 0x##d
62 #define DIM(a)       (sizeof(a) / sizeof(a[0]))
63 #define FOREVER      for(;;)           /* endless loop */
64 #define getln(s, n)  ((fgets(s, n, stdin)==NULL) ? EOF : strlen(s))
65 #define IMOD(i, j)   (((i) % (j)) < 0 ? ((i) % (j))+(j) : ((i) % (j)))
66 #define IN_RANGE(n, lo, hi) ((lo) <= (n) && (n) <= (hi))
67 #define LOOPDN(r, n) for ((r) = (n)+1; --(r) > 0;)
68 #define MAX(x, y)    (((x) < (y)) ? (y) : (x))
69 #ifndef max
70 #define max(x, y)    (((x) < (y)) ? (y) : (x))
71 #endif
72 #define MIN(x, y)    (((x) < (y)) ? (x) : (y))
73 #ifndef min
74 #define min(x, y)    (((x) < (y)) ? (x) : (y))
75 #endif
76 #define STREQ(s, t)  (strcmp(s, t) == 0)
77 #define STRGT(s, t)  (strcmp(s, t) > 0)
78 #define STRLT(s, t)  (strcmp(s, t) < 0)
79 #define STRNEQ(s, t, l) (strncmp(s, t, l) == 0)
80 #define STRNGT(s, t, l) (strncmp(s, t, l) > 0)
81 #define STRNLT(s, t, l) (strncmp(s, t, l) < 0)
82 #define SWAP(a,b,t)  ((t) = (a), (a) = (b), (b) = (t))
83  
84  
85 /*********************************************************************/
86 /*                                                                   */
87 /* Memory allocation debugging routines                              */
88 /*                                                                   */
89 /*********************************************************************/
90  
91 #ifdef MEMDEBUG
92  
93 void *mallocx(size_t, char *, int);
94 void *callocx(size_t, size_t, char *, int);
95 void *reallocx(void *, size_t, char *, int);
96 void freex(void *, char *, int);
97  
98 #define malloct(x) mallocx((x), __FILE__, __LINE__)
99 #define calloct(x, y) callocx((x), (y), __FILE__, __LINE__)
100 #define realloct(x, y) reallocx((x), (y), __FILE__, __LINE__)
101 #define freet(x) freex((x), __FILE__, __LINE__)
102  
103 #define malloc malloct
104 #define calloc calloct
105 #define realloc realloct
106 #define free freet
107  
108 #endif
109  
110  
111  
112 /*********************************************************************/
113 /*                                                                   */
114 /* General typedefs                                                  */
115 /*                                                                   */
116 /*********************************************************************/
117  
118 typedef unsigned char byte;
119  
120 #ifndef __cplusplus
121 typedef unsigned short int bool;
122 #endif
123
124 typedef unsigned short int Devaddr;
125  
126 typedef struct diskaddr {
127    int cylinder;
128    int track;
129    int record;
130 } Diskaddr;
131  
132  
133 typedef struct record_id {
134  
135    char id[8];
136    time_t write_timestamp;
137  
138 } Record_ID;
139  
140  
141 typedef struct location {
142  
143    union {
144       unsigned bsn;
145       char cs[9];
146       unsigned short msn;
147    } loc;
148  
149    unsigned location_is_bsn:1,
150             location_is_cs:1,
151             location_is_msn:1;
152  
153 } Location;
154  
155  
156  
157 /*********************************************************************/
158 /*********************************************************************/
159 /*                                                                   */
160 /*                                                                   */
161 /* Functions specific defines, typedefs, and structures              */
162 /*                                                                   */
163 /*                                                                   */
164 /*********************************************************************/
165 /*********************************************************************/
166  
167  
168  
169 /*********************************************************************/
170 /*                                                                   */
171 /* Function prototype and structure(s) used in -                     */
172 /*                                                                   */
173 /* bldstree - Build station information tree                         */
174 /* delstree - Delete station information tree                        */
175 /* getstinf - Get station information from tree                      */
176 /*                                                                   */
177 /*********************************************************************/
178  
179 typedef struct stn_info_node {
180      int key;
181      int block;
182      int station;
183      int latitude;
184      int longitude;
185      int elev;
186      struct stn_info_node * right;
187      struct stn_info_node * left;
188 } Stninfo;
189  
190 struct stn_info_node *bldstree(void);
191 void delstree(struct stn_info_node *);
192 struct stn_info_node *getstinf(struct stn_info_node *,
193                                int,
194                                int);
195  
196  
197  
198 /*********************************************************************/
199 /*                                                                   */
200 /* Function prototype and structure(s) used in -                     */
201 /*                                                                   */
202 /* capqread - Read bulletins from CAPQ chain                         */
203 /*                                                                   */
204 /*********************************************************************/
205  
206 typedef struct CAPQ_data {
207    char * bulletin;
208    int bulletin_length;
209    char * WMO_heading;
210    char * AFOS_pil;
211    char * current_CAPQ_end_address;
212    int start_offset;
213    int record_count;
214    int end_offset;
215    char * bulletin_address;
216    int input_line;
217    int receive_line;
218    int receive_hour;
219    int receive_minute;
220    int CAPQ_day;
221    int CAPQ_hour;
222    int CAPQ_minute;
223    int rc;
224    char flag1;
225    char flag2;
226 } CAPQdata;
227  
228 struct CAPQ_data * capqread (char *, ...);
229  
230  
231  
232 /*********************************************************************/
233 /*                                                                   */
234 /* Function prototype and structure(s) used in -                     */
235 /*                                                                   */
236 /* mdadread - Read bulletins from MDAD chain                         */
237 /*                                                                   */
238 /*********************************************************************/
239  
240 typedef struct MDAD_data {
241    char * bulletin;
242    int bulletin_length;
243    char * WMO_heading;
244    char * AFOS_pil;
245    char * current_MDAD_end_address;
246    int start_offset;
247    int record_count;
248    int end_offset;
249    char * bulletin_address;
250    int input_line;
251    int receive_line;
252    int receive_hour;
253    int receive_minute;
254    int MDAD_year;
255    int MDAD_month;
256    int MDAD_day;
257    int MDAD_hour;
258    int MDAD_minute;
259    int rc;
260    int part_number;
261    int number_of_parts;
262    char MDAD_flag;
263    char flag1;
264    char flag2;
265    char flag3;
266    char MDAD_flag2;
267 } MDADdata;
268  
269 MDADdata * mdadread (char *, ...);
270  
271 MDADdata * mdadscan (char *, ...);
272  
273 void mdadinpt ( MDADdata *, char, bool );
274  
275 char * mdadnxtr ( void );
276 char * mdadnxtk ( void );
277  
278  
279 #define MDAD_HISTORY_LIMIT 39
280  
281 typedef
282 struct MDAD_history_entry
283 {
284    unsigned short hour;
285    unsigned short minute;
286    Diskaddr MDAD_chain_addr;
287 }
288 MDAD_History_Entry;
289  
290 typedef
291 struct MDAD_history
292 {
293    MDAD_History_Entry history_array[MDAD_HISTORY_LIMIT];
294 }
295 MDAD_History;
296  
297 MDAD_History *mdadhist ( void );
298  
299  
300 /*********************************************************************/
301 /*                                                                   */
302 /* Function prototype and structure(s) used in -                     */
303 /*                                                                   */
304 /* gethdgi - Get bulletin heading information                        */
305 /*                                                                   */
306 /*********************************************************************/
307  
308 typedef struct bltn_heading_info {
309     int bltn_day;
310     int bltn_hour;
311     int bltn_min;
312     int rtd_present;
313     int cor_present;
314     int amd_present;
315     char * first_report;
316     // char TTAAii??(7??);
317     // char CCCC??(5??);
318     char amd_seq;
319     char cor_seq;
320     char rtd_seq;
321 } Abbrevhdg;
322  
323 Abbrevhdg *gethdgi(char * );
324  
325  
326  
327 /*********************************************************************/
328 /*                                                                   */
329 /* Function prototype and structure(s) used in -                     */
330 /*                                                                   */
331 /* getime  - Get current system time                                 */
332 /* suspend - Delay execution until specified minute boundary         */
333 /*                                                                   */
334 /*********************************************************************/
335  
336  
337 typedef struct tm_struct{
338    int hour;
339    int min;
340 } Stime;
341  
342 Stime *gettime(void);
343 int suspend(Stime *, int);
344 int timediff(Stime *, Stime *);
345 #define timecmp timediff
346  
347  
348  
349 /*********************************************************************/
350 /*                                                                   */
351 /* Function prototype and structure(s) used in -                     */
352 /*                                                                   */
353 /* rdtaend - Specify rdtaread Ending Address                         */
354 /* rdtaread - Read From RGTR Data Tank                               */
355 /* rdtastrt - Specify rdtaread Starting Address                      */
356 /* rdtatend - Specify rdtaread End Time                              */
357 /* rdtatnke - Specify rdtaread Ending Address                        */
358 /* rdtarstr - Specify rdtaread Start Time                            */
359 /*                                                                   */
360 /*********************************************************************/
361  
362 typedef struct rgtrdata {
363    Diskaddr forward_chain;
364    Diskaddr bulletin_addr;
365    int receive_line;
366    int receive_day;
367    Stime receive_time;
368    Stime RGTR_time;
369    int length;
370    char *bulletin;
371    char datatype;
372 } RGTRdata;
373  
374 int rdtaend(char, Diskaddr *);
375 int rdtaread(RGTRdata *);
376 int rdtastrt(char, Diskaddr *);
377 int rdtatend (char, Stime *);
378 int rdtatnke(char);
379 int rdtatstr(char, Stime *);
380 void rdtainit(void);
381  
382  
383  
384 /*********************************************************************/
385 /*                                                                   */
386 /*  Typedefs and function prototypes for bulletin and report parsing */
387 /*  functions.                                                       */
388 /*                                                                   */
389 /*********************************************************************/
390  
391  
392  
393 typedef struct rptNode {
394    char *rptPtr;
395    int rptLength;
396    struct rptNode* next;
397 } RptNode;
398  
399  
400 typedef struct synpBltn {
401    Abbrevhdg heading;
402    short int day;
403    short int hour;
404    int reportCount;
405    RptNode *rptList;
406    bool valid;
407 } SynpBltn;
408  
409  
410 typedef struct shipBltn {
411    Abbrevhdg heading;
412    int reportCount;
413    RptNode *rptList;
414    bool valid;
415 } ShipBltn;
416  
417  
418 typedef struct tepiBltn {
419    Abbrevhdg heading;
420    int reportCount;
421    RptNode *rptList;
422    bool valid;
423 } TePiBltn;
424  
425  
426 typedef struct drftBltn {
427    Abbrevhdg heading;
428    int reportCount;
429    RptNode *rptList;
430    bool valid;
431 } DrftBltn;
432  
433  
434 typedef struct airpBltn {
435    Abbrevhdg heading;
436    int reportCount;
437    RptNode *rptList;
438    bool valid;
439 } AirpBltn;
440  
441  
442 typedef struct amdrBltn {
443    Abbrevhdg heading;
444    short int day;
445    short int hour;
446    int reportCount;
447    RptNode *rptList;
448    bool valid;
449 } AmdrBltn;
450  
451  
452 typedef struct bthyBltn {
453    Abbrevhdg heading;
454    int reportCount;
455    RptNode *rptList;
456    bool valid;
457 } BthyBltn;
458  
459  
460 typedef struct tescBltn {
461    Abbrevhdg heading;
462    int reportCount;
463    RptNode *rptList;
464    bool valid;
465 } TescBltn;
466  
467  
468 typedef struct tracBltn {
469    Abbrevhdg heading;
470    int reportCount;
471    RptNode *rptList;
472    bool valid;
473 } TracBltn;
474  
475  
476 typedef struct climBltn {
477    Abbrevhdg heading;
478    int reportCount;
479    int month;
480    int year;
481    RptNode *rptList;
482    bool valid;
483 } ClimBltn;
484  
485  
486 typedef struct clmtBltn {
487    Abbrevhdg heading;
488    int reportCount;
489    int month;
490    int year;
491    RptNode *rptList;
492    bool valid;
493 } ClmtBltn;
494  
495  
496 typedef struct metBltn {
497    Abbrevhdg heading;
498    int reportCount;
499    RptNode *rptList;
500    bool valid;
501    short int day;              /* -1 indicates missing/invalid */
502    short int hour;             /* -1 indicates missing/invalid */
503    short int min;              /* -1 indicates missing/invalid */
504 } MetBltn;
505  
506  
507 typedef struct saoBltn {
508    Abbrevhdg heading;
509    int reportCount;
510    RptNode *rptList;
511    bool valid;
512 } SAOBltn;
513  
514  
515 typedef struct prBltn {
516    Abbrevhdg heading;
517    int reportCount;
518    RptNode *rptList;
519    bool valid;
520 } PRBltn;
521  
522  
523 typedef struct tafBltn {
524    Abbrevhdg heading;
525    int reportCount;
526    RptNode *rptList;
527    bool valid;
528 } TafBltn;
529  
530  
531 typedef struct metrRptP {
532    char locind[4];
533    int groupCount;
534    short int day;             /* -1 indicates missing or invalid */
535    short int hour;            /* -1 indicates missing or invalid */
536    short int min;             /* -1 indicates missing or invalid */
537    bool valid;
538 } MetrRptP;
539  
540  
541 typedef struct saoRptP {
542    char locind[4];
543    int groupCount;
544    short int hour;            /* -1 indicates missing or invalid */
545    short int min;             /* -1 indicates missing or invalid */
546    bool valid;
547 } SAORptP;
548  
549  
550 typedef struct prRptP {
551    char locind[4];
552    int groupCount;
553    short int hour;            /* -1 indicates missing or invalid */
554    short int min;             /* -1 indicates missing or invalid */
555    bool valid;
556 } PRRptP;
557  
558  
559 typedef struct tafRptP {
560    char locind[4];
561    int groupCount;
562    short int YY;
563    short int GG;
564    short int validPeriod;
565    bool ammendment;
566    bool correction;
567    bool valid;
568 } TafRptP;
569  
570  
571 typedef struct synpRptP {
572    short int II;
573    short int iii;
574    int groupCount;
575    bool valid;
576 } SynpRptP;
577  
578  
579 typedef struct climRptP {
580    short int II;
581    short int iii;
582    int groupCount;
583    bool valid;
584 } ClimRptP;
585  
586  
587 typedef struct clmtRptP {
588    short int II;
589    short int iii;
590    int groupCount;
591    bool valid;
592 } ClmtRptP;
593  
594  
595 typedef struct tepiRptP {
596    short int II;
597    short int iii;
598    short int YY;
599    short int GG;
600    short int quad;
601    short int ulatitude;
602    short int ulongitude;
603    int msquare;
604    int latitude;
605    int longitude;
606    int groupCount;
607    char callsign[15];
608    char type;
609    char part;
610    bool valid;
611 } TePiRptP;
612  
613  
614 SynpBltn *pbsynp(char *);
615 ShipBltn *pbship(char *);
616 TePiBltn *pbtepi(char *);
617 DrftBltn *pbdrft(char *);
618 AirpBltn *pbairp(char *);
619 AmdrBltn *pbamdr(char *);
620 BthyBltn *pbbthy(char *);
621 TescBltn *pbtesc(char *);
622 TracBltn *pbtrac(char *);
623 ClimBltn *pbclim(char *);
624 ClmtBltn *pbclmt(char *);
625 MetBltn  *pbmetr(char *);
626 MetBltn  *pbspec(char *);
627 TafBltn  *pbtaf(char *);
628 SAOBltn  *pbsao(char *);
629 PRBltn   *pbpirep(char *);
630  
631 SynpRptP *prpsynp(char *, int);
632 TePiRptP *prptepi(char *, int);
633 ClimRptP *prpclim(char *, int);
634 ClmtRptP *prpclmt(char *, int);
635 MetrRptP *prpmetr(char *, int);
636 TafRptP  *prptaf(char *, int);
637 SAORptP  *prpsao(char *, int);
638 PRRptP   *prppirep(char *, int);
639  
640  
641  
642  
643 /*********************************************************************/
644 /*                                                                   */
645 /*  Structures and Function Prototypes for RRN physical I/O          */
646 /*                                                                   */
647 /*********************************************************************/
648  
649  
650 typedef struct RRN_device {
651  
652    char name[44],
653         ownerid[8];
654  
655    unsigned short dev_addr,
656                   base_cylinder,
657                   base_track,
658                   base_record,
659                   max_cylinder,
660                   max_track,
661                   max_record,
662                   records_per_track,
663                   tracks_per_cylinder,
664                   record_length;
665  
666 } RRN_Device;
667  
668  
669 bool readrrn(char *device_name,
670              unsigned int rrn,
671              void *input_buffer,
672              unsigned int read_count);
673  
674 bool writerrn(char *device_name,
675               unsigned int rrn,
676               void *output_buffer,
677               unsigned int write_count);
678  
679 RRN_Device *devinfo(char *device_name);
680  
681 bool valid_dn(char *device_name);
682  
683  
684  
685 /*********************************************************************/
686 /*                                                                   */
687 /*  Function prototype for string value test functions.              */
688 /*                                                                   */
689 /*********************************************************************/
690  
691  
692 int sisalnum(char *);
693 int sisalpha(char *);
694 int siscntrl(char *);
695 int sisdigit(char *);
696 int sisgraph(char *);
697 int sislower(char *);
698 int sisprint(char *);
699 int sispunct(char *);
700 int sisspace(char *);
701 int sisupper(char *);
702 int sisxdigi(char *);
703  
704 int nisalnum(char *, int);
705 int nisalpha(char *, int);
706 int niscntrl(char *, int);
707 int nisdigit(char *, int);
708 int nisgraph(char *, int);
709 int nislower(char *, int);
710 int nisprint(char *, int);
711 int nispunct(char *, int);
712 int nisspace(char *, int);
713 int nisupper(char *, int);
714 int nisxdigi(char *, int);
715  
716 char *nxtalnum(char *);
717 char *nxtalpha(char *);
718 char *nxtcntrl(char *);
719 char *nxtdigit(char *);
720 char *nxtgraph(char *);
721 char *nxtlower(char *);
722 char *nxtprint(char *);
723 char *nxtpunct(char *);
724 char *nxtspace(char *);
725 char *nxtupper(char *);
726 char *nxtxdigi(char *);
727  
728 char *lstalnum(char *, int);
729 char *lstalpha(char *, int);
730 char *lstcntrl(char *, int);
731 char *lstdigit(char *, int);
732 char *lstgraph(char *, int);
733 char *lstlower(char *, int);
734 char *lstprint(char *, int);
735 char *lstpunct(char *, int);
736 char *lstspace(char *, int);
737 char *lstupper(char *, int);
738 char *lstxdigi(char *, int);
739  
740  
741 /*********************************************************************/
742 /*                                                                   */
743 /*  Enumeration type and declaration for code form identification    */
744 /*  function                                                         */
745 /*                                                                   */
746 /*********************************************************************/
747  
748  
749 typedef
750 enum codeform {AIREP, AMDAR, ARFOR, ARMET, BATHY, CLIMAT, CLIMAT_SHIP,
751                CLIMAT_TEMP, CLIMAT_TEMP_SHIP, CODAR, DRIFTER, FC,
752                HYFOR, IAC, IAC_FLEET, ICEAN, METAR, PILOT, PILOT_MOBILE,
753                PILOT_SHIP, RECCO, ROCOB, ROCOB_SHIP, ROFOR, SAO, PIREP,
754                SATEM, SATOB, SHIP, SPECI, SYNOP, TAF, TEMP, TEMP_DROP,
755                TEMP_MOBILE, TEMP_SHIP, TESAC, TRACKOB, WAVEOB,
756                UNKNOWN_FORM, TEMP_A, TEMP_B, TEMP_C, TEMP_D,
757                TEMP_DROP_A, TEMP_DROP_B, TEMP_DROP_C, TEMP_DROP_D,
758                TEMP_MOBILE_A, TEMP_MOBILE_B, TEMP_MOBILE_C,
759                TEMP_MOBILE_D, TEMP_SHIP_A, TEMP_SHIP_B, TEMP_SHIP_C,
760                TEMP_SHIP_D, PILOT_A, PILOT_B, PILOT_C, PILOT_D,
761                PILOT_MOBILE_A, PILOT_MOBILE_B, PILOT_MOBILE_C,
762                PILOT_MOBILE_D, PILOT_SHIP_A, PILOT_SHIP_B,
763                PILOT_SHIP_C, PILOT_SHIP_D }
764 CodeForm;
765  
766 CodeForm idcode(char *);
767  
768 char *codename(CodeForm);
769 CodeForm name2cf ( char * );
770  
771  
772  
773 /*********************************************************************/
774 /*                                                                   */
775 /*  String manipulation functions                                    */
776 /*                                                                   */
777 /*********************************************************************/
778  
779  
780 char *strnlf(char *, size_t);
781 char *strnmid(char *, size_t, size_t);
782 char *strnrt(char *, size_t);
783 char *strrstr(char *, char *);
784 char *strcentr(char *, size_t);
785 char *strdel(char *, char *, size_t);
786 char *strins(char *, char *, char *);
787 char *strljust(char * , size_t);
788 char *strltrim(char *, char *);
789 char *strmrplc(char *, char *, char *);
790 char *strocat(char *, char *);
791 char *strrpt(char *, char *, size_t);
792 char *strrjust(char *, size_t);
793 char *strrplc(char * , char *, char *);
794 char *strrtrim(char * , char *);
795 char *strtrim(char *, char *);
796 char *strvcat(char *, char *, ...);
797  
798  
799  
800 /*********************************************************************/
801 /*                                                                   */
802 /*  Bulletin Generator declarations                                  */
803 /*                                                                   */
804 /*********************************************************************/
805  
806 typedef bool (*ParseBltnFnPtr) ( char *bltn,
807                                  char **rptPtr,
808                                  char *bbbTypePtr,
809                                  char **prefixPtr,
810                                  short *YYPtr,
811                                  short *GGPtr,
812                                  char *bltnTypePtr,
813                                  char **headingPtr );
814  
815 void cbltngen ( ParseBltnFnPtr fnPtr,
816                 char *filename,
817                 Devaddr *historyDevice,
818                 Diskaddr *historyAddr,
819                 unsigned * bltnInCountPtr,
820                 unsigned * bltnOutCountPtr,
821                 unsigned * rptOutCountPtr );
822  
823 void tbltngen ( ParseBltnFnPtr fnPtr,
824                 char *filename,
825                 Devaddr *historyDevice,
826                 Diskaddr *historyAddr,
827                 unsigned * bltnInCountPtr,
828                 unsigned * bltnOutCountPtr,
829                 unsigned * rptOutCountPtr );
830  
831  
832 typedef bool (*ParseBltnFnPtrX) ( char *bltn,
833                                  char **rptPtr,
834                                  char *bbbTypePtr,
835                                  char **prefixPtr,
836                                  short *YYPtr,
837                                  short *GGPtr,
838                                  short *ggPtr,
839                                  char *bltnTypePtr,
840                                  char **headingPtr );
841  
842 void xbltngen ( ParseBltnFnPtrX fnPtr,
843                 char *filename,
844                 Devaddr *historyDevice,
845                 Diskaddr *historyAddr,
846                 unsigned * bltnInCountPtr,
847                 unsigned * bltnOutCountPtr,
848                 unsigned * rptOutCountPtr );
849  
850 void dbltngen ( ParseBltnFnPtrX fnPtr,
851                 char *filename,
852                 Devaddr *historyDevice,
853                 Diskaddr *historyAddr,
854                 unsigned * bltnInCountPtr,
855                 unsigned * bltnOutCountPtr,
856                 unsigned * rptOutCountPtr );
857  
858 typedef bool (*OParseBltnFnPtr) ( char *bltn,
859                                   char **rptPtr,
860                                   char *bbbTypePtr,
861                                   char **prefixPtr,
862                                   short *YYPtr,
863                                   short *GGPtr,
864                                   char *bltnTypePtr,
865                                   char **headingPtr,
866                                   char **ccccPtr );
867  
868 void obltngen ( OParseBltnFnPtr fnPtr,
869                 char *filename,
870                 Devaddr *historyDevice,
871                 Diskaddr *historyAddr,
872                 unsigned * bltnInCountPtr,
873                 unsigned * bltnOutCountPtr,
874                 unsigned * rptOutCountPtr );
875  
876  
877 void pbltngen ( OParseBltnFnPtr fnPtr,
878                 char *filename,
879                 Devaddr *historyDevice,
880                 Diskaddr *historyAddr,
881                 unsigned * bltnInCountPtr,
882                 unsigned * bltnOutCountPtr,
883                 unsigned * rptOutCountPtr );
884  
885  
886  
887 /*********************************************************************/
888 /*                                                                   */
889 /*  Typedefs and function prototypes for retrieving information from */
890 /*  switching directory.                                             */
891 /*                                                                   */
892 /*********************************************************************/
893  
894 typedef struct bltn_history{
895   Diskaddr bltn_disk_addr;
896   unsigned short bltn_start_offset;
897   unsigned short bltn_record_count;
898   unsigned short bltn_end_offset;
899   time_t bltn_time_recvd;
900 } BltnHistory;
901  
902 /*
903 typedef struct sw_dir_info_rec {
904   char wmo_header[11];
905   char AFOS_pil[10];
906   char multiple_line;
907   short int line_num;
908   short int recvd_line;
909   char flag1;
910   char flag2;
911   char flag3;
912   char class;
913   short int domestic_cat_num;
914   char afos_tmp;
915   char ccb[2];
916   char region_addr;
917   short int output_line_count;
918   unsigned short trans_line[128];
919   time_t change_date;
920   char dir_flags;
921   Diskaddr history_file_addr;
922   BltnHistory bltn_history[4];
923 } SwDirInfo;
924  
925 SwDirInfo *rtswdir(char *, int);
926 SwDirInfo *rtpswdir(void);
927 SwDirInfo *rtnswdir(void);
928  
929  */
930  
931  
932  
933 /*********************************************************************/
934 /*                                                                   */
935 /*  General local functions                                          */
936 /*                                                                   */
937 /*********************************************************************/
938  
939  
940 int itoc(int, char *, int);
941  
942 int antoi(char *, int);
943  
944 float antof(char *, int);
945  
946 void errmsg(char *, ...);
947  
948 void logmsg(char *, ...);
949  
950 void opermsg(char *, ...);
951  
952 int lmsg(const char *, const char *, ...);
953 int emsg(const char *, const char *, ...);
954 int omsg(const char *, const char *, ...);
955  
956 //#pragma linkage(ASCTOEB, OS)
957 void ASCTOEB(char *, int);
958  
959 //#pragma linkage(EAXLATE, OS)
960 void EAXLATE(char *, int);
961  
962 //#pragma linkage(PASCTOEB, OS)
963 void PASCTOEB(char *, int);
964  
965 char **bldhdarr(char *);
966  
967 void dalchdar(char **);
968  
969 //#pragma linkage(CCAPREAD, OS)
970 void *CCAPREAD(char *, int);
971  
972 //#pragma linkage(CCAPWRIT, OS)
973 void CCAPWRIT(char *, char *, int);
974  
975 //#pragma linkage(PPTOI, OS)
976 int PPTOI(char);
977  
978 char itopp(int);
979  
980 int diffmin(int, int, int, int, int, int);
981  
982 char incrseq(char);
983  
984 void nextdate(int *, int *, int *);
985  
986 void prevdate(int *, int *, int *);
987  
988 void rdstaddr(char *, char *);
989  
990 int wrenaddr(char *, char *);
991  
992 int vfydigit (char *, int);
993  
994 int readline(char * , int);
995  
996 int prevjul(int, int);
997  
998 int nextjul(int, int);
999  
1000 int fcomppos(fpos_t *, fpos_t *);
1001  
1002 void lfprint(char *);
1003  
1004 void flfprint(FILE *, char *);
1005  
1006 void slfprint(char *, int, char *);
1007  
1008 void flfnprnt(FILE *, char *, int);
1009  
1010 void slfnprnt(char *, int, char *, int);
1011  
1012 int strhash(char *);
1013  
1014 void reverse(char *);
1015  
1016 //bool itoa(int, char *, int);
1017  
1018 int getsnn(char * , int);
1019  
1020 int fgetsnn(char *, int, FILE *);
1021  
1022 int getreply(char *, char *, int);
1023  
1024 bool strfit(char *, char *, size_t);
1025  
1026 bool addrfrm3(char *, Diskaddr *);
1027  
1028 bool addrfrm5(char *, Diskaddr *);
1029  
1030 bool addrto3(Diskaddr *, char *);
1031  
1032 bool addrto5(Diskaddr *, char *);
1033  
1034 int addrcmp(Diskaddr *, Diskaddr *);
1035  
1036 void incraddr(Diskaddr *, Diskaddr *, Diskaddr *);
1037 void decraddr(Diskaddr *, Diskaddr *, Diskaddr *);
1038  
1039 //#pragma linkage(readrec, OS)
1040 char *readrec(Diskaddr *, Devaddr *, int, void *);
1041  
1042 //#pragma linkage(writerec, OS)
1043 int writerec(Diskaddr*, Devaddr *, int, void *);
1044  
1045 char prhold(char *, ...);
1046  
1047 void dump(char *, int);
1048  
1049 void fdump(FILE *, char *, int);
1050  
1051 void fwdump(FILE *, char *, int);
1052  
1053 //char toascii(char);
1054  
1055 char *strtoas(char *);
1056  
1057 char *strntoas(char *, int);
1058  
1059 char toebcdic(char);
1060  
1061 char *strtoeb(char *);
1062  
1063 char *strntoeb(char *, int);
1064  
1065 char *lfind(char *, char *, int, int, int(*)(char *, char *));
1066  
1067 char *lsearch(char *, char *, int *, int, int(*)(char *, char *));
1068  
1069 bool strcmpw(char *, char *);
1070  
1071 int strccnt(char *, int);
1072  
1073 int strnccnt(char *, int, size_t);
1074  
1075 int pprt(FILE *, char *, char *, char *, char *, ...);
1076  
1077 bool pprtbrk(FILE *, char *, char *, char *);
1078  
1079 bool pprtend(FILE *, char *);
1080  
1081 bool pprtinit(int, char, char *, char *, char *);
1082  
1083 char *monthnam(int, char);
1084  
1085 char *getrec(FILE *, int, char *);
1086  
1087 bool jtog(int, int, int *, int *, int *);
1088  
1089 bool gtoj(int, int, int, int *, int *);
1090  
1091 bool ccap2std(char *, Devaddr *, Diskaddr *);
1092  
1093 bool std2ccap(Devaddr *, Diskaddr *, char *);
1094  
1095 char *strupr(char *);
1096 char *strlwr(char *);
1097 //char *strdup(char *);
1098 //int strcmpi(char *, char *);
1099  
1100 //void *memccpy(void *, void *, int, unsigned);
1101  
1102 char *rptstrip(char *);
1103 char *rptfmt(char *);
1104 char *rptfmti(char *, unsigned short int);
1105  
1106 char *strnstr(char *, char *, size_t);
1107  
1108 int stregion(int);
1109 int ccregion(char *);
1110 char *rgnname(int);
1111  
1112 void *memrchr(const void *, int, size_t);
1113  
1114 bool sysmonms(char *, char *, ...);
1115 bool sysmoncl(char *);
1116  
1117 short prevndx ( short max, short min, short current );
1118 short nextndx ( short max, short min, short current );
1119  
1120 time_t extrym ( unsigned day, unsigned hour, unsigned minute );
1121 time_t extrymd ( unsigned hour, unsigned minute );
1122  
1123 int cmptimet ( time_t t1, time_t t2 );
1124  
1125 int tfprintf ( FILE *, const char *, ... );
1126  
1127 bool purgelog ( char *filename, unsigned short delete_age );
1128  
1129 time_t odbtime ( void );
1130  
1131 int bltnpcnt ( char *, int );
1132 void bltnpage ( char *, int, int );
1133  
1134 void rot( char *, unsigned int );
1135 void unrot( char *, unsigned int );
1136  
1137 void encrypt( char *, char * );
1138 void decrypt( char *, char * );
1139  
1140 int HEXTOI( char *, int );
1141  
1142 char **hdgxref( char * );
1143  
1144 struct tm *zonetime( unsigned short, unsigned short, char );
1145  
1146 int wordcnt( char * );
1147 int wordcntn( char *, unsigned int );
1148  
1149 char *word( char *, unsigned int );
1150 char *wordn( char *, unsigned int, unsigned int );
1151  
1152 char *crlfstrp( char * );
1153  
1154 bool charcmp( char *, char * );
1155  
1156 int linecnt( char * );
1157 int linecntn( char *, unsigned int );
1158  
1159 char *bltline( char *, unsigned int );
1160 char *bltlinen( char *, unsigned int, unsigned int );
1161  
1162 char *pttoline( char *, unsigned int );
1163 char *pttoword( char *, unsigned int );
1164  
1165 char *moblrgn(unsigned short,
1166               unsigned short,
1167               unsigned short );
1168  
1169 char *nxtgroup( char * );
1170  
1171 #endif