#include #include #include #include #include #include #include #include #include #include #include "Live3D.h" #define ST_____97 //------------------------------------------------------------------------ // // // // Globals // // // //------------------------------------------------------------------------ int GetMAX( int i ); int GetStep( int i ); void MixerMessage( int id, int v ); void MixerInit( char *path , int flag ); void MixerClose( char *path ); void GetMixerName( char *buf ); void PutFileName( char *s ); int FindHwPort( void ); void SelectMixerFiles( void ); void InitMain( void ); void InitEffectVol( void ); //------------------------------------------------------------------------ char gMixFile[80]; int gSaved; int gOnOffRev; int gOnOffChr; int gOnOffSur; int gOnOff4way; extern directvideo=1; int gW, gH; //------------------------------------------------------------------------ #ifdef ST_____97 char *sAudioTitle[]= { " Audio IN (SB Pro) Midi Equalizer Surround ", 0 }; char *sAudioBox[]= { "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ¿ ", "³ Mst Wav Fm CD Lin Mic ³ Mid ³ Low Mid-Mid High³ Lev Dely³ ", "³       ³  ³     ³   ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ Ø Ø Ø Ø Ø Ø ³ Ø ³ Ø Ø Ø Ø ³ Ø Ø ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ Á Á Á Á Á Á ³ Á ³ Á Á Á Á ³ Á Á ³ ", "³ ³ ³ ³ ³ ", "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ", 0 }; char *sMenu[] = { "Exit", "Mic-Echo", "Reverbe", "Chorus", "Level", "4wayQsound", "Surround", 0 }; #define N_OF_MENU 7 #define XPOSOFST -1 #define N_OF_MIX 13 #else char *sAudioTitle[]= { " Audio IN Midi Echo ", 0 }; char *sAudioBox[]= { "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ¿ ", "³ Mst Wav Fm CD Lin Mic ³ Mid ³ Ech ³ ", "³       ³  ³  ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ Ø Ø Ø Ø Ø Ø ³ Ø ³ Ø ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ", "³ Á Á Á Á Á Á ³ Á ³ Á ³ ", "³ ³ ³ ³ ", "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ ", 0 }; char *sMenu[] = { "Exit", 0 }; #define N_OF_MENU 1 #define XPOSOFST 10 #define N_OF_MIX 8 #endif char *sHelp[] = { "³ Quit : Alt-X ³ Value Change:Pgup/Pgdown, +/-, / ³ [MX ver 1.10] ³", "³ Save Mixer:F2 ³ Load Mixer: F3 ³ Move Menu:TAB,BS ³ Togle Set:SPC ³", 0 }; char sBar[]="³ØÁ"; char *sMicEcho[] = { //1 MicEcho " Level  ", " Time  ", " Feedback  ", 0 }; char *sRevType[] = { //2 RevType " Room 1 ", " Room 2 ", " Room 3 ", " Hall 1 ", " Hall 2 ", " Plate ", " Delay ", " Pan Delay ", " OFF ", 0 }; char *sChrType[] = { //3 ChrType " Chorus 1 ", " Chorus 2 ", " Chorus 3 ", " Chorus 4 ", " FB Chorus ", " Flanger ", " Short Delay ", " FB Delay ", " OFF ", 0 }; char *sLevel[] = { //4 Rev/Cho Level " Rev. Lev  ", " Rev. Time  ", " Rev. Feed  ", " Chr. Lev  ", " Chr. Delay  ", " Chr. Feed  ", " Chr. Rate  ", " Chr. Depth  ", " Aud. Rever  ", " Aud. Chrou  ", " Mid. Rever  ", " Mid. Chrou  ", 0 }; char *s4way[] = { //5 4way qsound " OFF ", " ON ", 0 }; char *sSpeaker[] = { //6 Speaker " 2 Speaker ", " 4 Speaker ", " OFF ", 0 }; char *sTest[] = { //Test " Wave ", " Midi ", " Cd ", 0 }; #define CACT 0x3e #define CDIS 0x1F #define CREV 0x2e int *gBuf[16]; //----------------------------------------------------------------- // // Key Input // //----------------------------------------------------------------- int wkey( void ) { int c, d; while(!kbhit()); c=getch(); if(kbhit()) { c = c|(getch()<<8); } return c; } //----------------------------------------------------------------- // // string IO // //----------------------------------------------------------------- void PutTextAttr( int x, int y, char *s, int attr ) { gotoxy(x,y); textattr( attr ); cprintf("%s",s ); } void PutStrings( int x, int y, char **s ) { while( *s ) { gotoxy( x,y++ ); cprintf( *s++ ); } } //----------------------------------------------------------------- // // Scroll bar // //----------------------------------------------------------------- void DrawBar( int x, int y, int val, int max, int color ) { char sBar[]="³ØÁ"; char sTop[]="ÑÏ"; int i; int p=y; textattr( color ); gotoxy( x,p ); putch( sBar[0] ); p++; for(i=0; i<6; i++) { gotoxy( x,p ); putch( sBar[1] ); p++; } gotoxy( x,p ); putch( sBar[3] );p++; p=7*val/max; p=7-p; if(p==0) { gotoxy( x,y ); putch( sTop[0] ); } else if(p==7) { gotoxy( x,y+p ); putch( sTop[1] ); } else { gotoxy( x,y+p ); putch( sBar[2] ); } textattr( CACT ); gotoxy( x-1, y+8 ); cprintf("%03u", val ); } //----------------------------------------------------------------- // // scroll bar mixer control // //----------------------------------------------------------------- int aVal[16]; int xPos[16]={13,17,21,25,29,33,39, 45,49,53,57, 63,67 }; int test_bar( void ) { static int x=0; int i,c,max; while(1) { repeat: DrawBar( xPos[x], 10, aVal[x], GetMAX(x), CDIS ); c = wkey(); switch( c ) { case 0x4900: aVal[x]+=GetStep(x); if(aVal[x]>GetMAX(x)) aVal[x]=GetMAX(x); MixerMessage(x, aVal[x] ); goto repeat; case '+': case 0x4800: aVal[x]++; if(aVal[x]>GetMAX(x)) aVal[x]=GetMAX(x); MixerMessage(x, aVal[x] ); goto repeat; case 0x5100: aVal[x]-=GetStep(x); if(aVal[x]<0) aVal[x]=0; MixerMessage(x, aVal[x] ); goto repeat; case '-': case 0x5000: aVal[x]--; if(aVal[x]<0) aVal[x]=0; MixerMessage(x, aVal[x] ); goto repeat; } DrawBar( xPos[x], 10, aVal[x], GetMAX(x), CACT ); switch( c ) { case 0x4B00: x--; if(x<0) x=N_OF_MIX-1; break; case 0x4D00: x++; if(x>N_OF_MIX-1) x=0; break; case 0x3D00 : SelectMixerFiles(); break; case 0x3c00 : GetMixerName( gMixFile ); break; case 0xD: case 0x8: case 0x9: case 0x1B: return 0; case 0x2d00: return 1; } } } //----------------------------------------------------------------- // // text Box // //----------------------------------------------------------------- void DrawBox( int x, int y, int xw, int yw ) { char box[3][3] = { "ÚÄ¿", "³ ³", "ÀÄÙ" }; int i; // upper gotoxy( x,y ); putch( box[0][0] ); for(i=1; iw ) w=t; s++; h++; } w++;h++; if( flag ) { if( gBuf[ord]==NULL ) { long l=(w+1)*(h+1); l<<=1; gBuf[ord]=(int*)farmalloc( l ); } CopyMem( x, y, w+1, h+1, gBuf[ord] ); DrawBox( x, y, w, h ); } s=str; x++;y++; while(*s) { gotoxy( x, y++); cprintf("%s", *s++); } return gBuf[ord]; } void DeletePop( int x, int y,char **str, int *buf ) { int w,h,t; char **s; w=h=0; s=str; while(*s) { t=strlen(*s); if( t>w ) w=t; s++; h++; } w++;h++; PutMem( x, y, w+1, h+1, buf ); } void MovePopItem( int x, int y, int nitem, char **s, int attr ) { x++;y++; // new textattr( attr ); gotoxy(x,y+nitem); if(s) cprintf( *(s+nitem) ); } int GetPopCount( char **str ) { char **s; int cnt=0; s=str; while(*s++) { cnt++; } return (cnt-1); } //----------------------------------------------------------------- // // // // // // // // // // // //----------------------------------------------------------------- int hwVal[16][16]; int aMpos[]={2,8,17,26,39,48,57}; int aSel[16]; char **aMenu[]= { 0, sMicEcho, sRevType, sChrType, sLevel, s4way, sSpeaker }; void PrintfMenu( char **str, int p, int val ) { char *s = *(str+p); while( *s != '' ) s++; sprintf( s+2, "%03d", val ); } int OnValueKey( int menu, int item, int v ) { int id = (menu<<8) + item; switch(menu) { case 1: { hwVal[menu][item] += v; if(hwVal[menu][item] < 0 ) hwVal[menu][item] = 0; if(hwVal[menu][item] > GetMAX( id ) ) hwVal[menu][item] = GetMAX( id ); PrintfMenu( aMenu[menu], item, hwVal[menu][item] ); MixerMessage( id, hwVal[menu][item] ); } return 1; case 4: { hwVal[menu][item] += v; if(hwVal[menu][item] < 0 ) hwVal[menu][item] = 0; if(hwVal[menu][item] > GetMAX( id ) ) hwVal[menu][item] = GetMAX( id ); PrintfMenu( aMenu[menu], item, hwVal[menu][item] ); MixerMessage( id, hwVal[menu][item] ); } return 1; } return 0; } void MarkMenu( char **s, int p ) { int i=0; while( *s ) { if( i==p ) (*s)[0]= 'þ'; else (*s)[0] = ' '; s++; i++; } } int OnSpaceKey( int menu, int item ) { switch(menu) { case 2: { hwVal[menu][item] = item; MarkMenu( aMenu[menu], item ); if( gOnOffRev==0x7f && item!=8 ) { MixerMessage( 0x200, hwVal[menu][item] ); } else if( gOnOffRev==0x7f && item==8 ) { gOnOffRev = 0; MixerMessage( 0x208, gOnOffRev ); MixerInit( gMixFile, 0 ); } else if( gOnOffRev==0 && item!=8 ) { gOnOffRev = 0x7f; MixerMessage( 0x208, gOnOffRev ); MixerMessage( 0x200, hwVal[menu][item] ); MixerInit( gMixFile, 0 ); } else if( gOnOffRev==0 && item==8 ) { ; } } return 1; case 3: { hwVal[menu][item] = item; MarkMenu( aMenu[menu], item ); if( gOnOffChr==0x7f && item!=8 ) { MixerMessage( 0x300, hwVal[menu][item] ); } else if( gOnOffChr==0x7f && item==8 ) { gOnOffChr = 0; MixerMessage( 0x308, gOnOffChr ); MixerInit( gMixFile, 0 ); } else if( gOnOffChr==0 && item!=8 ) { gOnOffChr = 0x7f; MixerMessage( 0x308, gOnOffChr ); MixerMessage( 0x300, hwVal[menu][item] ); MixerInit( gMixFile, 0 ); } else if( gOnOffChr==0 && item==8 ) { ; } } return 1; case 5: { hwVal[menu][item] = item; MarkMenu( aMenu[menu], item ); if( item==0 ) gOnOff4way=0x7f; else gOnOff4way=0; MixerMessage( 0x500, gOnOff4way ); } return 1; case 6: { if( item==0 ) hwVal[menu][item] = 0; else if( item==1 ) hwVal[menu][item] = 0x7f; MarkMenu( aMenu[menu], item ); if( gOnOffSur==0x7f && item!=2 ) { MixerMessage( 0x600, hwVal[menu][item] ); } else if( gOnOffSur==0x7f && item==2 ) { gOnOffSur = 0; MixerMessage( 0x602, gOnOffSur ); MixerInit( gMixFile, 0 ); } else if( gOnOffSur==0 && item!=2 ) { gOnOffSur = 0x7f; MixerMessage( 0x602, gOnOffSur ); MixerMessage( 0x600, hwVal[menu][item] ); MixerInit( gMixFile, 0 ); } else if( gOnOffSur==0 && item==2 ) { } } return 1; } return 0; } //----------------------------------------------------------------- // // SaveMixer // //----------------------------------------------------------------- char *strgets( char *buf ) { int c; int idx=0; int len=buf[0]; int x,y; char *p=buf+1; x=wherex();y=wherey(); while(1) { c=wkey(); switch(c) { case 0x4B00: case 8: idx--; if(idx<0) idx=0; p[idx]='\0'; gotoxy( x+idx, y ); cprintf(" "); gotoxy( x+idx, y ); break; case 0x1b: idx=0; p[idx]='\0'; return p; case 0xD: p[idx]='\0'; return p; default : if( c<0xff ) { if( (isalpha(c)) || (c=='.') || (isdigit(c)) ) { if(idxlen ) idx=len; } } } break; } } } void GetMixerName( char *buf ) { char tmp[16]; char *p; int *scrn; int x=22,y=11,w=38,h=2; int i; _setcursortype( _NORMALCURSOR ); scrn=(int*)farmalloc( (w+1)*(h+1)*2 ); textattr(0x4e); CopyMem( x, y, w+1, h+1, scrn ); DrawBox( x, y, w, h ); gotoxy( x+1, y+1); for(i=1; iMAX_FILE ) break; } // indicate the last one *tmp[0]='\0'; } qsort((void *)s_f, cnt, sizeof(s_file), sort_function); // // initial clear screen // for(i=0; icnt) { pos--; break; } if(pos>=N_F) { pos=N_F-1; page++; if(page>cnt-N_F) page=cnt-N_F; } break; case 0xD : strcpy( gMixFile, s_f[page+pos] ); // restore PutMem( x, y, w+1, h+1, scrn ); farfree( s_f ); farfree( scrn ); // repaint MixerInit( gMixFile, 1 ); InitMain(); PutFileName( gMixFile ); return; } } endp: PutMem( x, y, w+1, h+1, scrn ); farfree( s_f ); farfree( scrn ); } //----------------------------------------------------------------- // // menu navigator // //----------------------------------------------------------------- int TestMenu( void ) { static int x=0; int c,i; int *buf; gotoxy(3, 2 ); for(i=0; iGetPopCount(aMenu[x])) aSel[x]=0; break; case 0x4900: if( OnValueKey( x, aSel[x], GetStep((x<<8)+aSel[x]) ) ); break; case '+' : if( OnValueKey( x, aSel[x], 1 ) ); break; case 0x5100: if( OnValueKey( x, aSel[x], -GetStep((x<<8)+aSel[x]) ) ); break; case '-' : if( OnValueKey( x, aSel[x], -1 ) ); break; case 0xd: case ' ' : { if(!x) return 1; if( OnSpaceKey( x, aSel[x] ) ) buf=ShowPop( x, aMpos[x], 3, aMenu[x], 0 ); } break; } switch( c ) { case 0x4B00: { PutTextAttr( aMpos[x], 2, sMenu[x], CDIS ); if( aMenu[x] ) DeletePop( aMpos[x], 3, aMenu[x], buf ); x--; if(x<0) x=N_OF_MENU-1; PutTextAttr( aMpos[x], 2, sMenu[x], CREV ); if( aMenu[x] ) buf=ShowPop( x, aMpos[x], 3, aMenu[x], 1 ); } break; case 0x4D00: { PutTextAttr( aMpos[x], 2, sMenu[x], CDIS ); if( aMenu[x] ) DeletePop( aMpos[x], 3, aMenu[x], buf ); x++; if(x>N_OF_MENU-1) x=0; PutTextAttr( aMpos[x], 2, sMenu[x], CREV ); if( aMenu[x] ) buf=ShowPop( x, aMpos[x], 3, aMenu[x], 1 ); } break; case 0x3c00 : GetMixerName( gMixFile ); break; case 0x8: case 0x9: case 0x1B: { PutTextAttr( aMpos[x], 2, sMenu[x], CDIS ); if( aMenu[x] ) DeletePop( aMpos[x], 3, aMenu[x], buf ); } return 0; case 0x2d00: return 1; } } } //----------------------------------------------------------------- // // main // //----------------------------------------------------------------- void InitEffectVol( void ) { int i,j; // // rev, chr level // i=4; j=0; hwVal[i][j] = S94_Restore( REV_VOL ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( REV_TIME ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( REV_FEED ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( CHR_VOL ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( CHR_DEL ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( CHR_FEED ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( CHR_RATE ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( CHR_DEPTH ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( AUDREV_SEND ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( AUDCHR_SEND ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( GMREV_SEND ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( GMCHR_SEND ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; } void InitMain( void ) { int i,j; #ifdef ST_____97 // // echo // i=1; j=0; hwVal[i][j] = S94_Restore( ECH_LEV ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( ECH_TIM ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; hwVal[i][j] = S94_Restore( ECH_FEED ); PrintfMenu( aMenu[i], j, hwVal[i][j] );j++; // // rev // i=2; j=0; hwVal[i][j] = S94_Restore( REV_TYPE ); gOnOffRev = S94_Restore( REV_ONOFF ); if( gOnOffRev == 0x7f ) MarkMenu( aMenu[i], hwVal[i][j] ); else MarkMenu( aMenu[i], 8 ); // // chr // i=3; j=0; hwVal[i][j] = S94_Restore( CHR_TYPE ); gOnOffChr = S94_Restore( CHR_ONOFF ); if( gOnOffChr == 0x7f ) MarkMenu( aMenu[i], hwVal[i][j] ); else MarkMenu( aMenu[i], 8 ); // // rev, chr level // InitEffectVol(); // // 4way // i=5; j=0; gOnOff4way = S94_Restore( SUR_INP ); if(gOnOff4way==0x7f) MarkMenu( aMenu[i], 0 ); else MarkMenu( aMenu[i], 1 ); // // surround // i=6; j=0; hwVal[i][j] = S94_Restore( SUR_24 ); gOnOffSur = S94_Restore( SUR_ONOFF ); if(gOnOffSur==0x7f) { if( hwVal[i][j]==0 ) MarkMenu( aMenu[i], 0 ); else MarkMenu( aMenu[i], 1 ); } else { MarkMenu( aMenu[i], 2 ); } #endif // // level scroll bars // i=0; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_MASTER ), SMAX( SB_MASTER ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_WAV ), SMAX( SB_WAV ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_FM ), SMAX( SB_FM ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_CD ), SMAX( SB_CD ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_LINE ), SMAX( SB_LINE ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_MIC ), SMAX( SB_MIC ), CACT ); i++; #ifdef ST_____97 DrawBar( xPos[i], 10, aVal[i]=S94_Restore( GM_VOL ), SMAX( GM_VOL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( EQ_LBL ), SMAX( EQ_LBL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( EQ_MLBL ), SMAX( EQ_MLBL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( EQ_MHBL ), SMAX( EQ_MHBL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( EQ_HBL ), SMAX( EQ_HBL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SUR_VOL ), SMAX( SUR_VOL ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SUR_DEL ), SMAX( SUR_DEL ), CACT ); i++; #else DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_MIDI ), SMAX( SB_MIDI ), CACT ); i++; DrawBar( xPos[i], 10, aVal[i]=S94_Restore( SB_ECHO ), SMAX( SB_ECHO ), CACT ); i++; #endif } void PutFileName( char *s ) { char tmp[80]; char buf[80]; int l; textattr(0x1e); strncpy( tmp, s, 13 ); strupr( tmp ); strlwr( tmp+1 ); sprintf( buf,"%-12s", tmp); gotoxy( 80-strlen(buf), 2 ); cprintf( buf ); } void main( int argc, char *argv[] ) { struct text_info ti; char **s; int i; if( ! FindHwPort() ) { printf("\nPlease Run DosCfg.Exe"); return; } if( argc==2 ) strcpy( gMixFile, argv[1] ); else strcpy( gMixFile, "temp.mix" ); MixerInit( gMixFile, 1 ); gettextinfo(&ti); gW=ti.winright; gH=ti.winbottom; _setcursortype( _NOCURSOR ); textattr(0x18); clrscr(); Clear(1,1,gW,gH,'°'); #ifdef ST_____97 Dstring( 28, 1, 0x4e, "Sound Track-97 Dos Mixer"); Dstring( 1, gH, 0x4e, "²²²²²±±±±°°°°° >> Sound Track-97 HomePage http:\\\\www.smt.co.kr << °°°°°±±±±²²²²²"); #else Dstring( 28, 1, 0x4e, "Sound Track-16 Dos Mixer"); Dstring( 1, gH, 0x4e, "²²²²²±±±±°°°°° >> Sound Track-16 HomePage http:\\\\www.smt.co.kr << °°°°°±±±±²²²²²"); #endif SetCOL( 19, gH, 16, 0xce ); Dstring( 1,2,0x18,""); textattr( 0x1f ); PutStrings( (80-strlen(sAudioTitle[0]))/2, 6, sAudioTitle ); textattr( 0x1f ); PutStrings( (80-strlen(sHelp[0]))/2, 21, sHelp ); textattr( CACT ); PutStrings( (80-strlen(sAudioBox[0]))/2, 8, sAudioBox ); for(i=0; i