1 /* SLLIB.H (c) Copyright Leland Lucius, 2000-2009 */ 2 /* Header for Standard Label library */ 3 4 #if !defined( _SLLIB_H_ ) 5 #define _SLLIB_H_ 6 7 #include "hercules.h" 8 9 #ifndef _SLLIB_C_ 10 #ifndef _HTAPE_DLL_ 11 #define SLL_DLL_IMPORT DLL_IMPORT 12 #else /* _HUTIL_DLL_ */ 13 #define SLL_DLL_IMPORT extern 14 #endif /* _HUTIL_DLL_ */ 15 #else 16 #define SLL_DLL_IMPORT DLL_EXPORT 17 #endif 18 19 /* 20 || ---------------------------------------------------------------------------- 21 || 22 || SLLIB.H (c) Copyright Leland Lucius, 2000-2009 23 || Released under terms of the Q Public License. 24 || 25 || Header for Standard Label library. 26 || 27 || ---------------------------------------------------------------------------- 28 */ 29 30 #if !defined( TRUE ) 31 #define TRUE 1 32 #endif 33 34 #if !defined( FALSE ) 35 #define FALSE 0 36 #endif 37 38 /* 39 || Raw label structure 40 */ 41 typedef struct _sllabel 42 { 43 char id[ 3 ]; 44 char num[ 1 ]; 45 union 46 { 47 struct 48 { 49 char volser[ 6 ]; 50 char rsvd1[ 25 ]; 51 char idrc[ 1 ]; 52 char rsvd2[ 5 ]; 53 char owner[ 10 ]; 54 char rsvd3[ 29 ]; 55 } vol; 56 57 struct 58 { 59 char dsid[ 17 ]; 60 char volser[ 6 ]; 61 char volseq[ 4 ]; 62 char dsseq[ 4 ]; 63 char genno[ 4 ]; 64 char verno[ 2 ]; 65 char crtdt[ 6 ]; 66 char expdt[ 6 ]; 67 char dssec[ 1 ]; 68 char blklo[ 6 ]; 69 char syscd[ 13 ]; 70 char rsvd1[ 3 ]; 71 char blkhi[ 4 ]; 72 } ds1; 73 74 struct 75 { 76 char recfm[ 1 ]; 77 char blksize[ 5 ]; 78 char lrecl[ 5 ]; 79 char den[ 1 ]; 80 char dspos[ 1 ]; 81 char jobid[ 17 ]; 82 char trtch[ 2 ]; 83 char ctrl[ 1 ]; 84 char rsvd1[ 1 ]; 85 char blkattr[ 1 ]; 86 char rsvd2[ 2 ]; 87 char devser[ 6 ]; 88 char ckptid[ 1 ]; 89 char rsvd3[ 22 ]; 90 char lblkln[ 10 ]; 91 } ds2; 92 93 struct 94 { 95 char data[ 76 ]; 96 } usr; 97 } u; 98 } SLLABEL; 99 100 /* 101 || Cooked label structure 102 */ 103 typedef struct _slfmt 104 { 105 char *key[ 14 ]; 106 char *val[ 14 ]; 107 108 char type[ 4 + 1 ]; 109 110 union 111 { 112 struct 113 { 114 char volser[ 6 + 1 ]; 115 char idrc[ 1 + 1 ]; 116 char owner[ 10 + 1 ]; 117 } vol; 118 119 struct 120 { 121 char dsid[ 17 + 1 ]; 122 char volser[ 6 + 1 ]; 123 char volseq[ 4 + 1 ]; 124 char dsseq[ 4 + 1 ]; 125 char genno[ 4 + 1 ]; 126 char verno[ 2 + 1 ]; 127 char crtdt[ 6 + 1 ]; 128 char expdt[ 6 + 1 ]; 129 char dssec[ 1 + 1 ]; 130 char blklo[ 6 + 1 ]; 131 char syscd[ 13 + 1 ]; 132 char blkhi[ 4 + 1 ]; 133 } ds1; 134 135 struct 136 { 137 char recfm[ 1 + 1 ]; 138 char blksize[ 5 + 1 ]; 139 char lrecl[ 5 + 1 ]; 140 char den[ 1 + 1 ]; 141 char dspos[ 1 + 1 ]; 142 char jobid[ 17 + 1 ]; 143 char trtch[ 2 + 1 ]; 144 char ctrl[ 1 + 1 ]; 145 char blkattr[ 1 + 1 ]; 146 char devser[ 6 + 1 ]; 147 char ckptid[ 1 + 1 ]; 148 char lblkln[ 10 + 1 ]; 149 } ds2; 150 151 struct 152 { 153 char data[ 76 + 1 ]; 154 } usr; 155 } u; 156 } SLFMT; 157 158 /* 159 || Prettier label structure mappings 160 */ 161 #define slvol u.vol 162 #define slds1 u.ds1 163 #define slds2 u.ds2 164 #define slusr u.usr 165 166 /* 167 || Special dataset name used to generate an IEHINITT HDR1 label 168 */ 169 #define SL_INITDSN "_IEHINITT_" 170 171 /* 172 || Length of SL format date 173 */ 174 #define SL_DATELEN 6 175 176 /* 177 || Label types 178 */ 179 #define SLT_UNKOWN 0 180 #define SLT_VOL 1 181 #define SLT_HDR 2 182 #define SLT_UHL 3 183 #define SLT_EOF 4 184 #define SLT_EOV 5 185 #define SLT_UTL 6 186 187 /* 188 || Macros to test label type 189 */ 190 #define sl_isvol( s, n ) sl_istype( (s), SLT_VOL, (n) ) 191 #define sl_ishdr( s, n ) sl_istype( (s), SLT_HDR, (n) ) 192 #define sl_isuhl( s, n ) sl_istype( (s), SLT_UHL, (n) ) 193 #define sl_iseof( s, n ) sl_istype( (s), SLT_EOF, (n) ) 194 #define sl_iseov( s, n ) sl_istype( (s), SLT_EOV, (n) ) 195 #define sl_isutl( s, n ) sl_istype( (s), SLT_UTL, (n) ) 196 197 /* 198 || Macros to define specific labels 199 */ 200 #define sl_vol1( p1, p2, p3 ) \ 201 sl_vol( p1, p2, p3 ) 202 203 #define sl_hdr1( p1, p2, p3, p4, p5, p6, p7 ) \ 204 sl_ds1( p1, SLT_HDR, p2, p3, p4, p5, p6, p7 ) 205 206 #define sl_eof1( p1, p2, p3, p4, p5, p6 ) \ 207 sl_ds1( p1, SLT_EOF, p2, p3, p4, p5, p6 ) 208 209 #define sl_eov1( p1, p2, p3, p4, p5, p6 ) \ 210 sl_ds1( p1, SLT_EOV, p2, p3, p4, p5, p6 ) 211 212 #define sl_hdr2( p1, p2, p3, p4, p5, p6, p7, p8 ) \ 213 sl_ds2( p1, SLT_HDR, p2, p3, p4, p5, p6, p7, p8 ) 214 215 #define sl_eof2( p1, p2, p3, p4, p5, p6, p7, p8 ) \ 216 sl_ds2( p1, SLT_EOF, p2, p3, p4, p5, p6, p7, p8 ) 217 218 #define sl_eov2( p1, p2, p3, p4, p5, p6, p7, p8 ) \ 219 sl_ds2( p1, SLT_EOV, p2, p3, p4, p5, p6, p7, p8 ) 220 221 #define sl_uhl1( p1, p2 ) sl_usr( p1, SLT_UHL, 1, p2 ) 222 223 #define sl_uhl2( p1, p2 ) sl_usr( p1, SLT_UHL, 2, p2 ) 224 225 #define sl_uhl3( p1, p2 ) sl_usr( p1, SLT_UHL, 3, p2 ) 226 227 #define sl_uhl4( p1, p2 ) sl_usr( p1, SLT_UHL, 4, p2 ) 228 229 #define sl_uhl5( p1, p2 ) sl_usr( p1, SLT_UHL, 5, p2 ) 230 231 #define sl_uhl6( p1, p2 ) sl_usr( p1, SLT_UHL, 6, p2 ) 232 233 #define sl_uhl7( p1, p2 ) sl_usr( p1, SLT_UHL, 7, p2 ) 234 235 #define sl_uhl8( p1, p2 ) sl_usr( p1, SLT_UHL, 8, p2 ) 236 237 #define sl_utl1( p1, p2 ) sl_usr( p1, SLT_UTL, 1, p2 ) 238 239 #define sl_utl2( p1, p2 ) sl_usr( p1, SLT_UTL, 2, p2 ) 240 241 #define sl_utl3( p1, p2 ) sl_usr( p1, SLT_UTL, 3, p2 ) 242 243 #define sl_utl4( p1, p2 ) sl_usr( p1, SLT_UTL, 4, p2 ) 244 245 #define sl_utl5( p1, p2 ) sl_usr( p1, SLT_UTL, 5, p2 ) 246 247 #define sl_utl6( p1, p2 ) sl_usr( p1, SLT_UTL, 6, p2 ) 248 249 #define sl_utl7( p1, p2 ) sl_usr( p1, SLT_UTL, 7, p2 ) 250 251 #define sl_utl8( p1, p2 ) sl_usr( p1, SLT_UTL, 8, p2 ) 252 253 /* 254 || Error definitions 255 */ 256 #define SLE_BLKSIZE -1 /* Block size out of range */ 257 #define SLE_DSSEQ -2 /* Data set sequence out of range */ 258 #define SLE_EXPDT -3 /* Invalid expiration date */ 259 #define SLE_JOBNAME -4 /* Missing or invalid job name */ 260 #define SLE_LRECL -5 /* Invalid record length */ 261 #define SLE_OWNER -6 /* Owner string too long */ 262 #define SLE_RECFM -7 /* Missing or invalid record format */ 263 #define SLE_STEPNAME -8 /* Missing or invalid step name */ 264 #define SLE_TRTCH -9 /* Invalid recording technique */ 265 #define SLE_VOLSEQ -10 /* Volume sequence out of range */ 266 #define SLE_VOLSER -11 /* Missing or invalid volume serial */ 267 #define SLE_DATA -12 /* User data too long */ 268 #define SLE_INVALIDTYPE -13 /* Label type invalid */ 269 #define SLE_INVALIDNUM -14 /* Label number invalid */ 270 271 /* 272 || Public functions/data 273 */ 274 SLL_DLL_IMPORT char *sl_atoe( void *, void *, int ); 275 SLL_DLL_IMPORT char *sl_etoa( void *, void *, int ); 276 SLL_DLL_IMPORT char *sl_fmtdate( char *, char *, int ); 277 SLL_DLL_IMPORT void sl_fmtlab( SLFMT *, SLLABEL * ); 278 SLL_DLL_IMPORT int sl_islabel( SLLABEL *, void *, int ); 279 SLL_DLL_IMPORT int sl_istype( void *, int type, int num ); 280 SLL_DLL_IMPORT int sl_vol( SLLABEL *, char *, char * ); 281 SLL_DLL_IMPORT int sl_ds1( SLLABEL *, int type, char *, char *, int, int, char *, int ); 282 SLL_DLL_IMPORT int sl_ds2( SLLABEL *, int type, char *, int, int, char *, char *, char * ); 283 SLL_DLL_IMPORT int sl_usr( SLLABEL *, int type, int num, char * ); 284 SLL_DLL_IMPORT const char *sl_error( int rc ); 285 286 #endif /* defined( _SLLIB_H_ ) */ 287