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

📄 slang_c.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 2 页
字号:
static void ctl_close(void){  if (ctl.opened)    {        SLsmg_normal();        SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);        SLsmg_refresh();        SLsmg_reset_smg();        SLang_reset_tty();      ctl.opened=0;    }}static int ctl_read(int32 *valp){  int c;  if (!SLang_input_pending(0))    return RC_NONE;  c=SLang_getkey();    switch(c)      {      case 'h':      case '?':        ctl_help_mode();        return RC_NONE;      case 'V':        *valp=10;        return RC_CHANGE_VOLUME;      case 'v':        *valp=-10;        return RC_CHANGE_VOLUME;      case 'q':        return RC_QUIT;      case 'n':        return RC_NEXT;      case 'p':        return RC_REALLY_PREVIOUS;      case 'r':        return RC_RESTART;      case 'f':        *valp=play_mode->rate;        return RC_FORWARD;      case 'b':        *valp=play_mode->rate;        return RC_BACK;      case 's':	return RC_TOGGLE_PAUSE;      }  return RC_NONE;}/*ARGSUSED*/static void ctl_lyric(int lyricid){    char *lyric;    lyric = event2string(lyricid);    if(lyric != NULL)    {	if(*lyric == ME_KARAOKE_LYRIC)	{	    if(lyric[1] == '/')	    {		display_lyric("\n", LYRIC_WORD_NOSEP);		display_lyric(lyric + 2, LYRIC_WORD_NOSEP);	    }	    else if(lyric[1] == '\\')	    {		display_lyric("\r", LYRIC_WORD_NOSEP);		display_lyric(lyric + 2, LYRIC_WORD_NOSEP);	    }	    else if(lyric[1] == '@' && lyric[2] == 'T')	    {		if(ctl.trace_playing)		{		    display_lyric("\n", LYRIC_WORD_NOSEP);		    display_lyric(lyric + 3, LYRIC_WORD_SEP);		}		else		    display_title(lyric + 3);	    }	    else if(lyric[1] == '@' && lyric[2] == 'L')	    {		init_lyric(lyric + 3);	    }	    else		display_lyric(lyric + 1, LYRIC_WORD_NOSEP);	}	else	{	    if(*lyric == ME_CHORUS_TEXT || *lyric == ME_INSERT_TEXT)		display_lyric("\r", LYRIC_WORD_SEP);	    display_lyric(lyric + 1, LYRIC_WORD_SEP);	}    }}static int cmsg(int type, int verbosity_level, char *fmt, ...){  va_list ap;  char p[1000];  if ((type==CMSG_TEXT || type==CMSG_INFO || type==CMSG_WARNING) &&      ctl.verbosity<verbosity_level)    return 0;  va_start(ap, fmt);  if (!ctl.opened)    {      vfprintf(stderr, fmt, ap);      fprintf(stderr, "\n");    }  else if (ctl.trace_playing)    {      switch(type)      {        /* Pretty pointless to only have one line for messages, but... */      case CMSG_WARNING:      case CMSG_ERROR:      case CMSG_FATAL:        SLsmg_gotorc(2,0);      SLsmg_erase_eol();      SLsmg_bold();        vsnprintf(p, sizeof(p), fmt, ap);        SLsmg_write_string(p);      SLsmg_normal();        _ctl_refresh();        if (type==CMSG_WARNING)          sleep(1); /* Don't you just _HATE_ it when programs do this... */        else          sleep(2);        SLsmg_gotorc(2,0);      SLsmg_erase_eol();        _ctl_refresh();        break;      }    }  else    {      SLsmg_gotorc(msg_row++,0);      if(msg_row==SLtt_Screen_Rows){	int i;        msg_row=6;	for(i=6;i<=SLtt_Screen_Rows;i++){          SLsmg_gotorc(i,0);          SLsmg_erase_eol();	}      }      switch(type)      {      default:        vsnprintf(p, sizeof(p), fmt, ap);        SLsmg_write_string(p);        _ctl_refresh();        break;      case CMSG_WARNING:      SLsmg_bold();        vsnprintf(p, sizeof(p), fmt, ap);        SLsmg_write_string(p);      SLsmg_normal();        _ctl_refresh();        break;      case CMSG_ERROR:      case CMSG_FATAL:      SLsmg_bold();        vsnprintf(p, sizeof(p), fmt, ap);        SLsmg_write_string(p);      SLsmg_normal();        _ctl_refresh();        if (type==CMSG_FATAL)          sleep(2);        break;      }    }  va_end(ap);  return 0;}/* Indicator */static void reset_indicator(void){    int i;    memset(comment_indicator_buffer, ' ', indicator_width - 1);    comment_indicator_buffer[indicator_width - 1] = '\0';    next_indicator_chan = -1;    indicator_last_update = get_current_calender_time();    indicator_mode = INDICATOR_DEFAULT;    indicator_msgptr = NULL;    for(i = 0; i < MAX_CHANNELS; i++)    {	instr_comment[i].last_note_on = 0.0;	instr_comment[i].comm = channel_instrum_name(i);    }}static void update_indicator(void){    double t;    int i;    char c;    t = get_current_calender_time();    if(indicator_mode != INDICATOR_DEFAULT)    {	int save_chan;	if(indicator_last_update + SCRMODE_OUT_THRESHOLD > t)	    return;	save_chan = next_indicator_chan;	reset_indicator();	next_indicator_chan = save_chan;    }    else    {	if(indicator_last_update + INDICATOR_UPDATE_TIME > t)	    return;    }    indicator_last_update = t;    if(indicator_msgptr != NULL && *indicator_msgptr == '\0')	indicator_msgptr = NULL;    if(indicator_msgptr == NULL)    {	if(next_indicator_chan >= 0 &&	   instr_comment[next_indicator_chan].comm != NULL &&	   *instr_comment[next_indicator_chan].comm)	{	    current_indicator_chan = next_indicator_chan;	}	else	{	    int prog;	    prog = instr_comment[current_indicator_chan].prog;	    for(i = 0; i < MAX_CHANNELS; i++)	    {		current_indicator_chan++;		if(current_indicator_chan == MAX_CHANNELS)		    current_indicator_chan = 0;		if(instr_comment[current_indicator_chan].comm != NULL &&		   *instr_comment[current_indicator_chan].comm &&		   instr_comment[current_indicator_chan].prog != prog &&		   (instr_comment[current_indicator_chan].last_note_on + CHECK_NOTE_SLEEP_TIME > t ||		    instr_comment[current_indicator_chan].disp_cnt == 0))		    break;	    }	    if(i == MAX_CHANNELS)		return;	}	next_indicator_chan = -1;	if(instr_comment[current_indicator_chan].comm == NULL ||	   *instr_comment[current_indicator_chan].comm == '\0')	    return;	snprintf(current_indicator_message, indicator_width, "%03d:%s   ",		instr_comment[current_indicator_chan].prog,		instr_comment[current_indicator_chan].comm);	instr_comment[current_indicator_chan].disp_cnt++;	indicator_msgptr = current_indicator_message;    }    c = *indicator_msgptr++;    for(i = 0; i < indicator_width - 2; i++)	comment_indicator_buffer[i] = comment_indicator_buffer[i + 1];    comment_indicator_buffer[indicator_width - 2] = c;    SLsmg_printfrc(2,0,comment_indicator_buffer);    ctl_refresh();}static void display_lyric(char *lyric, int sep){    char *p;    int len, idlen, sepoffset;    static int crflag = 0;    if(lyric == NULL)    {	indicator_last_update = get_current_calender_time();	crflag = 0;	return;    }    if(indicator_mode != INDICATOR_LYRIC || crflag)    {	memset(comment_indicator_buffer, 0, indicator_width);	SLsmg_gotorc(lyric_row,0);        SLsmg_erase_eol();	ctl_refresh();	indicator_mode = INDICATOR_LYRIC;	crflag = 0;    }    if(*lyric == '\0')    {	indicator_last_update = get_current_calender_time();	return;    }    else if(*lyric == '\n')    {	if(!ctl.trace_playing)	{	    crflag = 1;	    lyric_row++;	    SLsmg_gotorc(0,lyric_row);	    return;	}	else	    lyric = " / ";    }    if(strchr(lyric, '\r') != NULL)    {	crflag = 1;	if(!ctl.trace_playing)	{	    int i;	    for(i = title_row+1; i <= lyric_row; i++)	    {		SLsmg_gotorc(i,0);		SLsmg_erase_eol();	    }	    lyric_row = title_row+1;	}	if(lyric[0] == '\r' && lyric[1] == '\0')	{	    indicator_last_update = get_current_calender_time();	    return;	}    }    idlen = strlen(comment_indicator_buffer);    len = strlen(lyric);    if(sep)    {	while(idlen > 0 && comment_indicator_buffer[idlen - 1] == ' ')	    comment_indicator_buffer[--idlen] = '\0';	while(len > 0 && lyric[len - 1] == ' ')	    len--;    }    if(len == 0)    {	/* update time stamp */	indicator_last_update = get_current_calender_time();	reuse_mblock(&tmpbuffer);	return;    }    sepoffset = (sep != 0);    if(len >= indicator_width - 2)    {	memcpy(comment_indicator_buffer, lyric, indicator_width - 1);	comment_indicator_buffer[indicator_width - 1] = '\0';    }    else if(idlen == 0)    {	memcpy(comment_indicator_buffer, lyric, len);	comment_indicator_buffer[len] = '\0';    }    else if(len + idlen + 2 < indicator_width)    {	if(sep)	    comment_indicator_buffer[idlen] = sep;	memcpy(comment_indicator_buffer + idlen + sepoffset, lyric, len);	comment_indicator_buffer[idlen + sepoffset + len] = '\0';    }    else    {	int spaces;	p = comment_indicator_buffer;	spaces = indicator_width - idlen - 2;	while(spaces < len)	{	    char *q;	    /* skip one word */	    if((q = strchr(p, ' ')) == NULL)	    {		p = NULL;		break;	    }	    do q++; while(*q == ' ');	    spaces += (q - p);	    p = q;	}	if(p == NULL)	{	    SLsmg_gotorc(lyric_row,0);	    SLsmg_erase_eol();	    memcpy(comment_indicator_buffer, lyric, len);	    comment_indicator_buffer[len] = '\0';	}	else	{	    int d, l, r, i, j;	    d = (p - comment_indicator_buffer);	    l = strlen(p);	    r = len - (indicator_width - 2 - l - d);	    j = d - r;	    for(i = 0; i < j; i++)		comment_indicator_buffer[i] = ' ';	    for(i = 0; i < l; i++)		comment_indicator_buffer[j + i] =		    comment_indicator_buffer[d + i];	    if(sep)		comment_indicator_buffer[j + i] = sep;	    memcpy(comment_indicator_buffer + j + i + sepoffset, lyric, len);	    comment_indicator_buffer[j + i + sepoffset + len] = '\0';	}    }    SLsmg_printfrc(lyric_row,0,"%s",comment_indicator_buffer);    ctl_refresh();    reuse_mblock(&tmpbuffer);    indicator_last_update = get_current_calender_time();}static void display_title(char *title){    SLsmg_printfrc(title_row,0,"Title:");    SLsmg_bold();    SLsmg_printfrc(title_row++,7,"%s", title);    SLsmg_normal();    lyric_row = title_row + 1;}static void init_lyric(char *lang){    int i;    if(ctl.trace_playing)      return;    for(i=6;i<=SLtt_Screen_Rows;i++){      SLsmg_gotorc(i,0);      SLsmg_erase_eol();    }}static void ctl_event(CtlEvent *e){    switch(e->type)    {      case CTLE_NOW_LOADING:	ctl_file_name((char *)e->v1);	break;      case CTLE_LOADING_DONE:	break;      case CTLE_PLAY_START:	ctl_total_time((int)e->v1);	break;      case CTLE_PLAY_END:	break;      case CTLE_TEMPO:	break;      case CTLE_METRONOME:	/* update_indicator(); */	break;      case CTLE_CURRENT_TIME:	ctl_current_time((int)e->v1, (int)e->v2);	break;      case CTLE_NOTE:	ctl_note((int)e->v1, (int)e->v2, (int)e->v3, (int)e->v4);	break;      case CTLE_MASTER_VOLUME:	ctl_master_volume((int)e->v1);	break;      case CTLE_PROGRAM:	ctl_program((int)e->v1, (int)e->v2);	break;      case CTLE_VOLUME:	ctl_volume((int)e->v1, (int)e->v2);	break;      case CTLE_EXPRESSION:	ctl_expression((int)e->v1, (int)e->v2);	break;      case CTLE_PANNING:	ctl_panning((int)e->v1, (int)e->v2);	break;      case CTLE_SUSTAIN:	ctl_sustain((int)e->v1, (int)e->v2);	break;      case CTLE_PITCH_BEND:	ctl_pitch_bend((int)e->v1, (int)e->v2);	break;      case CTLE_MOD_WHEEL:	ctl_pitch_bend((int)e->v1, e->v2 ? -1 : 0x2000);	break;      case CTLE_CHORUS_EFFECT:	break;      case CTLE_REVERB_EFFECT:	break;      case CTLE_LYRIC:	ctl_lyric((int)e->v1);	break;      case CTLE_REFRESH:	ctl_refresh();	break;      case CTLE_RESET:	ctl_reset();	break;    }}/* * interface_<id>_loader(); */ControlMode *interface_s_loader(void){    return &ctl;}

⌨️ 快捷键说明

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