1178 lines
31 KiB
C
1178 lines
31 KiB
C
/*********************************************************************/
|
|
/* */
|
|
/* Title: local h */
|
|
/* Updated: 3 June 1996 */
|
|
/* Organization: W/OSO242 - Graphics and Display Section */
|
|
/* Language: C/370 */
|
|
/* */
|
|
/* Abstract: */
|
|
/* This header file provides all function definitions necessary for */
|
|
/* the OSO242 C function library. */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
#ifndef locallib_defined
|
|
#define locallib_defined
|
|
|
|
|
|
|
|
/*****************/
|
|
/* Include Files */
|
|
/*****************/
|
|
|
|
#include <assert.h>
|
|
#include <ctype.h>
|
|
#include <errno.h>
|
|
#include <float.h>
|
|
#include <limits.h>
|
|
#include <locale.h>
|
|
#include <math.h>
|
|
#include <setjmp.h>
|
|
#include <signal.h>
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
|
|
|
|
/********************/
|
|
/* Standard Defines */
|
|
/********************/
|
|
|
|
#define FALSE 0 /* boolean value */
|
|
#define MAXINT INT_MAX /* maximum integer */
|
|
#define MININT INT_MIN /* minimum integer */
|
|
#define MAXNEG INT_MIN /* minimum integer */
|
|
#define NO FALSE /* boolean value */
|
|
#define TRUE 1 /* boolean value */
|
|
#define TRUNCATED -1 /* indicates truncation */
|
|
#define YES TRUE /* boolean value */
|
|
|
|
|
|
/*****************/
|
|
/* Macro defines */
|
|
/*****************/
|
|
|
|
#define ABS(x) (((x) < 0) ? -(x) : (x))
|
|
#define clearscrn system("CLRSCRN")
|
|
#define assgndev(d, v) v = 0x##d
|
|
#define DIM(a) (sizeof(a) / sizeof(a[0]))
|
|
#define FOREVER for(;;) /* endless loop */
|
|
#define getln(s, n) ((fgets(s, n, stdin)==NULL) ? EOF : strlen(s))
|
|
#define IMOD(i, j) (((i) % (j)) < 0 ? ((i) % (j))+(j) : ((i) % (j)))
|
|
#define IN_RANGE(n, lo, hi) ((lo) <= (n) && (n) <= (hi))
|
|
#define LOOPDN(r, n) for ((r) = (n)+1; --(r) > 0;)
|
|
#ifndef MAX
|
|
# define MAX(x, y) (((x) < (y)) ? (y) : (x))
|
|
#endif
|
|
#ifndef max
|
|
# define max(x, y) (((x) < (y)) ? (y) : (x))
|
|
#endif
|
|
#ifndef MIN
|
|
# define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
|
#endif
|
|
#ifndef min
|
|
# define min(x, y) (((x) < (y)) ? (x) : (y))
|
|
#endif
|
|
#define STREQ(s, t) (strcmp(s, t) == 0)
|
|
#define STRGT(s, t) (strcmp(s, t) > 0)
|
|
#define STRLT(s, t) (strcmp(s, t) < 0)
|
|
#define STRNEQ(s, t, l) (strncmp(s, t, l) == 0)
|
|
#define STRNGT(s, t, l) (strncmp(s, t, l) > 0)
|
|
#define STRNLT(s, t, l) (strncmp(s, t, l) < 0)
|
|
#define SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t))
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Memory allocation debugging routines */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
#ifdef MEMDEBUG
|
|
|
|
void *mallocx(size_t, char *, int);
|
|
void *callocx(size_t, size_t, char *, int);
|
|
void *reallocx(void *, size_t, char *, int);
|
|
void freex(void *, char *, int);
|
|
|
|
#define malloct(x) mallocx((x), __FILE__, __LINE__)
|
|
#define calloct(x, y) callocx((x), (y), __FILE__, __LINE__)
|
|
#define realloct(x, y) reallocx((x), (y), __FILE__, __LINE__)
|
|
#define freet(x) freex((x), __FILE__, __LINE__)
|
|
|
|
#define malloc malloct
|
|
#define calloc calloct
|
|
#define realloc realloct
|
|
#define free freet
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* General typedefs */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef unsigned char byte;
|
|
|
|
#ifndef __cplusplus
|
|
typedef unsigned short int bool;
|
|
#endif
|
|
|
|
typedef unsigned short int Devaddr;
|
|
|
|
typedef struct diskaddr {
|
|
int cylinder;
|
|
int track;
|
|
int record;
|
|
} Diskaddr;
|
|
|
|
|
|
typedef struct record_id {
|
|
|
|
char id[8];
|
|
time_t write_timestamp;
|
|
|
|
} Record_ID;
|
|
|
|
|
|
typedef struct location {
|
|
|
|
union {
|
|
unsigned bsn;
|
|
char cs[9];
|
|
unsigned short msn;
|
|
} loc;
|
|
|
|
unsigned location_is_bsn:1,
|
|
location_is_cs:1,
|
|
location_is_msn:1;
|
|
|
|
} Location;
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/*********************************************************************/
|
|
/* */
|
|
/* */
|
|
/* Functions specific defines, typedefs, and structures */
|
|
/* */
|
|
/* */
|
|
/*********************************************************************/
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* bldstree - Build station information tree */
|
|
/* delstree - Delete station information tree */
|
|
/* getstinf - Get station information from tree */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct stn_info_node {
|
|
int key;
|
|
int block;
|
|
int station;
|
|
int latitude;
|
|
int longitude;
|
|
int elev;
|
|
struct stn_info_node * right;
|
|
struct stn_info_node * left;
|
|
} Stninfo;
|
|
|
|
struct stn_info_node *bldstree(void);
|
|
void delstree(struct stn_info_node *);
|
|
struct stn_info_node *getstinf(struct stn_info_node *,
|
|
int,
|
|
int);
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* capqread - Read bulletins from CAPQ chain */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct CAPQ_data {
|
|
char * bulletin;
|
|
int bulletin_length;
|
|
char * WMO_heading;
|
|
char * AFOS_pil;
|
|
char * current_CAPQ_end_address;
|
|
int start_offset;
|
|
int record_count;
|
|
int end_offset;
|
|
char * bulletin_address;
|
|
int input_line;
|
|
int receive_line;
|
|
int receive_hour;
|
|
int receive_minute;
|
|
int CAPQ_day;
|
|
int CAPQ_hour;
|
|
int CAPQ_minute;
|
|
int rc;
|
|
char flag1;
|
|
char flag2;
|
|
} CAPQdata;
|
|
|
|
struct CAPQ_data * capqread (char *, ...);
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* mdadread - Read bulletins from MDAD chain */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct MDAD_data {
|
|
char * bulletin;
|
|
int bulletin_length;
|
|
char * WMO_heading;
|
|
char * AFOS_pil;
|
|
char * current_MDAD_end_address;
|
|
int start_offset;
|
|
int record_count;
|
|
int end_offset;
|
|
char * bulletin_address;
|
|
int input_line;
|
|
int receive_line;
|
|
int receive_hour;
|
|
int receive_minute;
|
|
int MDAD_year;
|
|
int MDAD_month;
|
|
int MDAD_day;
|
|
int MDAD_hour;
|
|
int MDAD_minute;
|
|
int rc;
|
|
int part_number;
|
|
int number_of_parts;
|
|
char MDAD_flag;
|
|
char flag1;
|
|
char flag2;
|
|
char flag3;
|
|
char MDAD_flag2;
|
|
} MDADdata;
|
|
|
|
MDADdata * mdadread (char *, ...);
|
|
|
|
MDADdata * mdadscan (char *, ...);
|
|
|
|
void mdadinpt ( MDADdata *, char, bool );
|
|
|
|
char * mdadnxtr ( void );
|
|
char * mdadnxtk ( void );
|
|
|
|
|
|
#define MDAD_HISTORY_LIMIT 39
|
|
|
|
typedef
|
|
struct MDAD_history_entry
|
|
{
|
|
unsigned short hour;
|
|
unsigned short minute;
|
|
Diskaddr MDAD_chain_addr;
|
|
}
|
|
MDAD_History_Entry;
|
|
|
|
typedef
|
|
struct MDAD_history
|
|
{
|
|
MDAD_History_Entry history_array[MDAD_HISTORY_LIMIT];
|
|
}
|
|
MDAD_History;
|
|
|
|
MDAD_History *mdadhist ( void );
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* gethdgi - Get bulletin heading information */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct bltn_heading_info {
|
|
int bltn_day;
|
|
int bltn_hour;
|
|
int bltn_min;
|
|
int rtd_present;
|
|
int cor_present;
|
|
int amd_present;
|
|
char * first_report;
|
|
// char TTAAii??(7??);
|
|
// char CCCC??(5??);
|
|
char amd_seq;
|
|
char cor_seq;
|
|
char rtd_seq;
|
|
} Abbrevhdg;
|
|
|
|
Abbrevhdg *gethdgi(char * );
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* getime - Get current system time */
|
|
/* suspend - Delay execution until specified minute boundary */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
typedef struct tm_struct{
|
|
int hour;
|
|
int min;
|
|
} Stime;
|
|
|
|
Stime *gettime(void);
|
|
int suspend(Stime *, int);
|
|
int timediff(Stime *, Stime *);
|
|
#define timecmp timediff
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype and structure(s) used in - */
|
|
/* */
|
|
/* rdtaend - Specify rdtaread Ending Address */
|
|
/* rdtaread - Read From RGTR Data Tank */
|
|
/* rdtastrt - Specify rdtaread Starting Address */
|
|
/* rdtatend - Specify rdtaread End Time */
|
|
/* rdtatnke - Specify rdtaread Ending Address */
|
|
/* rdtarstr - Specify rdtaread Start Time */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct rgtrdata {
|
|
Diskaddr forward_chain;
|
|
Diskaddr bulletin_addr;
|
|
int receive_line;
|
|
int receive_day;
|
|
Stime receive_time;
|
|
Stime RGTR_time;
|
|
int length;
|
|
char *bulletin;
|
|
char datatype;
|
|
} RGTRdata;
|
|
|
|
int rdtaend(char, Diskaddr *);
|
|
int rdtaread(RGTRdata *);
|
|
int rdtastrt(char, Diskaddr *);
|
|
int rdtatend (char, Stime *);
|
|
int rdtatnke(char);
|
|
int rdtatstr(char, Stime *);
|
|
void rdtainit(void);
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Typedefs and function prototypes for bulletin and report parsing */
|
|
/* functions. */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
typedef struct rptNode {
|
|
char *rptPtr;
|
|
int rptLength;
|
|
struct rptNode* next;
|
|
} RptNode;
|
|
|
|
|
|
typedef struct synpBltn {
|
|
Abbrevhdg heading;
|
|
short int day;
|
|
short int hour;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} SynpBltn;
|
|
|
|
|
|
typedef struct shipBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} ShipBltn;
|
|
|
|
|
|
typedef struct tepiBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} TePiBltn;
|
|
|
|
|
|
typedef struct drftBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} DrftBltn;
|
|
|
|
|
|
typedef struct airpBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} AirpBltn;
|
|
|
|
|
|
typedef struct amdrBltn {
|
|
Abbrevhdg heading;
|
|
short int day;
|
|
short int hour;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} AmdrBltn;
|
|
|
|
|
|
typedef struct bthyBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} BthyBltn;
|
|
|
|
|
|
typedef struct tescBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} TescBltn;
|
|
|
|
|
|
typedef struct tracBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} TracBltn;
|
|
|
|
|
|
typedef struct climBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
int month;
|
|
int year;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} ClimBltn;
|
|
|
|
|
|
typedef struct clmtBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
int month;
|
|
int year;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} ClmtBltn;
|
|
|
|
|
|
typedef struct metBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
short int day; /* -1 indicates missing/invalid */
|
|
short int hour; /* -1 indicates missing/invalid */
|
|
short int min; /* -1 indicates missing/invalid */
|
|
} MetBltn;
|
|
|
|
|
|
typedef struct saoBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} SAOBltn;
|
|
|
|
|
|
typedef struct prBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} PRBltn;
|
|
|
|
|
|
typedef struct tafBltn {
|
|
Abbrevhdg heading;
|
|
int reportCount;
|
|
RptNode *rptList;
|
|
bool valid;
|
|
} TafBltn;
|
|
|
|
|
|
typedef struct metrRptP {
|
|
char locind[4];
|
|
int groupCount;
|
|
short int day; /* -1 indicates missing or invalid */
|
|
short int hour; /* -1 indicates missing or invalid */
|
|
short int min; /* -1 indicates missing or invalid */
|
|
bool valid;
|
|
} MetrRptP;
|
|
|
|
|
|
typedef struct saoRptP {
|
|
char locind[4];
|
|
int groupCount;
|
|
short int hour; /* -1 indicates missing or invalid */
|
|
short int min; /* -1 indicates missing or invalid */
|
|
bool valid;
|
|
} SAORptP;
|
|
|
|
|
|
typedef struct prRptP {
|
|
char locind[4];
|
|
int groupCount;
|
|
short int hour; /* -1 indicates missing or invalid */
|
|
short int min; /* -1 indicates missing or invalid */
|
|
bool valid;
|
|
} PRRptP;
|
|
|
|
|
|
typedef struct tafRptP {
|
|
char locind[4];
|
|
int groupCount;
|
|
short int YY;
|
|
short int GG;
|
|
short int validPeriod;
|
|
bool ammendment;
|
|
bool correction;
|
|
bool valid;
|
|
} TafRptP;
|
|
|
|
|
|
typedef struct synpRptP {
|
|
short int II;
|
|
short int iii;
|
|
int groupCount;
|
|
bool valid;
|
|
} SynpRptP;
|
|
|
|
|
|
typedef struct climRptP {
|
|
short int II;
|
|
short int iii;
|
|
int groupCount;
|
|
bool valid;
|
|
} ClimRptP;
|
|
|
|
|
|
typedef struct clmtRptP {
|
|
short int II;
|
|
short int iii;
|
|
int groupCount;
|
|
bool valid;
|
|
} ClmtRptP;
|
|
|
|
|
|
typedef struct tepiRptP {
|
|
short int II;
|
|
short int iii;
|
|
short int YY;
|
|
short int GG;
|
|
short int quad;
|
|
short int ulatitude;
|
|
short int ulongitude;
|
|
int msquare;
|
|
int latitude;
|
|
int longitude;
|
|
int groupCount;
|
|
char callsign[15];
|
|
char type;
|
|
char part;
|
|
bool valid;
|
|
} TePiRptP;
|
|
|
|
|
|
SynpBltn *pbsynp(char *);
|
|
ShipBltn *pbship(char *);
|
|
TePiBltn *pbtepi(char *);
|
|
DrftBltn *pbdrft(char *);
|
|
AirpBltn *pbairp(char *);
|
|
AmdrBltn *pbamdr(char *);
|
|
BthyBltn *pbbthy(char *);
|
|
TescBltn *pbtesc(char *);
|
|
TracBltn *pbtrac(char *);
|
|
ClimBltn *pbclim(char *);
|
|
ClmtBltn *pbclmt(char *);
|
|
MetBltn *pbmetr(char *);
|
|
MetBltn *pbspec(char *);
|
|
TafBltn *pbtaf(char *);
|
|
SAOBltn *pbsao(char *);
|
|
PRBltn *pbpirep(char *);
|
|
|
|
SynpRptP *prpsynp(char *, int);
|
|
TePiRptP *prptepi(char *, int);
|
|
ClimRptP *prpclim(char *, int);
|
|
ClmtRptP *prpclmt(char *, int);
|
|
MetrRptP *prpmetr(char *, int);
|
|
TafRptP *prptaf(char *, int);
|
|
SAORptP *prpsao(char *, int);
|
|
PRRptP *prppirep(char *, int);
|
|
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Structures and Function Prototypes for RRN physical I/O */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
typedef struct RRN_device {
|
|
|
|
char name[44],
|
|
ownerid[8];
|
|
|
|
unsigned short dev_addr,
|
|
base_cylinder,
|
|
base_track,
|
|
base_record,
|
|
max_cylinder,
|
|
max_track,
|
|
max_record,
|
|
records_per_track,
|
|
tracks_per_cylinder,
|
|
record_length;
|
|
|
|
} RRN_Device;
|
|
|
|
|
|
bool readrrn(char *device_name,
|
|
unsigned int rrn,
|
|
void *input_buffer,
|
|
unsigned int read_count);
|
|
|
|
bool writerrn(char *device_name,
|
|
unsigned int rrn,
|
|
void *output_buffer,
|
|
unsigned int write_count);
|
|
|
|
RRN_Device *devinfo(char *device_name);
|
|
|
|
bool valid_dn(char *device_name);
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Function prototype for string value test functions. */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
int sisalnum(char *);
|
|
int sisalpha(char *);
|
|
int siscntrl(char *);
|
|
int sisdigit(char *);
|
|
int sisgraph(char *);
|
|
int sislower(char *);
|
|
int sisprint(char *);
|
|
int sispunct(char *);
|
|
int sisspace(char *);
|
|
int sisupper(char *);
|
|
int sisxdigi(char *);
|
|
|
|
int nisalnum(char *, int);
|
|
int nisalpha(char *, int);
|
|
int niscntrl(char *, int);
|
|
int nisdigit(char *, int);
|
|
int nisgraph(char *, int);
|
|
int nislower(char *, int);
|
|
int nisprint(char *, int);
|
|
int nispunct(char *, int);
|
|
int nisspace(char *, int);
|
|
int nisupper(char *, int);
|
|
int nisxdigi(char *, int);
|
|
|
|
char *nxtalnum(char *);
|
|
char *nxtalpha(char *);
|
|
char *nxtcntrl(char *);
|
|
char *nxtdigit(char *);
|
|
char *nxtgraph(char *);
|
|
char *nxtlower(char *);
|
|
char *nxtprint(char *);
|
|
char *nxtpunct(char *);
|
|
char *nxtspace(char *);
|
|
char *nxtupper(char *);
|
|
char *nxtxdigi(char *);
|
|
|
|
char *lstalnum(char *, int);
|
|
char *lstalpha(char *, int);
|
|
char *lstcntrl(char *, int);
|
|
char *lstdigit(char *, int);
|
|
char *lstgraph(char *, int);
|
|
char *lstlower(char *, int);
|
|
char *lstprint(char *, int);
|
|
char *lstpunct(char *, int);
|
|
char *lstspace(char *, int);
|
|
char *lstupper(char *, int);
|
|
char *lstxdigi(char *, int);
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Enumeration type and declaration for code form identification */
|
|
/* function */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
typedef
|
|
enum codeform {AIREP, AMDAR, ARFOR, ARMET, BATHY, CLIMAT, CLIMAT_SHIP,
|
|
CLIMAT_TEMP, CLIMAT_TEMP_SHIP, CODAR, DRIFTER, FC,
|
|
HYFOR, IAC, IAC_FLEET, ICEAN, METAR, PILOT, PILOT_MOBILE,
|
|
PILOT_SHIP, RECCO, ROCOB, ROCOB_SHIP, ROFOR, SAO, PIREP,
|
|
SATEM, SATOB, SHIP, SPECI, SYNOP, TAF, TEMP, TEMP_DROP,
|
|
TEMP_MOBILE, TEMP_SHIP, TESAC, TRACKOB, WAVEOB,
|
|
UNKNOWN_FORM, TEMP_A, TEMP_B, TEMP_C, TEMP_D,
|
|
TEMP_DROP_A, TEMP_DROP_B, TEMP_DROP_C, TEMP_DROP_D,
|
|
TEMP_MOBILE_A, TEMP_MOBILE_B, TEMP_MOBILE_C,
|
|
TEMP_MOBILE_D, TEMP_SHIP_A, TEMP_SHIP_B, TEMP_SHIP_C,
|
|
TEMP_SHIP_D, PILOT_A, PILOT_B, PILOT_C, PILOT_D,
|
|
PILOT_MOBILE_A, PILOT_MOBILE_B, PILOT_MOBILE_C,
|
|
PILOT_MOBILE_D, PILOT_SHIP_A, PILOT_SHIP_B,
|
|
PILOT_SHIP_C, PILOT_SHIP_D }
|
|
CodeForm;
|
|
|
|
CodeForm idcode(char *);
|
|
|
|
char *codename(CodeForm);
|
|
CodeForm name2cf ( char * );
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* String manipulation functions */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
char *strnlf(char *, size_t);
|
|
char *strnmid(char *, size_t, size_t);
|
|
char *strnrt(char *, size_t);
|
|
char *strrstr(char *, char *);
|
|
char *strcentr(char *, size_t);
|
|
char *strdel(char *, char *, size_t);
|
|
char *strins(char *, char *, char *);
|
|
char *strljust(char * , size_t);
|
|
char *strltrim(char *, char *);
|
|
char *strmrplc(char *, char *, char *);
|
|
char *strocat(char *, char *);
|
|
char *strrpt(char *, char *, size_t);
|
|
char *strrjust(char *, size_t);
|
|
char *strrplc(char * , char *, char *);
|
|
char *strrtrim(char * , char *);
|
|
char *strtrim(char *, char *);
|
|
char *strvcat(char *, char *, ...);
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Bulletin Generator declarations */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef bool (*ParseBltnFnPtr) ( char *bltn,
|
|
char **rptPtr,
|
|
char *bbbTypePtr,
|
|
char **prefixPtr,
|
|
short *YYPtr,
|
|
short *GGPtr,
|
|
char *bltnTypePtr,
|
|
char **headingPtr );
|
|
|
|
void cbltngen ( ParseBltnFnPtr fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
void tbltngen ( ParseBltnFnPtr fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
|
|
typedef bool (*ParseBltnFnPtrX) ( char *bltn,
|
|
char **rptPtr,
|
|
char *bbbTypePtr,
|
|
char **prefixPtr,
|
|
short *YYPtr,
|
|
short *GGPtr,
|
|
short *ggPtr,
|
|
char *bltnTypePtr,
|
|
char **headingPtr );
|
|
|
|
void xbltngen ( ParseBltnFnPtrX fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
void dbltngen ( ParseBltnFnPtrX fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
typedef bool (*OParseBltnFnPtr) ( char *bltn,
|
|
char **rptPtr,
|
|
char *bbbTypePtr,
|
|
char **prefixPtr,
|
|
short *YYPtr,
|
|
short *GGPtr,
|
|
char *bltnTypePtr,
|
|
char **headingPtr,
|
|
char **ccccPtr );
|
|
|
|
void obltngen ( OParseBltnFnPtr fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
|
|
void pbltngen ( OParseBltnFnPtr fnPtr,
|
|
char *filename,
|
|
Devaddr *historyDevice,
|
|
Diskaddr *historyAddr,
|
|
unsigned * bltnInCountPtr,
|
|
unsigned * bltnOutCountPtr,
|
|
unsigned * rptOutCountPtr );
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* Typedefs and function prototypes for retrieving information from */
|
|
/* switching directory. */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
typedef struct bltn_history{
|
|
Diskaddr bltn_disk_addr;
|
|
unsigned short bltn_start_offset;
|
|
unsigned short bltn_record_count;
|
|
unsigned short bltn_end_offset;
|
|
time_t bltn_time_recvd;
|
|
} BltnHistory;
|
|
|
|
/*
|
|
typedef struct sw_dir_info_rec {
|
|
char wmo_header[11];
|
|
char AFOS_pil[10];
|
|
char multiple_line;
|
|
short int line_num;
|
|
short int recvd_line;
|
|
char flag1;
|
|
char flag2;
|
|
char flag3;
|
|
char class;
|
|
short int domestic_cat_num;
|
|
char afos_tmp;
|
|
char ccb[2];
|
|
char region_addr;
|
|
short int output_line_count;
|
|
unsigned short trans_line[128];
|
|
time_t change_date;
|
|
char dir_flags;
|
|
Diskaddr history_file_addr;
|
|
BltnHistory bltn_history[4];
|
|
} SwDirInfo;
|
|
|
|
SwDirInfo *rtswdir(char *, int);
|
|
SwDirInfo *rtpswdir(void);
|
|
SwDirInfo *rtnswdir(void);
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* General local functions */
|
|
/* */
|
|
/*********************************************************************/
|
|
|
|
|
|
int itoc(int, char *, int);
|
|
|
|
int antoi(char *, int);
|
|
|
|
float antof(char *, int);
|
|
|
|
void errmsg(char *, ...);
|
|
|
|
void logmsg(char *, ...);
|
|
|
|
void opermsg(char *, ...);
|
|
|
|
int lmsg(const char *, const char *, ...);
|
|
int emsg(const char *, const char *, ...);
|
|
int omsg(const char *, const char *, ...);
|
|
|
|
//#pragma linkage(ASCTOEB, OS)
|
|
void ASCTOEB(char *, int);
|
|
|
|
//#pragma linkage(EAXLATE, OS)
|
|
void EAXLATE(char *, int);
|
|
|
|
//#pragma linkage(PASCTOEB, OS)
|
|
void PASCTOEB(char *, int);
|
|
|
|
char **bldhdarr(char *);
|
|
|
|
void dalchdar(char **);
|
|
|
|
//#pragma linkage(CCAPREAD, OS)
|
|
void *CCAPREAD(char *, int);
|
|
|
|
//#pragma linkage(CCAPWRIT, OS)
|
|
void CCAPWRIT(char *, char *, int);
|
|
|
|
//#pragma linkage(PPTOI, OS)
|
|
int PPTOI(char);
|
|
|
|
char itopp(int);
|
|
|
|
int diffmin(int, int, int, int, int, int);
|
|
|
|
char incrseq(char);
|
|
|
|
void nextdate(int *, int *, int *);
|
|
|
|
void prevdate(int *, int *, int *);
|
|
|
|
void rdstaddr(char *, char *);
|
|
|
|
int wrenaddr(char *, char *);
|
|
|
|
int vfydigit (char *, int);
|
|
|
|
int readline(char * , int);
|
|
|
|
int prevjul(int, int);
|
|
|
|
int nextjul(int, int);
|
|
|
|
int fcomppos(fpos_t *, fpos_t *);
|
|
|
|
void lfprint(char *);
|
|
|
|
void flfprint(FILE *, char *);
|
|
|
|
void slfprint(char *, int, char *);
|
|
|
|
void flfnprnt(FILE *, char *, int);
|
|
|
|
void slfnprnt(char *, int, char *, int);
|
|
|
|
int strhash(char *);
|
|
|
|
void reverse(char *);
|
|
|
|
//bool itoa(int, char *, int);
|
|
|
|
int getsnn(char * , int);
|
|
|
|
int fgetsnn(char *, int, FILE *);
|
|
|
|
int getreply(char *, char *, int);
|
|
|
|
bool strfit(char *, char *, size_t);
|
|
|
|
bool addrfrm3(char *, Diskaddr *);
|
|
|
|
bool addrfrm5(char *, Diskaddr *);
|
|
|
|
bool addrto3(Diskaddr *, char *);
|
|
|
|
bool addrto5(Diskaddr *, char *);
|
|
|
|
int addrcmp(Diskaddr *, Diskaddr *);
|
|
|
|
void incraddr(Diskaddr *, Diskaddr *, Diskaddr *);
|
|
void decraddr(Diskaddr *, Diskaddr *, Diskaddr *);
|
|
|
|
//#pragma linkage(readrec, OS)
|
|
char *readrec(Diskaddr *, Devaddr *, int, void *);
|
|
|
|
//#pragma linkage(writerec, OS)
|
|
int writerec(Diskaddr*, Devaddr *, int, void *);
|
|
|
|
char prhold(char *, ...);
|
|
|
|
void dump(char *, int);
|
|
|
|
void fdump(FILE *, char *, int);
|
|
|
|
void fwdump(FILE *, char *, int);
|
|
|
|
//char toascii(char);
|
|
|
|
char *strtoas(char *);
|
|
|
|
char *strntoas(char *, int);
|
|
|
|
char toebcdic(char);
|
|
|
|
char *strtoeb(char *);
|
|
|
|
char *strntoeb(char *, int);
|
|
|
|
char *lfind(char *, char *, int, int, int(*)(char *, char *));
|
|
|
|
char *lsearch(char *, char *, int *, int, int(*)(char *, char *));
|
|
|
|
bool strcmpw(char *, char *);
|
|
|
|
int strccnt(char *, int);
|
|
|
|
int strnccnt(char *, int, size_t);
|
|
|
|
int pprt(FILE *, char *, char *, char *, char *, ...);
|
|
|
|
bool pprtbrk(FILE *, char *, char *, char *);
|
|
|
|
bool pprtend(FILE *, char *);
|
|
|
|
bool pprtinit(int, char, char *, char *, char *);
|
|
|
|
char *monthnam(int, char);
|
|
|
|
char *getrec(FILE *, int, char *);
|
|
|
|
bool jtog(int, int, int *, int *, int *);
|
|
|
|
bool gtoj(int, int, int, int *, int *);
|
|
|
|
bool ccap2std(char *, Devaddr *, Diskaddr *);
|
|
|
|
bool std2ccap(Devaddr *, Diskaddr *, char *);
|
|
|
|
char *strupr(char *);
|
|
char *strlwr(char *);
|
|
//char *strdup(char *);
|
|
//int strcmpi(char *, char *);
|
|
|
|
//void *memccpy(void *, void *, int, unsigned);
|
|
|
|
char *rptstrip(char *);
|
|
char *rptfmt(char *);
|
|
char *rptfmti(char *, unsigned short int);
|
|
|
|
#ifndef __FreeBSD__ // strnstr is already defined on FreeBSD
|
|
char *strnstr(char *, char *, size_t);
|
|
#endif
|
|
|
|
int stregion(int);
|
|
int ccregion(char *);
|
|
char *rgnname(int);
|
|
|
|
void *memrchr(const void *, int, size_t);
|
|
|
|
bool sysmonms(char *, char *, ...);
|
|
bool sysmoncl(char *);
|
|
|
|
short prevndx ( short max, short min, short current );
|
|
short nextndx ( short max, short min, short current );
|
|
|
|
time_t extrym ( unsigned day, unsigned hour, unsigned minute );
|
|
time_t extrymd ( unsigned hour, unsigned minute );
|
|
|
|
int cmptimet ( time_t t1, time_t t2 );
|
|
|
|
int tfprintf ( FILE *, const char *, ... );
|
|
|
|
bool purgelog ( char *filename, unsigned short delete_age );
|
|
|
|
time_t odbtime ( void );
|
|
|
|
int bltnpcnt ( char *, int );
|
|
void bltnpage ( char *, int, int );
|
|
|
|
void rot( char *, unsigned int );
|
|
void unrot( char *, unsigned int );
|
|
|
|
void encrypt( char *, char * );
|
|
void decrypt( char *, char * );
|
|
|
|
int HEXTOI( char *, int );
|
|
|
|
char **hdgxref( char * );
|
|
|
|
struct tm *zonetime( unsigned short, unsigned short, char );
|
|
|
|
int wordcnt( char * );
|
|
int wordcntn( char *, unsigned int );
|
|
|
|
char *word( char *, unsigned int );
|
|
char *wordn( char *, unsigned int, unsigned int );
|
|
|
|
char *crlfstrp( char * );
|
|
|
|
bool charcmp( char *, char * );
|
|
|
|
int linecnt( char * );
|
|
int linecntn( char *, unsigned int );
|
|
|
|
char *bltline( char *, unsigned int );
|
|
char *bltlinen( char *, unsigned int, unsigned int );
|
|
|
|
char *pttoline( char *, unsigned int );
|
|
char *pttoword( char *, unsigned int );
|
|
|
|
char *moblrgn(unsigned short,
|
|
unsigned short,
|
|
unsigned short );
|
|
|
|
char *nxtgroup( char * );
|
|
|
|
#endif
|