#include <stdio>                                     
#include "cgm.h"

/*	CMS Generation: 1                       29-AUG-89
*/
                                      
main(argc,argv)
int argc;
char *argv[];
{                                                           
	FILE *fp,*fopen();
	unsigned char c,line[256];
	short unsigned class,element,listlen;
	short unsigned header;
	int tlen,i;

	if (argc <= 1)
	{
	 printf("no file specified\n");
	 return(1);
	}

	/* open input file */
	if ( (fp=fopen(argv[1],"r")) == NULL)
	{
	 printf("error opening output \n");
	 return(1);
	}
                        
/* get 16bits (2 bytes) */
	line[2]='\0';

	while ( fread(line,(size_t)1,(size_t)2,fp) != 0)
	{
	if ( (line[0]== 0xFF)&&(line[1]==0xFF) ) break;

	header = (line[0]<<8) + line[1];
	class = ((header&0xF000)>>12);
 	element = ( (header&0x0FE0)>>5);
	listlen  = ( header&0x001F);

	if (class < MAX_CLASSES)
	{
	 if (element < elements[class].max  )
	 {	tlen=elements[class].class[element].len ;
		printf("\nclass:%s element:%s =",
			classes[class].name,
			elements[class].class[element].name);

		if(listlen == 31)	/* partition */
	     	{
		while (header != 0) /* more partitions */
			{
			fread(line,(size_t)1,(size_t)2,fp) ;
			header = (line[0]<<8)+ line[1];
			listlen = (header & 0x7FFF);
			header = (header & 0x8000);

			printf("\npartition len: %X",listlen);

			fread(line,(size_t)1,(size_t)(listlen),fp);
			for (i=0;i<listlen;i++) printf((i%16)?"|%x":"\n|%x",line[i]);

			line[listlen]='\0';
			printf("\n%s",line);


			}

		}
		else	 /* single byte command */
		{	fread(line,(size_t)1,(size_t)(listlen),fp);
	
			if (tlen <= N_LENGTH) /* any length */
			{	
				line[listlen]='\0';
				printf("%s",line);
			}
			else 
			{	for(i=0;i<listlen;i++)
				   	printf("|%x",line[i]);
			}

			/* get rid of padding byte */
			if (listlen % 2 ) fread(line,(size_t)1,(size_t)1,fp);

		} /* end of one byte header command */

	  } /* good element # */
	 else printf("\nelement # %X too big for me\n",element);
	} /* good class # */
	 else printf("\nclass # %X too big for me\n",class);

	} /* end of file loop */
	

	/* close input file, then exit */
	fclose(fp);
}
