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

struct head
{
	char ChunkID[4];
	long int ChunkSize;
	char Format[4];

	char SubChunkID[4];
	long int SubChunkSize;
	short int AudioFormat;
	short int NumChannels;
	long int SampleRate;
	long int BytesRate;
	short int  BlockAlign;
	short int BitsPerSample;

	char SubChunk2ID[4];
	long int SubChunk2Size;
}head;

void put_it(char * ptr, int size)
{
	char * dest = (char*) ptr;
	int i;
	for (i=0;i<size;i++)
	{
		putchar(*(dest+i));
	} 
}

void print_head()
{
	printf(head.ChunkID);
	printf("\n%d\n",head.ChunkSize);
	printf(head.Format);
	printf("\n");
	printf(head.SubChunkID);
	printf("\n");
	printf("%d\n",head.SubChunkSize);
	printf("%d\n",head.AudioFormat);
	printf("%d\n",head.NumChannels);
	printf("%d\n",head.SampleRate);
	printf("%d\n",head.BytesRate);
	printf("%d\n",head.BlockAlign);
	printf("%d\n",head.BitsPerSample);
	printf(head.SubChunk2ID);
	printf("\n%d\n",head.SubChunk2Size);
}
int format = 8;
int main(int argc, char * argv[])
{
	if (argc == 2)
	{
		if (atoi(argv[1]) == 16)
		{
			format = 16;
		}
	}
	head.BitsPerSample = format;

	char word[20];
	int wc = 0;
	
	int cur_chan = 1;
	int cur_samp = 0;
	int cur_sec = 0;
	
	char c;
	while (c != EOF)
	{
		c = getchar();
		if ((c != EOF)&&(c != '\n')&&(c != ' ')&&(c != ':'))
		{
			word[wc] = c;
			wc++;	
		}		
		else
		{
			//end of second
			if (c == '\n')
			{
				if (cur_samp > head.SampleRate)
				{
					head.SampleRate = cur_samp;
				}
				if (cur_chan > head.NumChannels)
				{
					head.NumChannels = cur_chan;
				}
				cur_sec += 1;
				cur_samp = 0;
				cur_chan = 0;
			}
			//end of sample
			if (c == ' ')
			{
				if (cur_chan > head.NumChannels)
				{
					head.NumChannels = cur_chan;
				}
				cur_samp += 1;
				cur_chan = 1;
			}
			//end of channel
			if (c == ':')
			{
				cur_chan += 1;
			}
			//end of file
			if (c == EOF)
			{
				head.SubChunk2Size = (cur_sec * head.SampleRate + cur_samp)*head.NumChannels*head.BitsPerSample/8;
			}
			//clear the string
			for (wc = 0;wc < 20; wc++)
			{
				word[wc] = ' ';
			}	
			wc = 0;	
		}
	}
	
	*((int*)(&head.ChunkID)) = 0x46464952;	//"RIFF";
	head.ChunkSize = 36 + head.SubChunk2Size;
	*((int*)(&head.Format)) = 0x45564157;	//"WAVE";
	*((int*)(&head.SubChunkID)) = 0x20746d66;	//"fmt";
	head.SubChunkSize = 16;	
	head.AudioFormat = 1;
	//head.NumChannels is already set
	//head.SampleRate is already set
	head.BytesRate = head.SampleRate * head.NumChannels * head.BitsPerSample/8;
	head.BlockAlign = head.NumChannels * head.BitsPerSample/8;
	//head.BitsPerSample is already set
	*((int*)(&head.SubChunk2ID)) = 0x61746164;	//"data";
	//head.SubChunk2Size is already set
	
	
	//print_head();	
	
	put_it((char*)&head,44);	
	
	return 0;
}
