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

📄 wrdt_mac.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 3 页
字号:
	rect.left=x-r; rect.right=x+r;	rect.top=y-r; rect.bottom=y+r;		switch(sw)	{	case 0:	case 1: //frame		SET_G_COLOR(p1,graphicWorld[activeGraphics]);		FrameOval(&rect);		break;	case 2:	//filled circle		SET_G_COLOR(p2,graphicWorld[activeGraphics]);		PaintOval(&rect);		SET_G_COLOR(p1,graphicWorld[activeGraphics]);		FrameOval(&rect);		break;	}	SetGWorld(oldGW, oldGD);	UnlockPixels(GACTIVE_PIX);	if( activeGraphics==dispGraphics ){		rect.right++; rect.bottom++;		dev_remake_disp(rect);		dev_redisp(rect);	}}static void dev_set_text_attr(int esccode);static int Parse(int c);void dev_init(int version){	int i;		inkey_flag = 0;	dev_gon_flag=1;	dev_set_text_attr(37); //white	dev_change_1_palette(0, black);	dev_change_1_palette(16, black); //for gon(0)	    gmode_mask=0xF;   	if( version<=0 || (380<=version && version<=399))			gmode_mask_gline=0x7;  //change gline behavier	else    gmode_mask_gline=0xF;	for(i=0; i<gvram_bank_num; i++){		dev_gscreen(i, dispGraphics); dev_clear_graphics(0xFF);	}    dev_gscreen(0, 0);	dev_text_clear_all(); wrd_ton=1;   	dev_remake_disp(portRect);	dev_redisp(portRect);	dev_move_coursor(1,1);	startpal=endpal=0;	pallette_exist=true;	fading=false;	Parse(-1); //initialize parser		wrd_init_path();}static OSErr get_vsscreen(){	OSErr	err;	Rect	rect=portRect;		rect.right++; rect.bottom++;  //keep safty zone	err=NewGWorld(&graphicWorld[gvram_bank_num], 8, &rect,						0, 0,0);	if( ! err ){		ctl->cmsg(CMSG_INFO, VERB_NORMAL, "get gvram bank %d",gvram_bank_num );		gvram_bank_num++;	}else{		ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "Can't get gvram bank %d",gvram_bank_num );	}	return err;}static OSErr dev_vsget(int num){	OSErr	err;	int i;	for( i=gvram_bank_num; i<2+num; i++ ){		err=get_vsscreen();		if( err ) return err;	}	return 0;}static OSErr dev_setup(){	static OSErr	err=0;	int		i;	Rect		destRect;		if( err ) return err; // once errored, do not retry		destRect.top=destRect.left=0;	destRect.right=640;	destRect.bottom=480;	gvram_bank_num=0;		err=NewGWorld(&dispWorld, 8, &destRect,0,0,0);	if( err ) return err;		{	Rect charbufRect={0,0,16,32};	err=NewGWorld(&charbufWorld, 8, &charbufRect,0,0,0);	if( err ) return err;	mac_setfont(charbufWorld, WRD_FONTNAME);	}		//wrd_palette= NewPalette( 33, 0, pmTolerant, 0x0000);	//if( wrd_palette )  SetPalette(win.ref, wrd_palette, true);		for( i=0; i<=1; i++){		err=get_vsscreen();		if( err ) return err;	}		dev_init_text_color();		mac_setfont(dispWorld, WRD_FONTNAME);	dev_init(-1);	return 0; //noErr}// ***********************************************#pragma mark -/*VTParse Table externals*/extern int groundtable[];extern int csitable[];extern int dectable[];extern int eigtable[];extern int esctable[];extern int iestable[];extern int igntable[];extern int scrtable[];extern int scstable[];extern int mbcstable[];extern int smbcstable[];#define MAXPARAM 20#define DEFAULT -1#define TAB_SET 8#define MBCS 1#define CATTR_LPART (1)#define CATTR_16FONT (1<<1)#define CATTR_COLORED (1<<2)#define CATTR_BGCOLORED (1<<3) #define CATTR_TXTCOL_MASK_SHIFT 4#define CATTR_TXTCOL_MASK (7<<CATTR_TXTCOL_MASK_SHIFT)#define CATTR_INVAL (1<<31)static void DelChar(int /*x*/, int /*y*/){}#define ClearLine(y) dev_text_clear(1, (y), 80, (y), 0, 0, false)#define ClearRight()	dev_text_clear(wrd_coursor_x, wrd_coursor_y, 80, wrd_coursor_y, 0, 0, false)#define ClearLeft()		dev_text_clear(1, wrd_coursor_y, wrd_coursor_x, wrd_coursor_y, 0, 0, false)static void RedrawInject(int x1, int y1, int x2, int y2, Boolean){	Rect rect;	SetRect(&rect,x1,y1,x2,y2);	dev_remake_disp(rect);	dev_redisp(rect);}static void dev_set_text_attr(int esccode){start:	switch(esccode){	default:	  esccode=37; goto start;	case 17: esccode=31; goto start;	case 18: esccode=34; goto start;	case 19: esccode=35; goto start;	case 20: esccode=32; goto start;	case 21: esccode=33; goto start;	case 22: esccode=36; goto start;	case 23: esccode=37; goto start;	case 16:	case 30:	case 31:	case 32:	case 33:	case 34:	case 35:	case 36:	case 37:	  wrd_text_color_attr&=~CATTR_TXTCOL_MASK;	  wrd_text_color_attr|=(			  ((esccode>=30)?(esccode-30):(esccode-16))<<			  CATTR_TXTCOL_MASK_SHIFT);	  wrd_text_color_attr|=CATTR_COLORED;	  wrd_text_color_attr&=~CATTR_BGCOLORED;	  break;	case 40:	case 41:	case 42:	case 43:	case 44:	case 45:	case 46:	case 47:	  wrd_text_color_attr&=~CATTR_TXTCOL_MASK;	  wrd_text_color_attr|=(esccode-40)<<CATTR_TXTCOL_MASK_SHIFT;	  wrd_text_color_attr|=CATTR_BGCOLORED;	  break;	}}static int Parse(int c){  static int *prstbl=groundtable;  static char mbcs;  static int params[MAXPARAM],nparam=0;  static int hankaku=0;  static int savcol,savline;  static long savattr;  if(c==-1) {    prstbl=groundtable;    mbcs=0;    nparam=0;    hankaku=0;    savcol=savline=0;    return 0;  }  if(mbcs&&     prstbl !=mbcstable&&     prstbl !=scstable&&     prstbl !=scstable){    mbcs=0;  }  switch(prstbl[c]){  case CASE_IGNORE_STATE:    prstbl=igntable;    break;  case CASE_IGNORE_ESC:    prstbl=iestable;    break;  case CASE_ESC:    prstbl=esctable;    break;  case CASE_ESC_IGNORE:    prstbl=eigtable;    break;  case CASE_ESC_DIGIT:    if(nparam<MAXPARAM){      if(params[nparam]==DEFAULT){	params[nparam]=0;      }      if( c==' ' ){      	c='0';      }      params[nparam]*=10;      params[nparam]+=c-'0';    }    break;  case CASE_ESC_SEMI:    nparam++;    params[nparam]=DEFAULT;    break;  case CASE_TAB:    wrd_coursor_x+=TAB_SET;    wrd_coursor_x&=~(TAB_SET-1);    break;  case CASE_BS:    if(wrd_coursor_x > 0)      wrd_coursor_x--;#if 0 /* ^H maybe work backward character in MIMPI's screen */    DelChar(wrd_coursor_y,wrd_coursor_x);    mywin.scrnbuf[wrd_coursor_y][wrd_coursor_x].c=0;    mywin.scrnbuf[wrd_coursor_y][wrd_coursor_x].attr=0;#endif    break;  case CASE_CSI_STATE:    nparam=0;    params[0]=DEFAULT;    prstbl=csitable;    break;  case CASE_SCR_STATE:    prstbl=scrtable;    mbcs=0;    break;  case CASE_MBCS:    hankaku=0;    prstbl=mbcstable;    mbcs=MBCS;    break;  case CASE_SCS_STATE:    if(mbcs)      prstbl=smbcstable;    else      prstbl=scstable;    break;  case CASE_GSETS:    wrd_text_color_attr=(mbcs)?(wrd_text_color_attr|CATTR_16FONT):      (wrd_text_color_attr&~(CATTR_16FONT));    if(!mbcs){      hankaku=(c=='I')?1:0;    }    prstbl=groundtable;    break;  case CASE_DEC_STATE:    prstbl =dectable;    break;  case CASE_SS2:  case CASE_SS3:    /*These are ignored because this will not accept SS2 SS3 charset*/  case CASE_GROUND_STATE:    prstbl=groundtable;    break;  case CASE_CR:    wrd_coursor_x=1;    prstbl=groundtable;    break;  case CASE_IND:  case CASE_VMOT:    wrd_coursor_y++;    wrd_coursor_x=1;    prstbl=groundtable;    break;  case CASE_CUP:    wrd_coursor_y=(params[0]<1)?0:params[0];    if(nparam>=1)      wrd_coursor_x=(params[1]<1)?0:params[1];    else      wrd_coursor_x=0;    prstbl=groundtable;    break;  case CASE_PRINT:    if(wrd_text_color_attr&CATTR_16FONT){      if(!(wrd_text_color_attr&CATTR_LPART)&&(wrd_coursor_x==COLS)){	wrd_coursor_x++;	return 1;      }      wrd_text_color_attr^=CATTR_LPART;    }    else      wrd_text_color_attr&=~CATTR_LPART;    DelChar(wrd_coursor_y,wrd_coursor_x);    if(hankaku==1)      c|=0x80;    //mywin.scrnbuf[wrd_coursor_y][wrd_coursor_x].attr=wrd_text_color_attr;    //mywin.scrnbuf[wrd_coursor_y][wrd_coursor_x].c=c;    wrd_coursor_x++;    break;  case CASE_CUU:    wrd_coursor_y-=((params[0]<1)?1:params[0]);    prstbl=groundtable;    break;  case CASE_CUD:    wrd_coursor_y+=((params[0]<1)?1:params[0]);    prstbl=groundtable;    break;  case CASE_CUF:    wrd_coursor_x+=((params[0]<1)?1:params[0]);    prstbl=groundtable;    break;  case CASE_CUB:    wrd_coursor_x-=((params[0]<1)?1:params[0]);  	if( wrd_coursor_x<1 ) wrd_coursor_x=1;    prstbl=groundtable;    break;  case CASE_ED:    switch(params[0]){    case DEFAULT:    case 0:      {	int j;	  ClearRight();	for(j=wrd_coursor_y+1;j<=LINES;j++)	  ClearLine(j);	      }      break;    case 1:      {	int j;	  ClearLeft();	for(j=1;j<wrd_coursor_y;j++)	  ClearLine(j);	      }      break;    case 2:      {	//int j;	//for(j=0;j<LINES;j++){	//  free(mywin.scrnbuf[j]);	//  mywin.scrnbuf[j]=NULL;	//}	dev_text_clear_all();	wrd_coursor_y=1;	wrd_coursor_x=1;	break;      }    }    RedrawInject(0,0,SIZEX,SIZEY,false);    prstbl=groundtable;    break;  case CASE_DECSC:    savcol=wrd_coursor_x;    savline=wrd_coursor_y;    savattr=wrd_text_color_attr;    prstbl=groundtable;  case CASE_DECRC:    wrd_coursor_x=savcol;    wrd_coursor_y=savline;    wrd_text_color_attr=savattr;    prstbl=groundtable;    break;  case CASE_SGR:    {      int i;      for(i=0;i<nparam+1;i++)		dev_set_text_attr(params[i]);    }    prstbl=groundtable;    break;  case CASE_EL:    switch(params[0]){    case DEFAULT:    case 0:      ClearRight();      break;    case 1:      ClearLeft();      break;    case 2:      ClearLine(wrd_coursor_y);      break;    }    RedrawInject(0,0,SIZEX,SIZEY,false);    prstbl=groundtable;    break;  case CASE_NEL:    wrd_coursor_y++;    wrd_coursor_x=1;    wrd_coursor_y=(wrd_coursor_y<LINES)?wrd_coursor_y:LINES;    break;/*Graphic Commands*/  case CASE_MY_GRAPHIC_CMD:    //GrphCMD(params,nparam);    prstbl=groundtable;    break;  case CASE_DL:	dev_text_scroll(1, wrd_coursor_y+params[0], COLS, LINES, 0, 0, 0, params[0]);    RedrawInject(0,0,SIZEX,SIZEY,false);	prstbl=groundtable;	break;/*Unimpremented Command*/  case CASE_ICH:  case CASE_IL:  case CASE_DCH:  case CASE_DECID:  case CASE_DECKPAM:  case CASE_DECKPNM:  //case CASE_IND:  case CASE_HP_BUGGY_LL:  case CASE_HTS:  case CASE_RI:  case CASE_DA1:  case CASE_CPR:  case CASE_DECSET:  case CASE_RST:  case CASE_DECSTBM:  case CASE_DECREQTPARM:  case CASE_OSC:  case CASE_RIS:  case CASE_HP_MEM_LOCK:  case CASE_HP_MEM_UNLOCK:  case CASE_LS2:  case CASE_LS3:  case CASE_LS3R:  case CASE_LS2R:  case CASE_LS1R:    ctl->cmsg(CMSG_INFO,VERB_VERBOSE,"NOT IMPREMENTED:%d\n",prstbl[c]);    prstbl=groundtable;    break;  case CASE_BELL:  case CASE_IGNORE:  default:    break;  }  if( prstbl==groundtable ) return 1;  return 0;}// ***********************************************#pragma mark -#pragma mark ================== Wrd Windowstatic int open_WrdWin();static void click_WrdWin(Point local, short modifiers);static void update_WrdWin();static int	message_WrdWin(int message, long param);//#define win mac_WrdWindow  //already definedMacWindow win={	0,	//WindowRef	open_WrdWin,	click_WrdWin,	update_WrdWin,	goaway_default,	close_default,	message_WrdWin,	0, 50,70};static int open_WrdWin()		/*success-> return 0;*/{	open_window(&win, kWrdWinID);	position_window(&win);		return 0;}static void click_WrdWin(Point /*local*/, short /*modifiers*/){}static void update_WrdWin(){	dev_redisp(portRect);}static int	message_WrdWin(int message, long /*param*/){	Rect rect;		switch(message){	case MW_GROW:		rect=win.ref->portRect;		//rect.right-=15; rect.bottom-=15;		rect = win.ref->portRect;		rect.right  -= 15;		//rect.bottom -= 15;		return 0;		}	return -1;  //not supported}// ***********************************************#pragma mark -/*ARGSUSED*/static int wrdt_open(char * /*wrdt_opts*/){	//  success -> return 0	OSErr	err;		err=dev_setup();	if( err ) return err;    wrdt.opened = 1;    wrd_argc = 0;    inkey_flag = 0;	ctl->cmsg(CMSG_INFO,VERB_VERBOSE,"open macintosh wrd player\n");    return 0;}static void wrdt_update_events(void){}

⌨️ 快捷键说明

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