#include <descrip.h>
#include <lib$routines.h>
#include <ssdef.h>
#include <starlet.h>
#include <stdio.h>
#include <stsdef.h>
#define MAXASCTIMLEN 23
main()
    {
    int RetStat;
    $DESCRIPTOR( TimeSourceAscii, "01-JAN-1995 00:00:01");
    char TimeSourceBinary[] = { 0x080, 0x0F5, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000};
    struct dsc$descriptor FormattedTimeDesc;
    char FormattedTimeBuffer[MAXASCTIMLEN];
    int TimeBinaryQW[2];

    /*
    //	example 1:
    //	Convert time from binary to ASCII.
    */
    FormattedTimeDesc.dsc$w_length = MAXASCTIMLEN;
    FormattedTimeDesc.dsc$b_dtype = DSC$K_DTYPE_T;
    FormattedTimeDesc.dsc$b_class = DSC$K_CLASS_S;
    FormattedTimeDesc.dsc$a_pointer = FormattedTimeBuffer;

    RetStat = sys$asctim( 0, &FormattedTimeDesc, TimeSourceBinary, 0 );
    if (!$VMS_STATUS_SUCCESS( RetStat )) return RetStat;
    RetStat = lib$put_output( &FormattedTimeDesc );
    if (!$VMS_STATUS_SUCCESS( RetStat )) return RetStat;

    /*
    //	example 2:
    //	Convert time from ASCII to binary and back to ASCII.
    */
    RetStat = sys$bintim( &TimeSourceAscii, TimeBinaryQW );
    if (!$VMS_STATUS_SUCCESS( RetStat )) return RetStat;
    RetStat = sys$asctim( 0, &FormattedTimeDesc, TimeBinaryQW, 0 );
    if (!$VMS_STATUS_SUCCESS( RetStat )) return RetStat;
    printf("0x0%2.2x 0x0%2.2x 0x0%2.2x 0x0%2.2x 0x0%2.2x 0x0%2.2x 0x0%2.2x 0x0%2.2x\n",
	(unsigned char) TimeBinaryQW[0], (unsigned char) TimeBinaryQW[1],
	(unsigned char) TimeBinaryQW[2], (unsigned char) TimeBinaryQW[3],
	(unsigned char) TimeBinaryQW[4], (unsigned char) TimeBinaryQW[5],
	(unsigned char) TimeBinaryQW[6], (unsigned char) TimeBinaryQW[7] );
    RetStat = lib$put_output( &FormattedTimeDesc );
    if (!$VMS_STATUS_SUCCESS( RetStat )) return RetStat;
    
    return SS$_NORMAL;
    }
