/*
 *  TEX Device Driver  ver 2.00, 2.25
 *  copyright(c) 1988, 1989 by TSG.
 *	The above is lost, 1990 made by SHIMA
 *
 *  dviread.c : ファイルから数値を読み出す
 *	very slightly modified against warnings by Oh-Yeah? 25 May 1992
 */

#include	<stdio.h>
#include	"dd.h"

/* buffer.c */
char *marea(unsigned int size);

static union D {
	long num;
	int i;
	uchar c[4];
};

#if defined(TURBOC) || defined(MSC)

int read_int(FILE * fp)
{	   /* read signed integer */
	union D d;

	d.c[1] = (uchar)getc(fp);
	d.c[0] = (uchar)getc(fp);
	return (d.i);
}

long read_long(FILE * fp)
{	   /* read 4 bytes as long integer */
	union D d;

	d.c[3] = getc(fp);
	d.c[2] = getc(fp);
	d.c[1] = getc(fp);
	d.c[0] = getc(fp);

	return (d.num);
}

#endif

char *
    read_str(FILE * fp, int len)
{
	char *pt0, *pt;

	if ((pt = pt0 = (char *)marea(len + 1)) != NULL) {
		while (len-- > 0)
			*pt++ = getc(fp);
		*pt = '\0';

	}
	return (pt0);
}

long read_n(FILE * fp, int n)
{
	union D d;

	d.num = 0;
	while (n > 0)
		d.c[--n] = getc(fp);
	/*	switch (n) {
	case 4 : d.c[3] = getc(fp);
	case 3 : d.c[2] = getc(fp);
	case 2 : d.c[1] = getc(fp);
	case 1 : d.c[0] = getc(fp);
	}	*/
	return (d.num);
}

long signed_read_n(FILE * fp, int n)
{
	uchar ch;
	union D d;

	ch = (uchar)getc(fp);
	if (ch > 127)
		d.num = -1;
	else
		d.num = 0;
	d.c[--n] = ch;
	while (n > 0)
		d.c[--n] = getc(fp);
	/*	switch (n) {
	case 4 : d.c[2] = getc(fp);
	case 3 : d.c[1] = getc(fp);
	case 2 : d.c[0] = getc(fp);
	}
*/
	return (d.num);
}
