/*-------------------------------------------------------------------+
| |
| Copyright (c) 1996, SAS Institute Inc. |
| Unpublished - All Rights Reserved |
| S A S / C S A M P L E |
| Name: UPDBLDH |
| Language: C |
| Purpose: Library includes, function prototypes for static |
| functions, various defines, structure mapping for |
| SYNAD exit and abend exit functions. |
| |
| For Sample: prefix.SAMPLE.C(UPDBLD) |
| |
+-------------------------------------------------------------------*/
#ifndef __UPDBLDH__
#define __UPDBLDH__
#include <lclib.h>
#include <stdio.h>
#include <stdlib.h>
#include <osio.h>
#include <os.h>
#include <string.h>
#undef DEBUG /* Ensure we can use assert() */
#include <assert.h>
#include "p2upnode.h"
#include "p2upmh.h"
#define NOT_A_DATASET 74
#define MEM_FOUND 0 /* Same as os find macro */
#define LIST_END 24 /* End of skiplist */
#define CONTINUE_LOOP 48
#define OSXXX_SUCCESS 0 /* Successful completion from osget() */
/* or osput() */
#define SOURCE_DS_EMPTY "NOTE=> SOURCE DS EMPTY"
#define ALIAS_REAL "Source: ALIAS AS REAL"
#define REAL_MEMBER "Source: REAL MEMBER "
#define OSGET_EOF -1 /* End-of-file return from osget() */
#define LRECL 80
#define YES 1
#define NO 0
/*------------------------------------------------------------------+
| Structure with the layout of information passed to a SAS/C SYNAD |
| exit routine in R1. It comes from the SYNADF macro issued by |
| by the SAS/C library when a SYNAD exit is called. |
| |
| Note: structure members with names 'unused_x' have actual data, |
| however it is not used by this program. |
| |
| See SYNADAF macro in 'MVS Macro Instructions for Data Sets' |
| for details on the information returned. |
| |
+------------------------------------------------------------------*/
struct SYNAD_INFO
{
short synadaf_msg_len; /* Length : Standard message (LL) */
short unused_1; /* bb */
short rec_len_std; /* ll */
short unused_2; /* bb */
long buf_address; /* input buffer address */
short num_bytes_read;
char msg1[114]; /* Message: Standard */
long parm2;
long parm1;
short pdse_msg_len; /* Length : PDSE message (LL) */
short unused_3; /* bb */
short rec_len_pdse; /* ll*/
short unused_4; /* bb */
char unused_5; /* ',' */
char msg2[120]; /* Message: PDSE */
};
/*------------------------------------------------------------------+
| Structure with the layout of information passed to a SAS/C DCB |
| abend exit routine in R1. Consult the Data Adminstration Guide |
| and Macro Reference for additional information. |
+------------------------------------------------------------------*/
struct ABEND_INFO
{
unsigned abend_code: 12;
unsigned :4;
unsigned char return_code;
union {
struct
{
unsigned : 4;
unsigned recover: 1;
unsigned ignore : 1;
unsigned delay : 1;
unsigned : 1;
} ok_to;
char action;
};
DCB_t * dcbp;
void * O_C_EOV_workarea;
void * recovery_work_area;
};
/*------------------------------------------------------------------+
| Prototype: Internal functions used by updbld functioin. |
+------------------------------------------------------------------*/
static int updio ( DCB_t *, DCB_t *, NODE *, int *);
static int updprep ( DCB_t * (*input), DCB_t * (*output) );
static int updverfi ( void );
static int updaka ( NODE * (*), NODE * (*) );
static int updproc ( DCB_t *, DCB_t *, NODE *);
static int synad_exit (void *, void * );
static int abend_exit (void *, void * );
static int insert_alias( NODE *, PDS_MBR *);
#endif /* __UPDBLDH__ */