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

📄 music.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 3 页
字号:
		chanprint(cs->ctl, "%q size %d %d %d %d", tabs[i].tab->name,			stringwidth(boldfont, tabs[i].tabname), tabht, 1024, tabht);		chanprint(cs->ctl, "%q align uppercenter", tabs[i].tab->name);		chanprint(cs->ctl, "%q font boldfont", tabs[i].tab->name);		chanprint(cs->ctl, "%q image background", tabs[i].tab->name);		chanprint(cs->ctl, "%q light background", tabs[i].tab->name);		chanprint(cs->ctl, "%q pressedtextcolor red", tabs[i].tab->name);		chanprint(cs->ctl, "%q textcolor darkgreen", tabs[i].tab->name);		chanprint(cs->ctl, "%q mask transparent", tabs[i].tab->name);		chanprint(cs->ctl, "%q text %q", tabs[i].tab->name, tabs[i].tabname);		chanprint(cs->ctl, "tabs add %s %s", tabs[i].tabname, tabs[i].winname);	}	chanprint(cs->ctl, "tabs separation %d", 2);	chanprint(cs->ctl, "tabs image background");	chanprint(cs->ctl, "tabs value 0");}voidmakeplaycontrols(void){	int w;	Control *playscr;	w = stringwidth(romanfont, "Roll over Beethoven");	playscr = createslider(cs, "playscr");	chanprint(cs->ctl, "playscr size 12, 24, 12, 1024");	createtext(cs, "playtext");	chanprint(cs->ctl, "playtext size %d %d %d %d",		w, 5*romanfont->height, 2048, 1024);	chanprint(cs->ctl, "playscr format '%%s: playtext topline %%d'");	controlwire(playscr, "event", cs->ctl);	tabs[WinPlay].win = createrow(cs, tabs[WinPlay].winname);	chanprint(cs->ctl, "%q add playscr playtext", tabs[WinPlay].win->name);}voidmakebrowsecontrols(void){	int w;	w = stringwidth(romanfont, "Roll over Beethoven");	browsetopscr = createslider(cs, "browsetopscr");	chanprint(cs->ctl, "browsetopscr size 12, 24, 12, %d", 12*romanfont->height);	browsetopwin = createtext(cs, "browsetopwin");	chanprint(cs->ctl, "browsetopwin size %d %d %d %d",		w, 3*romanfont->height, 2048, 12*romanfont->height);	createrow(cs, "browsetop");	chanprint(cs->ctl, "browsetop add browsetopscr browsetopwin");	browsebotscr = createslider(cs, "browsebotscr");	chanprint(cs->ctl, "browsebotscr size 12, 24, 12, 1024");	browsebotwin = createtext(cs, "browsebotwin");	chanprint(cs->ctl, "browsebotwin size %d %d %d %d",		w, 3*romanfont->height, 2048, 1024);	createrow(cs, "browsebot");	chanprint(cs->ctl, "browsebot add browsebotscr browsebotwin");	chanprint(cs->ctl, "browsetopscr format '%%s: browsetopwin topline %%d'");	controlwire(browsetopscr, "event", cs->ctl);//	chanprint(cs->ctl, "browsebotscr format '%%s: browsebotwin topline %%d'");//	controlwire(browsebotscr, "event", cs->ctl);	tabs[WinBrowse].win = createcolumn(cs, tabs[WinBrowse].winname);	chanprint(cs->ctl, "%q add browsetop browsebot", tabs[WinBrowse].win->name);}voidmakeplaylistcontrols(void){	int w;	Control *playlistscr;	w = stringwidth(romanfont, "Roll over Beethoven");	playlistscr = createslider(cs, "playlistscr");	chanprint(cs->ctl, "playlistscr size 12, 24, 12, 1024");	playlistwin = createtext(cs, "playlistwin");	chanprint(cs->ctl, "playlistwin size %d %d %d %d",		w, 5*romanfont->height, 2048, 1024);//	chanprint(cs->ctl, "playlistwin selectmode multi");	chanprint(cs->ctl, "playlistscr format '%%s: playlistwin topline %%d'");	controlwire(playlistscr, "event", cs->ctl);	tabs[WinPlaylist].win = createrow(cs, tabs[WinPlaylist].winname);	chanprint(cs->ctl, "%q add playlistscr playlistwin", tabs[WinPlaylist].win->name);}voidmakeerrorcontrols(void){	int w;	Control *errorscr;	w = stringwidth(romanfont, "Roll over Beethoven");	errorscr = createslider(cs, "errorscr");	chanprint(cs->ctl, "errorscr size 12, 24, 12, 1024");	errortext = createtext(cs, "errortext");	chanprint(cs->ctl, "errortext size %d %d %d %d",		w, 5*romanfont->height, 2048, 1024);	chanprint(cs->ctl, "errortext selectmode multi");	chanprint(cs->ctl, "errorscr format '%%s: errortext topline %%d'");	controlwire(errorscr, "event", cs->ctl);	tabs[WinError].win = createrow(cs, tabs[WinError].winname);	chanprint(cs->ctl, "%q add errorscr errortext", tabs[WinError].win->name);}voidmakecontrols(void){	int i;	cs = newcontrolset(screen, nil, nil, nil);	// make shared buttons	readbuts();	vol = createslider(cs, "volume");	chanprint(cs->ctl, "volume size %d %d %d %d", 2*butwid, butht, 2048, butht);	chanprint(cs->ctl, "volume absolute 1");	chanprint(cs->ctl, "volume indicatorcolor red");	chanprint(cs->ctl, "volume max 100");	chanprint(cs->ctl, "volume orient hor");	chanprint(cs->ctl, "volume clamp low 1");	chanprint(cs->ctl, "volume clamp high 0");	chanprint(cs->ctl, "volume format '%%s volume %%d'");	createrow(cs, "buttonrow");	for(i = 0; i < nelem(buts); i++)		chanprint(cs->ctl, "buttonrow add %s", buts[i].name);	chanprint(cs->ctl, "buttonrow add volume");	chanprint(cs->ctl, "buttonrow separation %d", borderwidth);	chanprint(cs->ctl, "buttonrow image darkgreen");	makebrowsecontrols();	makeplaycontrols();	makeplaylistcontrols();	makeerrorcontrols();	maketab();	chanprint(cs->ctl, "%q image background", "text slider");	chanprint(cs->ctl, "text font romanfont");	chanprint(cs->ctl, "slider indicatorcolor darkgreen");	chanprint(cs->ctl, "row separation %d", borderwidth);	chanprint(cs->ctl, "row image darkgreen");	chanprint(cs->ctl, "column separation %d", 2);	chanprint(cs->ctl, "column image darkgreen");	createcolumn(cs, "wholewin");	chanprint(cs->ctl, "wholewin separation %d", borderwidth);	chanprint(cs->ctl, "wholewin add buttonrow tabs");	chanprint(cs->ctl, "wholewin image darkgreen");	chanprint(cs->ctl, "%q image darkgreen", "column row");}voidmakewindow(int dx, int dy, int wflag){	int mountfd, fd, n;	static char aname[128];	static char rio[128] = "/mnt/term";	char *args[6];	if(wflag){		/* find out screen size */		fd = open("/mnt/wsys/screen", OREAD);		if(fd >= 0 && read(fd, aname, 60) == 60){			aname[60] = '\0';			n = tokenize(aname, args, nelem(args));			if(n != 5)				fprint(2, "Not an image: /mnt/wsys/screen\n");			else{				n = atoi(args[3]) - atoi(args[1]);				if(n <= 0 || n > 2048)					fprint(2, "/mnt/wsys/screen very wide: %d\n", n);				else					if(n < dx) dx = n-1;				n = atoi(args[4]) - atoi(args[2]);				if(n <= 0 || n > 2048)					fprint(2, "/mnt/wsys/screen very high: %d\n", n);				else					if(n < dy) dy = n-1;			}			close(fd);		}		n = 0;		if((fd = open("/env/wsys", OREAD)) < 0){			n = strlen(rio);			fd = open("/mnt/term/env/wsys", OREAD);			if(fd < 0)				sysfatal("/env/wsys");		}		if(read(fd, rio+n, sizeof(rio)-n-1) <= 0)			sysfatal("/env/wsys");		mountfd = open(rio, ORDWR);		if(mountfd < 0)			sysfatal("open %s: %r", rio);		snprint(aname, sizeof aname, "new -dx %d -dy %d", dx, dy);		rfork(RFNAMEG);		if(mount(mountfd, -1, "/mnt/wsys", MREPL, aname) < 0)			sysfatal("mount: %r");		if(bind("/mnt/wsys", "/dev", MBEFORE) < 0)			sysfatal("mount: %r");	}	if(initdraw(nil, nil, "music") < 0)		sysfatal("initdraw: %r");	initcontrols();	if(dx <= 320)		colorinit("/lib/font/bit/lucidasans/unicode.6.font",			"/lib/font/bit/lucidasans/boldunicode.8.font");	else		colorinit("/lib/font/bit/lucidasans/unicode.8.font",			"/lib/font/bit/lucidasans/boldunicode.10.font");	makecontrols();	resizeready = 1;	resizecontrolset(cs);	if(debug & DBGCONTROL)		fprint(2, "resize done\n");}voidsetparent(char *addr){	int i;	if(parent.address)		free(parent.address);	parent.address = strdup(addr);	for(i = 0; i < parent.ndata; i++)		if(parent.data[i])			free(parent.data[i]);	parent.ndata = 0;	if(parent.data){		free(parent.data);		parent.data = nil;	}	chanprint(cs->ctl, "browsetopwin clear");	chanprint(cs->ctl, "browsetopscr max 0");	chanprint(cs->ctl, "browsetopscr value 0");}voidaddparent(char *str){	parent.data = realloc(parent.data, (parent.ndata+1)*sizeof(char*));	parent.data[parent.ndata] = strdup(str);	parent.ndata++;	chanprint(cs->ctl, "browsetopwin accumulate %q", str);	chanprint(cs->ctl, "browsetopscr max %d", parent.ndata);}voidclearchildren(void){	int i;	for(i = 0; i < nchildren; i++){		if(children[i].address)			free(children[i].address);		if(children[i].data)			free(children[i].data);	}	nchildren= 0;	chanprint(cs->ctl, "browsebotwin clear");	chanprint(cs->ctl, "browsebotwin topline 0");	chanprint(cs->ctl, "browsebotscr max 0");	chanprint(cs->ctl, "browsebotscr value 0");	selected = -1;}voidaddchild(char *addr, char *data){	children[nchildren].address = addr;	children[nchildren].data = data;	nchildren++;	chanprint(cs->ctl, "browsebotwin accumulate %q", data);	chanprint(cs->ctl, "browsebotscr max %d", nchildren);}static voidplaylistselect(int n){	if(playlist.selected >= 0 && playlist.selected < playlist.nentries){		chanprint(cs->ctl, "playlistwin select %d 0", playlist.selected);		deactivatebuttons(1<<Playbutton);	}	playlist.selected = n;	if(playlist.selected < 0 || playlist.selected >= playlist.nentries)		return;	activatebuttons(1<<Playbutton);	chanprint(cs->ctl, "playlistwin select %d 1", n);	if(n >= 0 && n <= playlist.nentries - Dy(playlistwin->rect)/romanfont->height)		n--;	else		n = playlist.nentries - Dy(playlistwin->rect)/romanfont->height + 1;	if(n < 0) n = 0;	if(n < playlist.nentries){		chanprint(cs->ctl, "playlistwin topline %d",  n);		chanprint(cs->ctl, "playlistscr value %d",  n);	}	chanprint(cs->ctl, "playlist show");}voidupdateplaylist(int trunc){	char *s;	int fd;	while(cs->ctl->s - cs->ctl->n < cs->ctl->s/4)		sleep(100);	if(trunc){		playlistselect(-1);		chanprint(cs->ctl, "playlistwin clear");		chanprint(cs->ctl, "playlistwin topline 0");		chanprint(cs->ctl, "playlistscr max 0");		chanprint(cs->ctl, "playlistscr value 0");		deactivatebuttons(1<<Playbutton | 1<<Deletebutton);		chanprint(cs->ctl, "playlistwin show");		chanprint(cs->ctl, "playlistscr show");		s = smprint("%s/ctl", srvmount);		if((fd = open(s, OWRITE)) >= 0){			fprint(fd, "reread");			close(fd);		}		free(s);		return;	}	if(playlist.entry[playlist.nentries].onum){		s = getoneliner(playlist.entry[playlist.nentries].onum);		chanprint(cs->ctl, "playlistwin accumulate %q", s);		free(s);	}else		chanprint(cs->ctl, "playlistwin accumulate %q", playlist.entry[playlist.nentries].file);	playlist.nentries++;	chanprint(cs->ctl, "playlistscr max %d", playlist.nentries);	if(playlist.selected == playlist.nentries - 1)		playlistselect(playlist.selected);	activatebuttons(1<<Playbutton|1<<Deletebutton);	chanprint(cs->ctl, "playlistscr show");	chanprint(cs->ctl, "playlistwin show");}voidbrowseto(char *onum, int line){	onum = strdup(onum);	setparent(onum);	clearchildren();	fillbrowsetop(onum);	chanprint(cs->ctl, "browsetop show");	fillbrowsebot(onum);	if(line){		chanprint(cs->ctl, "browsebotscr value %d", line);		chanprint(cs->ctl, "browsebotwin topline %d", line);

⌨️ 快捷键说明

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