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

📄 itgl_04.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/system/Integral/itgl_04.cc// version: $Id: itgl_04.cc,v 1.11 2001/07/24 00:44:30 picone Exp $//// system include files//#include <memory.h>#include <unistd.h>#include <pwd.h>// isip include files//#include "Integral.h"#include <SysString.h>// method: getEnv//// arguments://  SysString& val: (output) expansion of the variable//  const SysString& var: (input) environmental variable name//// return: a boolean value indicating status//boolean Integral::getEnv(SysString& val_a, const SysString& var_a) {  // call system getenv function to get value of environment name  //  byte* val = (byte*)getenv((char*)(byte*)var_a);  // if it is not null then assign assign environment name to output  // string  //  if (val != (byte*)NULL) {    val_a.assign((byte*)val);  }  // if environment name is NULL then clear the output string  //  else {    val_a.clear();    return false;  }  // exit gracefully  //  return true;}// method: getLoginDir//// arguments://  SysString& dir: (output) the fully qualified directory//  const SysString& login: (input) a login name//// return: a boolean value indicating status//// this method returns the login directory for a username//boolean Integral::getLoginDir(SysString& dir_a, const SysString& login_a) {  // call getpwnam_r and getpwnam methods depending upon the operating  // system, which returns a pointer to a struct passwd if they  // successfully locate the requested entry  //#if ISIP_WCHAR_MODE == ISIP_WCHAR_SOLARIS  char buffer[SysString::MAX_LENGTH];  struct passwd pwd_buf;  struct passwd* pwd = getpwnam_r((char*)(byte*)login_a, &pwd_buf,				  buffer, SysString::MAX_LENGTH);#else  struct passwd* pwd = getpwnam((char*)(byte*)login_a);#endif  // if they successfully locate the requested, then assign it to  // output directory  //  if (pwd != (passwd*)NULL) {    dir_a.assign((byte*)pwd->pw_dir);  }  // if they don't successfully locate the requested entry, then clear  // the output directory and exit  //  else {    dir_a.clear();    return false;  }  // exit gracefully  //  return true;}// method: expandName//// arguments://  SysString& o_name: (output) expanded name//  const SysString& i_name: (input) name needing expansion//// return: a boolean value indicating status//// this method replaces all environment variables and other such// things in a string with their equivalent expansions. for example:// //  $HOME/foo.text		=> /u1/person/foo.text//  foo.text/$HOME/data		=> foo.text//u1/person/data//// in other words, variables or aliases anywhere in the string will be// replaced.//boolean Integral::expandName(SysString& o_name_a, const SysString& i_name_a) {  // declare local variables  //  long index = -1;  SysString val;  SysString var;  // start with the input string  //  o_name_a.assign(i_name_a);  boolean valid = true;  // remove preceding and trailing whitespace from the filename  //  o_name_a.trim();    // expand all tilde's in the filename  //  while ((index = o_name_a.firstChr(DIR_HOME, index)) >= 0) {        // increment the index    //    index++;        // find the termination of the login name, probably a directory    // separator    //    long last = o_name_a.firstChr(DIR_DELIM, index);        if (last == NO_POS) {      last = o_name_a.length();    }        // if position of delim is greater than the index, then get sub    // string    //    if ((last - index) > 0) {      o_name_a.substr(var, index, last - index);      // call getLoginDir to get the login directory for a username      //      if (getLoginDir(val, var)) {	o_name_a.deleteRange(index - 1, last - index + 1);	o_name_a.insert(val, index - 1);      }      else {	valid = false;      }    }    // if position of delim is less than or equal to the index, then    // call getEnv function to get value of environment name    //    else {      var.assign((unichar*)ENV_HOME);      getEnv(val, var);      o_name_a.deleteRange(index - 1, 1);      o_name_a.insert(val, index - 1);    }  }    // expand all variables in the filename  //  while ((index = o_name_a.firstChr(ENV_MARKER, index)) != NO_POS) {    // see if the ENV_MARKER is escaped    //    long index2 = NO_POS;    if (index > 0) {      index2 = o_name_a.firstChr(L"\\", index - 1);    }    // only expand if it was not escaped    //    if (index2 != NO_POS) {      o_name_a.deleteRange(index - 1, 1);    }    else {      // initialize a boolean flag      //      boolean found = false;            // skip past the dollar character      //      index++;            // loop through successively shorter string until we have a match      //      for (long last = o_name_a.length(); last > index; last--) {		// select substring into var	//	o_name_a.substr(var, index, last - index);		// if getEnv returns the value of environment name, then set the	// boolean flag to true	//	if (getEnv(val, var)) {	  o_name_a.deleteRange(index - 1, last - index + 1);	  found = true;	  break;	}		// if match is not found, then clear the val string	//	else {	  val.clear();	}      }            // if no match is found, delete the output value and Error      //      if (!found) {	valid = false;      }            // insert the value into the string      //      o_name_a.insert(val, index - 1);    }  }  // look for instances with "//', throw to root directory like Emacs  //  static unichar two_delims[] = {    DIR_DELIM, DIR_DELIM, (unichar)0  };  long i = o_name_a.lastStr((unichar*)two_delims);  if (i != NO_POS) {    // check to see if we cropped away the invalids    //    o_name_a.deleteRange(0, i + 1);    if ((!valid) && (expandName(val, o_name_a))) {      valid = true;    }  }  // exit gracefully  //  return valid;}

⌨️ 快捷键说明

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