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

📄 frptofchar.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <draw.h>#include <thread.h>#include <mouse.h>#include <frame.h>Point_frptofcharptb(Frame *f, ulong p, Point pt, int bn){	uchar *s;	Frbox *b;	int w, l;	Rune r;	for(b = &f->box[bn]; bn<f->nbox; bn++,b++){		_frcklinewrap(f, &pt, b);		if(p < (l=NRUNE(b))){			if(b->nrune > 0)				for(s=b->ptr; p>0; s+=w, p--){					if((r = *s) < Runeself)						w = 1;					else						w = chartorune(&r, (char*)s);					pt.x += stringnwidth(f->font, (char*)s, 1);					if(r==0 || pt.x>f->r.max.x)						drawerror(f->display, "frptofchar");				}			break;		}		p -= l;		_fradvance(f, &pt, b);	}	return pt;}Pointfrptofchar(Frame *f, ulong p){	return _frptofcharptb(f, p, f->r.min, 0);}Point_frptofcharnb(Frame *f, ulong p, int nb)	/* doesn't do final _fradvance to next line */{	Point pt;	int nbox;	nbox = f->nbox;	f->nbox = nb;	pt = _frptofcharptb(f, p, f->r.min, 0);	f->nbox = nbox;	return pt;}staticPoint_frgrid(Frame *f, Point p){	p.y -= f->r.min.y;	p.y -= p.y%f->font->height;	p.y += f->r.min.y;	if(p.x > f->r.max.x)		p.x = f->r.max.x;	return p;}ulongfrcharofpt(Frame *f, Point pt){	Point qt;	int w, bn;	uchar *s;	Frbox *b;	ulong p;	Rune r;	pt = _frgrid(f, pt);	qt = f->r.min;	for(b=f->box,bn=0,p=0; bn<f->nbox && qt.y<pt.y; bn++,b++){		_frcklinewrap(f, &qt, b);		if(qt.y >= pt.y)			break;		_fradvance(f, &qt, b);		p += NRUNE(b);	}	for(; bn<f->nbox && qt.x<=pt.x; bn++,b++){		_frcklinewrap(f, &qt, b);		if(qt.y > pt.y)			break;		if(qt.x+b->wid > pt.x){			if(b->nrune < 0)				_fradvance(f, &qt, b);			else{				s = b->ptr;				for(;;){					if((r = *s) < Runeself)						w = 1;					else						w = chartorune(&r, (char*)s);					if(r == 0)						drawerror(f->display, "end of string in frcharofpt");					qt.x += stringnwidth(f->font, (char*)s, 1);					s += w;					if(qt.x > pt.x)						break;					p++;				}			}		}else{			p += NRUNE(b);			_fradvance(f, &qt, b);		}	}	return p;}

⌨️ 快捷键说明

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