#include <stdio.h>
#include <string.h>
#include <unistd.h>

#include <descrip.h>
#include <dvidef.h>
#include <jpidef.h>
#include <lib$routines.h>
#include <ssdef.h>
#include <stsdef.h>
#include <starlet.h>
#include <syidef.h>

/* GETDVI item descriptor structure. */
typedef struct
{
    short buf_len;
    short itm_cod;
    void *buf;
    int *ret_len;
} xxx_item_t;



int main( int argc, char **argv)
{
    int sts = 0;
    char vol_nam[ 65];
    short iosb[ 4];

/* GETDVI item descriptor set. */

    int vol_nam_len_ret;
    struct
    {
    xxx_item_t vol_nam_itm;
    int term;
    } dvi_itm_lst =
     { { ((sizeof vol_nam)- 1), DVI$_VOLNAM, &vol_nam, &vol_nam_len_ret },
       0
     };

    if (argc > 1)
    {

printf( " a1: >%s<, len = %d.\n", argv[ 1], strlen( argv[ 1]));

        /* Device name descriptor. */
        struct dsc$descriptor_s dev_name_descr =
         { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL };

        dev_name_descr.dsc$w_length = strlen( argv[ 1]);
        dev_name_descr.dsc$a_pointer = argv[ 1];
					
        sts = sys$getdvi( 0,                    /* Event flag. */
                          0,                    /* Channel. */
                          &dev_name_descr,      /* Device name. */
                          &dvi_itm_lst,         /* Item list. */
                          &iosb,                /* IOSB. */
                          0,                    /* AST address. */
                          0,                    /* AST parameter. */
                          0,                    /* Null argument. */
                          0);                   /* Pathname. */

fprintf( stderr, " $GETDVI sts =  %08x , iosb[0] = %08x .\n",
 sts, iosb[0]);

        if ((sts& STS$M_SEVERITY) == STS$K_SUCCESS)
        {
            printf( " vol_nam_len_ret = %d.\n", vol_nam_len_ret);

            vol_nam[ vol_nam_len_ret] = '\0';
            printf( "     label: >%s<.\n", vol_nam);
        }

        if ((sts& STS$M_SEVERITY) == STS$K_SUCCESS)
        {
            vol_nam[ vol_nam_len_ret- 1] = 'X';
            printf( " New label: >%s<.\n", vol_nam);

#if 0
            dvi_itm_lst.vol_nam_itm.buf_len = vol_nam_len_ret;
#endif /* 0 */

            sts = sys$set_devicew(
             0,                         /* Event flag. */
             0,                         /* Channel. */
             &dev_name_descr,           /* Device name. */
             &dvi_itm_lst,              /* Item list. */
             &iosb,                     /* IOSB. */
             0,                         /* AST address. */
             0,                         /* AST parameter. */
             0);                        /* Null argument. */

fprintf( stderr, " $SET_DEVICE sts =  %08x , iosb[0] = %08x .\n",
 sts, iosb[0]);

        }
    }

    return sts;
}
