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

📄 mac_util.c

📁 MIDI解码程序(用VC编写)
💻 C
字号:
/*     TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA	Macintosh interface for TiMidity	by T.Nogami	<t-nogami@happy.email.ne.jp>	    mac_util.c*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include 	<stdio.h>#include	<stdlib.h>#include	<string.h>#include	<ctype.h>#include	"mac_util.h"OSErr GetFullPath( const FSSpec* spec, Str255 fullPath){	CInfoPBRec		myPB;	Str255		dirName;	OSErr		myErr;	 	fullPath[0] = '\0';	BlockMoveData(spec->name, fullPath, spec->name[spec->name[0]]+1 );		myPB.dirInfo.ioNamePtr = dirName;	myPB.dirInfo.ioVRefNum = spec->vRefNum;	myPB.dirInfo.ioDrParID = spec->parID;	myPB.dirInfo.ioFDirIndex = -1;								do{		myPB.dirInfo.ioDrDirID = myPB.dirInfo.ioDrParID;		myErr = PBGetCatInfoSync(&myPB);				dirName[0]++;		dirName[ dirName[0] ]=':';		if( dirName[0]+fullPath[0]>=254 ){ fullPath[0]=0; return 1; }		BlockMoveData(fullPath+1, dirName+dirName[0]+1, fullPath[0]);		dirName[0]+=fullPath[0];		BlockMoveData(dirName, fullPath, dirName[0]+1);	}while( !(myPB.dirInfo.ioDrDirID == fsRtDirID) );	return noErr; }void StopAlertMessage(Str255 s){	ParamText(s,"\p","\p","\p");	StopAlert(128,0);}void	LDeselectAll(ListHandle lHandle){	Cell  cell={0,0};	while(LGetSelect(true, &cell, lHandle)){		LSetSelect(false, cell, lHandle);	}}void	TEReadFile(char* filename, TEHandle te){	FILE	*in;			//clear TE	TESetSelect(0, (**te).teLength, te);	TEDelete(te);			//read	if( (in=fopen(filename, "rb"))==0 ){		char *s="No document.";		TEInsert(s, strlen(s), te);	}else{		char	buf[80];		int		len;		while(fgets( buf, 80, in)){			len=strlen(buf);			if( buf[len-1]==0xA ){				buf[len-1]=0xD; //len--;			} 			TEInsert(buf, len, te);		}		fclose(in);	}}/***********************/#pragma	mark	-void SetDialogItemValue(DialogPtr dialog, short item, short value){	short			itemType;	ControlHandle	itemHandle;	Rect			itemRect;		GetDialogItem(dialog, item, &itemType, (Handle*)&itemHandle, &itemRect);	SetControlValue(itemHandle, value);}short GetDialogItemValue(DialogPtr dialog, short item ){	short			itemType;	ControlHandle	itemHandle;	Rect			itemRect;		GetDialogItem(dialog, item, &itemType, (Handle*)&itemHandle, &itemRect);	return GetControlValue(itemHandle);}void SetDialogTEValue(DialogRef dialog, short item, int value){	Str255		s;		NumToString(value, s);	mySetDialogItemText(dialog, item, s);}int GetDialogTEValue(DialogRef dialog, short item ){	Str255		s;		myGetDialogItemText(dialog, item, s);	return atof(p2cstr(s));}short ToggleDialogItem(DialogPtr dialog, short item ){	short			itemType, value;	ControlHandle	itemHandle;	Rect			itemRect;		GetDialogItem(dialog, item, &itemType, (Handle*)&itemHandle, &itemRect);	value=GetControlValue(itemHandle);	SetControlValue(itemHandle, !value);	return !value;}void myGetDialogItemText(DialogPtr theDialog, short itemNo, Str255 s){	short	itemType;	Handle	item;	Rect	box;		GetDialogItem(theDialog, itemNo, &itemType, &item, &box);	GetDialogItemText(item, s);}void mySetDialogItemText(DialogRef theDialog, short itemNo, const Str255 text){	short	itemType;	Handle	item;	Rect	box;		GetDialogItem(theDialog, itemNo, &itemType, &item, &box);	SetDialogItemText(item, text);}void SetDialogControlTitle(DialogRef theDialog, short itemNo, const Str255 text){	short	itemType;	Handle	item;	Rect	box;		GetDialogItem(theDialog, itemNo, &itemType, &item, &box);	SetControlTitle((ControlRef)item, text);}void SetDialogItemHilite(DialogRef dialog, short item, short value){	short		itemType;	ControlRef	itemHandle;	Rect		itemRect;		GetDialogItem(dialog, item, &itemType, (Handle *)&itemHandle, &itemRect);	HiliteControl(itemHandle, value);}// ************************************************void    mac_TransPathSeparater(const char str[], char out[]){	int i;	for( i=0; str[i]!=0; i++ ){		if( str[i]=='/' ){			out[i]=':';		} else {			out[i]=str[i];		}	}}#if 0char** sys_errlist_(){	static char	s[80];	static char*	ps=s;	static char**	ret=&ps;		/* if( errno==ENOENT )  strcpy(s,"File not Found.");	else */   /* ENOENT vanished at CWPro2 */	if( errno==ENOSPC )		strcpy(s,"Out of Space.");	else		snprintf(s, 80, "error no.%d", errno);		return(ret-errno);}#endif /*0*/// **************************************************#pragma mark -/* special fgets *//* allow \r as return code */char* mac_fgets( char buf[], int n, FILE* file){	int c,i;		if( n==0 )  return 0;	for( i=0; i<n-1; ){		buf[i++]=c=fgetc(file);		if( c=='\n' || c=='\r' || c==EOF ) break;	}		buf[i]=0;	if( i>0 && buf[i-1]==EOF ){ buf[i-1]=0; i--; }		if( i==0 && c==EOF && feof(file) ) return 0;			if( i==1 && buf[0]=='\n' ){ /* probably dos LF (Unix blank line?)*/		return mac_fgets( buf, n, file);	}	else if( buf[i-1]=='\n' ){	/*unix*/		return buf;	}	else if( buf[i-1]=='\r' ){ /*mac or dos*/		buf[i-1]='\n';		return buf;	}	return buf;  /* for safty*/}void *mac_memchr (const void *s, int c, size_t n){	char* buf=(char*)s;	int i;		for( i=0; i<n; i++ ){		if( buf[i]==c || (c=='\n' && buf[i]=='\r') ){			return buf+i;		}	}	return 0;}void p2cstrcpy(char* dst, ConstStr255Param src){	int i;	for( i=0; i<src[0]; i++){		dst[i]=src[i+1];	}	dst[i]=0;}int mac_strcasecmp(const char *s1, const char *s2){	int	c1,c2,i;		for( i=0; ; i++){		if( !s1[i] && !s2[i] ) return 0; //equal		if( !s1[i] || !s2[i] ) return 1;		c1= ( isupper(s1[i]) ? tolower(s1[i]) : s1[i] );		c2= ( isupper(s2[i]) ? tolower(s2[i]) : s2[i] );		if( c1 != c2 )	return 1;	}	return 0; //equal}#define CHAR_CASECMP(c1,c2) ((isupper(c1)?tolower(c1):(c1))!=(isupper(c2)?tolower(c2):(c2)))int mac_strncasecmp(const char *s1, const char *s2, size_t n ){	char	c1,c2;	int i;	for( i=0; i<n; i++){		if( !s1[i] && !s2[i] ) return 0; //equal		if( !s1[i] || !s2[i] ) return 1;		c1= ( isupper(s1[i]) ? tolower(s1[i]) : s1[i] );		c2= ( isupper(s2[i]) ? tolower(s2[i]) : s2[i] );		if( c1 != c2 )	return 1;	}	return 0; //equal}#define min(a,b)  (((a) < (b)) ? (a) : (b))int strtailcasecmp(const char *s1, const char *s2){	int	len1, len2, cmplen,		i, i1,i2;		len1=strlen(s1); len2=strlen(s2);	cmplen= min(len1,len2);	for( i=0, i1=len1-1, i2=len2-1; i<cmplen; i++, i1--, i2--){		if( CHAR_CASECMP(s1[i1],s2[i2])!=0 ){			return 1;  //differ		}	}	return 0; //equal}

⌨️ 快捷键说明

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