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

📄 file.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include "modem.h"static long wd[5] = {	1728, 2048, 2432, 1216, 864};voidsetpageid(char *pageid, char *spool, long time, int pid, int pageno){	sprint(pageid, "%s/%lud.%d.%3.3d", spool, time, pid, pageno);}intcreatefaxfile(Modem *m, char *spool){	setpageid(m->pageid, spool, m->time, m->pid, m->pageno);	verbose("openfaxfile: %s", m->pageid);	if((m->pagefd = create(m->pageid, OTRUNC|OWRITE, 0666)) < 0)		return seterror(m, Esys);	fprint(m->pagefd, "TYPE=ccitt-g31\n");	fprint(m->pagefd, "WINDOW=0 0 %ld -1\n", wd[m->fdcs[2]]);	if(m->valid & Vftsi)		fprint(m->pagefd, "FTSI=%s\n", m->ftsi);	fprint(m->pagefd, "FDCS=%lud,%lud,%lud,%lud,%lud,%lud,%lud,%lud\n",		m->fdcs[0], m->fdcs[1], m->fdcs[2], m->fdcs[3],		m->fdcs[4], m->fdcs[5], m->fdcs[6], m->fdcs[7]);	fprint(m->pagefd, "\n");	return Eok;}enum{	Gshdrsize=	0x40,};intgsopen(Modem *m){	int n;	char bytes[Gshdrsize];	/*	 *  Is this gs output	 */	n = Bread(m->bp, bytes, Gshdrsize);	if(n != Gshdrsize)		return seterror(m, Esys);	if(bytes[0]!='\0' || strcmp(bytes+1, "PC Research, Inc")!=0){		Bseek(m->bp, 0, 0);		return seterror(m, Esys);	}	m->valid |= Vtype;	if(bytes[0x1d])		m->vr = 1;	else		m->vr = 0;	m->wd = 0;	m->ln = 2;	m->df = 0;	return Eok;}intpicopen(Modem *m){	char *p, *q;	int i, x;	/*	 * Look at the header. Every page should have a valid type.	 * The first page should have WINDOW.	 */	while(p = Brdline(m->bp, '\n')){		if(Blinelen(m->bp) == 1)			break;		p[Blinelen(m->bp)-1] = 0;		verbose("openfaxfile: %s", p);		if(strcmp("TYPE=ccitt-g31", p) == 0)			m->valid |= Vtype;		/*		else if(m->pageno == 1 && strncmp("PHONE=", p, 6) == 0){			strcpy(m->number, p+6);			m->valid |= Vphone;		}		 */		else if(m->pageno == 1 && strncmp("WINDOW=", p, 7) == 0){			p += 7;			verbose("openfaxfile: WINDOW: %s", p);			for(i = 0; i < 4; i++){				x = strtol(p, &q, 10);				if(i == 2)					m->wd = x;				if((p = q) == 0){					Bterm(m->bp);					return seterror(m, Eproto);				}			}			for(i = 0; i < 5; i++){				if(m->wd == wd[i]){					m->wd = i;					m->valid |= Vwd;					break;				}			}			if((m->valid & Vwd) == 0){				Bterm(m->bp);				return seterror(m, Eproto);			}		}		else if(m->pageno == 1 && strncmp("FDCS=", p, 5) == 0){			p += 5;			m->df = m->vr = m->wd = 0;			m->ln = 2;			for(i = 0; i < 5; i++){				x = strtol(p, &q, 10);				switch(i){				case 0:					m->vr = x;					break;				case 3:					m->ln = x;					break;				case 4:					m->df = x;					break;				}				if((p = q) == 0){					Bterm(m->bp);					return seterror(m, Eproto);				}				if(*p++ != ',')					break;			}		}	}	verbose("openfaxfile: valid #%4.4ux", m->valid);	if((m->valid & (Vtype|Vwd)) != (Vtype|Vwd)){		Bterm(m->bp);		return seterror(m, Eproto);	}	return Eok;}intopenfaxfile(Modem *m, char *file){	if((m->bp = Bopen(file, OREAD)) == 0)		return seterror(m, Esys);	m->valid &= ~(Vtype);	if(gsopen(m) == Eok)		return Eok;	return picopen(m);}

⌨️ 快捷键说明

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