Hi All you Eager MPEG Makers, here is how to port the PVRG MPEG
encoder/decoder to DOS/PC (386).

Tools required:
	Well the ones that I used.

		GNU C version 2.2.2
		GREP or some other file search util
		An uncompress util for UNIX .Z files
		An untar for UNIX tar files
		Text Editor (sorry some code needs tweaked)

Source required:
		/pub/mpeg/MPEGv1.1.tar.Z
			from havefun.stanford.edu

		/pub/mpeg/MPEGDOCv1.1.tar.Z
			from havefun.stanford.edu

Step 1
	Decompress the .Z files

Step 2 
	Untar the resulting tar files.
	Note that 2 of the file names won't fit in the DOS 8 and 3 name format:
		transform.c truncates to transfor.c
		prototype.h truncates to prototyp.h

Step 3
	Search the C files for fopen and alter the mode to binary. The 2
	sections below were produced by GREP.

	BEFORE
	*** FILE mem.c:
  	if ((inp = fopen(filename,"r")) == NULL)
  	if ((inp = fopen(filename,"r")) == NULL)
  	if ((out = fopen(filename,"w")) == NULL)
  	if ((out = fopen(filename,"w")) == NULL)

	*** FILE mpeg.c:
      	if ((test = fopen(CFrame->ComponentFileName[i],"r")) == NULL)
      
	*** FILE stream.c:
  	if ((srin = fopen(filename,"r")) == NULL)
  	if ((swout = fopen(filename,"w+")) == NULL)
	
	AFTER
	*** FILE mem.c:
	if ((inp = fopen(filename,"rb")) == NULL)
	if ((inp = fopen(filename,"rb")) == NULL)
	if ((out = fopen(filename,"wb")) == NULL)
	if ((out = fopen(filename,"wb")) == NULL)

	*** FILE mpeg.c:
      	if ((test = fopen(CFrame->ComponentFileName[i],"rb")) == NULL)

	*** FILE stream.c:
	if ((srin = fopen(filename,"rb")) == NULL)
	if ((swout = fopen(filename,"wb+")) == NULL)
	
Step 4

	This is an odd one and may only be needed for GNU C v 2.2.2. The file
	lexer.c uses the rint function (round to nearest integer), my copy of
	GNU C has rint in the math header but not in the object library ? So
	my fix is to use floor(x+0.5) instead. Search lexer.c for R_ROUND until
	you see the BEFORE section below and edit it to look like the AFTER
	section.

	BEFORE
	
	case R_ROUND:
	  accum = *(--DataPtr);
	  *(DataPtr++) = rint(accum);
	  break;
	
	AFTER

	case R_ROUND:
	  accum = *(--DataPtr);
	  *(DataPtr++) = floor(accum+0.5);
	  break;
	
Step 5
	Compile all 12 files to *.o using the following example command line 
	GCC.

		GCC -O -c chendct.c

	Ignore the warning from lexer.c and tranfor.c about implicit
	decleration.

Step 6
	Link all the files together to form MPEG

	gcc lexer.o mpeg.o huffman.o transfor.o codec.o io.o marker.o
		 me.o mem.o stat.o stream.o chendct.o  -lgcc -lm -o mpeg
	
	Note all one line 

Step 7 
	Create MPEG.EXE

	aout2exe mpeg mpeg.exe

Step 8
	Use and enjoy and send me a mail message to let me know how you get on
	and any mpegs that you create (I am broad minded !).


Graham Logan

mitgml@dct.ac.uk
 
