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