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

📄 wrdt_mac.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 3 页
字号:
static void wrdt_close(void){    wrdt.opened = 0;    inkey_flag = 0;}static char *wrd_event2string(int id){    char *name;    name = event2string(id);    if(name != NULL)	return name + 1;    return "";}// **************************************************#pragma mark -static void mac_wrd_pal(int pnum, int wrd_args[]){	int code;	RGBColor color;		for( code=0; code<16; code++ ){		color.red=((wrd_args[code] >> 8) & 0x000F) * 0x1111;		color.green=((wrd_args[code] >> 4) & 0x000F) * 0x1111;		color.blue=(wrd_args[code] & 0x000F) * 0x1111;		dev_palette[pnum][code]=color;		if( pnum==0 ){			dev_change_1_palette(code, color);		}	}	if( pnum==0 ){		//dev_remake_disp(portRect);		dev_redisp(portRect);	}}static void wrd_fadestep(int nowstep, int maxstep){	RGBColor	pal[16];	int code;	//static unsigned long	lasttick=0;	static int	skip_num;		//if( nowstep!=1 && nowstep!=maxstep /*&& (nowstep%4)==0*/ && lasttick==TickCount() ){	//	return;  //too fast fade. skip fading.	//}		if( nowstep==1 ){		skip_num=0;	}		if( nowstep!=maxstep && !mac_flushing_flag){	//consider skipping		const int	skip_threshold[11]={99,99,6,5,4, 2,1,0,0,0,0};		int	threshold= skip_threshold[ (int)(aq_filled_ratio()*10) ];		if( skip_num<threshold ){			skip_num++;			return;     // system is busy		}	}		skip_num=0;	for( code=0; code<16; code++ ){		pal[code].red=			(dev_palette[startpal][code].red*(maxstep-nowstep) +				dev_palette[endpal][code].red*nowstep)/maxstep;		pal[code].green=			(dev_palette[startpal][code].green*(maxstep-nowstep) +				dev_palette[endpal][code].green*nowstep)/maxstep;		pal[code].blue=			(dev_palette[startpal][code].blue*(maxstep-nowstep) +				dev_palette[endpal][code].blue*nowstep)/maxstep;	}	dev_change_palette(pal);	dev_redisp(portRect);	if( nowstep==maxstep ) fading=false;	//lasttick=TickCount();}static void mac_wrd_fade(int p1, int p2, int speed){	startpal=p1; endpal=p2;	if( fading ){	//double fade command		wrd_fadestep(1, 1);	}	if(speed==0){		dev_change_palette( dev_palette[p2]);		//dev_remake_disp(portRect);		dev_redisp(portRect);	}else{		fading=true;	}}static void dev_gon(int gon){	dev_gon_flag=gon;	dev_remake_disp(portRect);	dev_redisp(portRect);}static void dev_palrev(int paln ){	int code;	for( code=0; code<16; code++ ){		dev_palette[paln][code].red   ^= 0xFFFF;		dev_palette[paln][code].green ^= 0xFFFF;		dev_palette[paln][code].blue  ^= 0xFFFF;	}	if( paln==0 ){		dev_change_palette(dev_palette[0]);		dev_redisp(portRect);	}}static int wrd_mag(char* filename, int x, int y, int /*s*/, int p){	int		err;	Rect	rect;	//char	fullpath[255];	GDHandle	oldGD;	GWorldPtr	oldGW;		GetGWorld(&oldGW, &oldGD);	LockPixels(GACTIVE_PIX);		SetGWorld(graphicWorld[activeGraphics],0);		err= mac_mag_load(filename,  x,y, GACTIVE_PIX, p ,&rect);		SetGWorld(oldGW, oldGD);	UnlockPixels(GACTIVE_PIX);		if( err ) return err;		if( p==0 || p==2 ){		dev_change_palette(dev_palette[17]);		rect=portRect;	//update all	}	if( activeGraphics==dispGraphics || p==0 || p==2 ){		dev_remake_disp(rect);		dev_redisp(rect);	}	memcpy(&dev_palette[18+ (activeGraphics==0? 0:1)]					, &dev_palette[17], 16*sizeof(RGBColor));	return 0; //no error}static int wrd_pho(char* filename){	//char	fullpath[255];	GDHandle	oldGD;	GWorldPtr	oldGW;		GetGWorld(&oldGW, &oldGD);	LockPixels(GACTIVE_PIX);	SetGWorld(graphicWorld[activeGraphics],0);	mac_pho_load(filename, GACTIVE_PIX);	SetGWorld(oldGW, oldGD);	UnlockPixels(GACTIVE_PIX);		if( activeGraphics==dispGraphics ){		dev_remake_disp(portRect);		dev_redisp(portRect);	}	return 0; //no error}static void wrd_load_default_image(){	char	filename[256], *p;		strncpy(filename, current_file_info->filename, sizeof(filename));	p= strrchr( filename, '.' );	if( p==0 ) return;	strncpy( p, ".mag", sizeof(filename) - (p - filename) - 1 );	filename[sizeof(filename) - 1] = '\0';	ctl->cmsg(CMSG_INFO, VERB_VERBOSE,		  "@DEFAULT_LOAD_MAG(%s)", filename);	if( wrd_mag(filename, WRD_NOARG, WRD_NOARG, 1,0)==0 ) //no err		return;			//retry pho file	strncpy(filename, current_file_info->filename sizeof(filename));	p= strrchr( filename, '.' );	if( p==0 ) return;	strncpy( p, ".pho", sizeof(filename) - (p - filename) - 1 );	filename[sizeof(filename) - 1] = '\0';	wrd_pho(filename);}// **************************************************#pragma mark -static void mac_wrd_color(int c){	dev_set_text_attr(c);}static void mac_wrd_DrawText(const char* str, int len){	int i;		for( i=0; i<=len; ){		if( str[i]==0 || i==len ){			dev_text_output(str, i);			break;		}else if( wrd_coursor_x+i>80 ){			dev_text_output(str, i);			dev_newline();			//i++;			str+=i; len-=i; i=0;				}else if( str[i]=='\x1b' ){ //esc sequence			if( i ){				dev_text_output(str, i);				str+=i; len-=i; i=0;			}			for(;;i++){				if( Parse(str[i]) ){					break; //esc sequence ended				}			}			i++;			str+=i; len-=i; i=0;					}else if (str[i]=='\t' ){ //tab space			int newx;			dev_text_output(str, i);			newx=((wrd_coursor_x-1)|7)+2;			dev_text_clear(wrd_coursor_x, wrd_coursor_y, newx-1, wrd_coursor_y, 0, 0, true);			dev_move_coursor(newx,wrd_coursor_y);			i++;			str+=i; len-=i; i=0;		}else{			i++;		}	}}static void mac_wrd_doESC(const char* code ){	char	str[20]="\33[";	strncat(str, code, sizeof(str) - strlen(str) - 1);        str[sizeof(str)-1] = '\0';	mac_wrd_DrawText(str, strlen(str));}static void mac_wrd_event_esc(int esc){		mac_wrd_doESC(event2string(esc)+1);}static void wrdt_apply(int cmd, int wrd_argc, int wrd_args[]){    char *p;    char *text;    int i, len;		if( ! win.show ) return;    //wrd_args[wrd_argc++] = arg;    if(cmd == WRD_ARG)	return;    if(cmd == WRD_MAGPRELOAD){	//char *p = wrd_event2string(arg);	 /* Load MAG file */	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@WRD_MAGPRELOAD"));    wrd_argc = 0;	return;	}    if(inkey_flag)	printf("* ");    switch(cmd)    {    case WRD_LYRIC:    case WRD_NL:		if(cmd == WRD_NL)			text = "\n";		else{			p = wrd_event2string(wrd_args[0]);			len = strlen(p);			text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len));			code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL);		}		len = strlen(text);		if( len ){		mac_wrd_DrawText(text, text[len-1]=='\n'? len-1:len);		if( text[len-1]=='\n' ){			dev_newline();		}		ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", text);		}		reuse_mblock(&tmpbuffer);		break;      case WRD_COLOR:		mac_wrd_color(wrd_args[0]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "@COLOR(%d)", wrd_args[0]));	break;      case WRD_END: /* Never call */	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,"@END"));	break;      case WRD_ESC:      	mac_wrd_event_esc(wrd_args[0]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@ESC(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_EXEC:	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@EXEC(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_FADE:	mac_wrd_fade(wrd_args[0], wrd_args[1], wrd_args[2]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@FADE(%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2]));	break;      case WRD_FADESTEP:	wrd_fadestep(wrd_args[0], WRD_MAXFADESTEP);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@FADESTEP(%d/%d)", wrd_args[0], WRD_MAXFADESTEP));	break;      case WRD_GCIRCLE:	dev_gcircle(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],		  wrd_args[4], wrd_args[5]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GCIRCLE(%d,%d,%d,%d,%d,%d)",		  wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],		  wrd_args[4], wrd_args[5]));	break;      case WRD_GCLS:	dev_clear_graphics(wrd_args[0]? wrd_args[0]:0xFF);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GCLS(%d)", wrd_args[0]));	break;      case WRD_GINIT:	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "@GINIT()"));	break;      case WRD_GLINE:	dev_gline(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],	       wrd_args[5], wrd_args[6],graphicWorld[activeGraphics]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GLINE(%d,%d,%d,%d,%d,%d,%d)",	       wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],	       wrd_args[5], wrd_args[6]));	break;      case WRD_GMODE:	DEV_SET_GMODE(wrd_args[0]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GMODE(%d)", wrd_args[0]));	break;      case WRD_GMOVE:	wrd_args[0] &= ~0x7;  wrd_args[4] &= ~0x7;  	wrd_args[2] |= 0x7;	dev_gmove(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],	       wrd_args[5], graphicWorld[wrd_args[6]], graphicWorld[wrd_args[7]],	       wrd_args[8], 0, gmode_mask, 0,0,0);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GMOVE(%d,%d, %d,%d, %d,%d, %d,%d,%d)",	       wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],	       wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8]));	break;      case WRD_GON:	dev_gon(wrd_args[0]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GON(%d)", wrd_args[0]));	break;      case WRD_GSCREEN:	dev_gscreen(wrd_args[0], wrd_args[1]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@GSCREEN(%d,%d)", wrd_args[0], wrd_args[1]));	break;      case WRD_INKEY:	inkey_flag = 1;	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "@INKEY - begin"));	break;      case WRD_OUTKEY:	inkey_flag = 0;	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "@INKEY - end"));	break;      case WRD_LOCATE:		dev_move_coursor(wrd_args[0], wrd_args[1]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@LOCATE(%d,%d)", wrd_args[0], wrd_args[1]));	break;      case WRD_LOOP: /* Never call */	break;    case WRD_MAG:   	wrd_mag(wrd_event2string(wrd_args[0]), wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4]);/* 	p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); *//* 	strcpy(p, "@MAG("); *//* 	strcat(p, wrd_event2string(wrd_args[0])); *//* 	strcat(p, ","); *//* 	for(i = 1; i < 3; i++) *//* 	{ *//* 	    if(wrd_args[i] == WRD_NOARG) *//* 		strcat(p, "*,"); *//* 	    else *//* 		sprintf(p + strlen(p), "%d,", wrd_args[i]); *//* 	} *//* 	sprintf(p + strlen(p), "%d,%d)", wrd_args[3], wrd_args[4]); *//* 	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "%s", p)); *//* 	reuse_mblock(&tmpbuffer); */	break;      case WRD_MIDI: /* Never call */	break;      case WRD_OFFSET: /* Never call */	break;      case WRD_PAL:/*       	mac_wrd_pal( wrd_args[0], &wrd_args[1]); *//* 	p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); *//* 	sprintf(p, "@PAL(%03x", wrd_args[0]); *//* 	for(i = 1; i < 17; i++) *//* 	    sprintf(p + strlen(p), ",%03x", wrd_args[i]); *//* 	strcat(p, ")"); *//* 	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "%s", p)); *//* 	reuse_mblock(&tmpbuffer); */	break;      case WRD_PALCHG:	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@PALCHG(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_PALREV:	dev_palrev(wrd_args[0]);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@PALREV(%d)", wrd_args[0]));	break;      case WRD_PATH:	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@PATH(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_PLOAD:   	wrd_pho(wrd_event2string(wrd_args[0]));	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@PLOAD(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_REM:	p = wrd_event2string(wrd_args[0]);	len = strlen(p);	text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len));	code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE, "@REM %s", text));	reuse_mblock(&tmpbuffer);	break;      case WRD_REMARK:	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@REMARK(%s)", wrd_event2string(wrd_args[0])));	break;      case WRD_REST: /* Never call */	break;      case WRD_SCREEN: /* Not supported */	break;      case WRD_SCROLL:	dev_text_scroll(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],					wrd_args[4], wrd_args[5], wrd_args[6], 1);	dev_remake_disp(portRect);	dev_redisp(portRect);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@SCROLL(%d,%d,%d,%d,%d,%d,%d)",		  wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],		  wrd_args[4], wrd_args[5], wrd_args[6]));	break;      case WRD_STARTUP:	dev_init(wrd_args[0]);	dev_init_text_color();	wrd_load_default_image();	inkey_flag = 0;	dev_set_height(400);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@STARTUP(%d)", wrd_args[0]));	break;      case WRD_STOP: /* Never call */	break;      case WRD_TCLS:	dev_text_clear(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],wrd_args[4],wrd_args[5], true);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@TCLS(%d,%d,%d,%d,%d,%d)",		  wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],		  wrd_args[4], wrd_args[5]));	break;      case WRD_TON:	wrd_ton=wrd_args[0];	dev_remake_disp(portRect);	dev_redisp(portRect);	WRD_DEBUG((CMSG_INFO, VERB_VERBOSE,		  "@TON(%d)", wrd_args[0]));	break;      case WRD_WAIT: /* Never call */	break;      case WRD_WMODE: /* Never call */	break;	/* Ensyutsukun */      case WRD_eFONTM:	print_ecmd("FONTM", wrd_args, 1);	break;      case WRD_eFONTP:	print_ecmd("FONTP", wrd_args, 4);	break;      case WRD_eFONTR:	print_ecmd("FONTR", wrd_args, 17);	break;      case WRD_eGSC:	print_ecmd("GSC", wrd_args, 1);	break;      case WRD_eLINE:	print_ecmd("LINE", wrd_args, 1);	break;      case WRD_ePAL:	print_ecmd("PAL", wrd_args, 2);	break;      case WRD_eREGSAVE:	print_ecmd("REGSAVE", wrd_args, 17);	break;      case WRD_eSCROLL:	print_ecmd("SCROLL",wrd_args, 2);	break;      case WRD_eTEXTDOT:	print_ecmd("TEXTDOT", wrd_args, 1);	break;      case WRD_eTMODE:	print_ecmd("TMODE", wrd_args, 1);	break;      case WRD_eTSCRL:	print_ecmd("TSCRL", wrd_args, 0);	break;      case WRD_eVCOPY:	wrd_args[0] &= ~0x7;  wrd_args[4] &= ~0x7;  	wrd_args[2] |= 0x7;	dev_gmove(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],		wrd_args[4],wrd_args[5],	       graphicWorld[wrd_args[6]+(wrd_args[8]? 2:0)],	       graphicWorld[wrd_args[7]+ (wrd_args[8]? 0:2)], 0/*normal copy*/,0,gmode_mask,	       0,0,0 );			//ignore mode in this version, always EMS->GVRAM	print_ecmd("VCOPY", wrd_args, 9);	break;      case WRD_eVSGET:	dev_vsget(wrd_args[0]);	print_ecmd("VSGE", wrd_args, 4);	break;      case WRD_eVSRES:	print_ecmd("VSRES", wrd_args, 0);	break;      case WRD_eXCOPY:	dev_gmove(wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],	     		wrd_args[5], graphicWorld[wrd_args[6]], graphicWorld[wrd_args[7]],	       		wrd_args[8]+0x10, 0/*trans*/, gmode_mask, 0,0,0 );		print_ecmd("XCOPY", wrd_args, 14);	break;	/* Extensionals */      case WRD_START_SKIP:	    mac_RedrawControl(0);	ctl->cmsg(CMSG_INFO, VERB_VERBOSE,		  "WRD START SKIP");	break;      case WRD_END_SKIP:	    mac_RedrawControl(1);	ctl->cmsg(CMSG_INFO, VERB_VERBOSE,		  "WRD END SKIP");	break;#ifdef ENABLE_SHERRY      case WRD_SHERRY_UPDATE:	sry_update();	break;#endif    }    wrd_argc = 0;}

⌨️ 快捷键说明

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