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

📄 load.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <draw.h>#include <memdraw.h>intloadmemimage(Memimage *i, Rectangle r, uchar *data, int ndata){	int y, l, lpart, rpart, mx, m, mr;	uchar *q;	if(!rectinrect(r, i->r))		return -1;	l = bytesperline(r, i->depth);	if(ndata < l*Dy(r))		return -1;	ndata = l*Dy(r);	q = byteaddr(i, r.min);	mx = 7/i->depth;	lpart = (r.min.x & mx) * i->depth;	rpart = (r.max.x & mx) * i->depth;	m = 0xFF >> lpart;	/* may need to do bit insertion on edges */	if(l == 1){	/* all in one byte */		if(rpart)			m ^= 0xFF >> rpart;		for(y=r.min.y; y<r.max.y; y++){			*q ^= (*data^*q) & m;			q += i->width*sizeof(ulong);			data++;		}		return ndata;	}	if(lpart==0 && rpart==0){	/* easy case */		for(y=r.min.y; y<r.max.y; y++){			memmove(q, data, l);			q += i->width*sizeof(ulong);			data += l;		}		return ndata;	}	mr = 0xFF ^ (0xFF >> rpart);	if(lpart!=0 && rpart==0){		for(y=r.min.y; y<r.max.y; y++){			*q ^= (*data^*q) & m;			if(l > 1)				memmove(q+1, data+1, l-1);			q += i->width*sizeof(ulong);			data += l;		}		return ndata;	}	if(lpart==0 && rpart!=0){		for(y=r.min.y; y<r.max.y; y++){			if(l > 1)				memmove(q, data, l-1);			q[l-1] ^= (data[l-1]^q[l-1]) & mr;			q += i->width*sizeof(ulong);			data += l;		}		return ndata;	}	for(y=r.min.y; y<r.max.y; y++){		*q ^= (*data^*q) & m;		if(l > 2)			memmove(q+1, data+1, l-2);		q[l-1] ^= (data[l-1]^q[l-1]) & mr;		q += i->width*sizeof(ulong);		data += l;	}	return ndata;}

⌨️ 快捷键说明

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