⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spoolint.c

📁 一个不错的硬盘播放器程序,包含VFD显示程序,红外线遥控程序,硬盘读写程序,及解码程序等.
💻 C
字号:
/* SCCSID @(#)spoolint.c	1.15 5/28/97 */#if defined(VCW)||defined(VCWSPOOL1)||defined(VCWSPOOL2)/*************************************************************/	#include "common.h"#include <stdarg.h>#include <stdio.h>#include <string.h>#include <memory.h>#include "spoolint.h"#ifndef TRUE#define TRUE 			1#endif#ifndef FALSE#define FALSE 			0#endif/* lib replace */ #ifndef  EMULATOR#define POOLBUFFLENGTH		66 #define mon_put_long		mon_put_long0	#else#define POOLBUFFLENGTH		24  #define mon_put_long		mon_put_long1#endif#define SPOOLSTRING		0x00#define SPOOLBLOCK		0x01#define SPOOLCHAR		0x02#define SPOOLBYTE		0x03#define SPOOLINT		0x04#define SPOOLWORD		0x05#define SPOOLLONG		0x06#define SPOOLDWORD		0x07#define SPOOLKEYVAR		0x08#define KEYVARHEADFORMAT	0xff080208lstatic unsigned int 	pool_buff[POOLBUFFLENGTH], *pool_buff_last = pool_buff+POOLBUFFLENGTH;static unsigned int 	*read_ptr = pool_buff, *write_ptr = pool_buff;int 			spoolint_job_number = 0 ;#define pool_clear()		( read_ptr = write_ptr = pool_buff, spoolint_job_number=0 )#define pool_free_size(x, p)    { x = read_ptr - p; if (x<=0) x+=POOLBUFFLENGTH; }#define ptr_round(x)		{ if (x >= pool_buff_last)  x -= POOLBUFFLENGTH ; } 	#define ptr_increase(x, y)	{ x += y; if (x >= pool_buff_last)  x -= POOLBUFFLENGTH; }	#if defined(VCW)void spoolhandler(void){	register unsigned int *p = read_ptr;	/* send data out */	mon_put_long(*p);	mon_put_long(*(p+1));	mon_put_long(*(p+2));	ptr_increase(p, 3);	read_ptr = p;        /* printing job decease */	spoolint_job_number --;}  int spoolkeyvar(int *ptr){	register unsigned int *p = write_ptr;	register int free_size;		/* get free size and size check*/	pool_free_size(free_size, p);	if ( free_size <= 3 )		return -1;	/* send data to pool */	*p = KEYVARHEADFORMAT;	*(p+1) = (unsigned int)ptr;	*(p+2) = *ptr;	ptr_increase(p, 3);	write_ptr = p ;        /* printing job incease */	spoolint_job_number ++;	return 8;}#elif defined(VCWSPOOL1)||defined(VCWSPOOL2)#define HEADFORMAT_MASK		0xff000000l #define DATALENGTH_MASK		0x00ff0000l#define WINNUM_MASK		0x0000ff00l#define DATATYPE_MASK		0x000000ffl#define headformatcheck(format)	((HEADFORMAT_MASK==(HEADFORMAT_MASK&(format)))?TRUE:FALSE)#define get_datatype(format)	( DATATYPE_MASK & format)#define get_winnum(format)	((WINNUM_MASK & (format)) >> 8 )#define get_datalength(format)	((DATALENGTH_MASK & (format)) >> 16 )void spoolhandler(void){	register unsigned int *p = read_ptr;	register int i, datanumber; /* get headformat and check it if correct*//*	headformat = *read_ptr;	if (!headformatcheck)	{		mon_put_long(0x5c5c5c5cl);		pool_clear();		return;	}*/	/* get data length */	i = get_datalength(*p);	datanumber = (i>>2) + ((i&0x3)!=0);		/* data out */	for (i=0; i<datanumber+1; i++)	{		mon_put_long(*p++);		ptr_round(p);	}	read_ptr = p ;        /* printing job decease */	spoolint_job_number --;}  int spoolkeyvar(int *ptr){	register unsigned int *p = write_ptr, *p1 = pool_buff;	register int i;	/* get free size and spool space detect*/	pool_free_size(i, p);	if ( i <= 3 )		return -1;	/* send data to pool */	*p = KEYVARHEADFORMAT;	i = p1 - p + POOLBUFFLENGTH;	switch (i)	{	case 1:		*p1 = (unsigned int)ptr;		*(p1+1) = *ptr;		p = p1 + 2;		break;	case 2:		*(p+1) = (unsigned int)ptr;		*p1 = *ptr;		p = p1 + 1;		break;	default:			*(p+1) = (unsigned int)ptr;		*(p+2) = *ptr;		ptr_increase(p, 3);	}	write_ptr = p;        /* printing job incease */	spoolint_job_number ++;	return 8;}int spoolstring(int winnum, char *string){	register unsigned int *p = write_ptr;	register unsigned int k = 0xff000000;	register int i, j, datanumber; 	/* set head format */    	i = strlen ( string );	datanumber = (i>>2) + ((i&0x3)!=0);	/* get free size and check space size*/	pool_free_size(j, p);	if ( j <= datanumber + 1 )		return -1;	/* set head format and get data*/	i <<= 16;	winnum <<= 8;	k |= i + (winnum&0xff00);    	/* send data to pool */	*p++ = k;	ptr_round(p);		for (i=0; i<datanumber; i++)	{		k = *string++;		for (j=0; j<3; j++)		{			k <<= 8;			k |= *string++;		}		*p++ = k;		ptr_round(p);	}				write_ptr = p;    	/* printing job incease */	spoolint_job_number ++;	return  datanumber;} int spoolout(int winnum, int type, ...){	register unsigned int *p = write_ptr;	register unsigned int k = 0xff040000;	register int i;	va_list args;	/* get free size and free space check*/	pool_free_size(i, p);	if ( i <= 2 )		return -1;	/* set head format and send out */	winnum <<= 8;	k |= (winnum & 0xff00) | (type&0xff);	*p++ = k;	ptr_round(p);	/* get data by type and send out */	va_start(args, type);	if (type == SPOOLCHAR)		k = va_arg(args, char);	else		k = (unsigned int) va_arg(args, int);	*p++ = k;	ptr_round(p);	write_ptr = p;    	/* printing job incease */	spoolint_job_number ++;	return 4 ;}#if defined(VCWSPOOL2)int spoolprintf(int winnum, const char * format, ...){	char pool_buff1[POOLBUFFLENGTH];	int datalength; 	va_list args;	/* data format transferomation */	va_start(args, format);	datalength = vsprintf(pool_buff1, format, args);	/* call spoolinstring */    	if ( datalength > 0 )		datalength = spoolstring(winnum, pool_buff1);	return datalength ;}  #endif#endif                               #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -