display.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 87 行

C
87
字号
#include <u.h>#include <libc.h>#include <bio.h>#include <draw.h>#include "sky.h"voiddisplaypic(Picture *pic){	int p[2];	int i, n;	uchar *a;		if(pipe(p) < 0){		fprint(2, "pipe failed: %r\n");		return;	}	switch(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT)){	case -1:		fprint(2, "fork failed: %r\n");		return;	case 0:		close(p[1]);		dup(p[0], 0);		close(p[0]);		execl("/bin/page", "page", "-w", nil);		fprint(2, "exec failed: %r\n");		exits("exec");	default:		close(p[0]);		fprint(p[1], "%11s %11d %11d %11d %11d ",			"k8", pic->minx, pic->miny, pic->maxx, pic->maxy);		n = (pic->maxx-pic->minx)*(pic->maxy-pic->miny);		/* release the memory as we hand it off; this could be a big piece of data */		a = pic->data;		while(n > 0){			i = 8192 - (((uintptr)a)&8191);			if(i > n)				i = n;			if(write(p[1], a, i)!=i)				fprint(2, "write error: %r\n");			if(i == 8192)	/* page aligned */				segfree(a, i);			n -= i;			a += i;		}		free(pic->data);		free(pic);		close(p[1]);		break;	}}voiddisplayimage(Image *im){	int p[2];		if(pipe(p) < 0){		fprint(2, "pipe failed: %r\n");		return;	}	switch(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT)){	case -1:		fprint(2, "fork failed: %r\n");		return;	case 0:		close(p[1]);		dup(p[0], 0);		close(p[0]);		execl("/bin/page", "page", "-w", nil);		fprint(2, "exec failed: %r\n");		exits("exec");	default:		close(p[0]);		writeimage(p[1], im, 0);		freeimage(im);		close(p[1]);		break;	}}

⌨️ 快捷键说明

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