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

📄 phone.c

📁 用你的语音Modem实现像电话一样通话的程序
💻 C
字号:
#include "phone.h"#include <ctype.h>Phone::Phone(){	is_on = 0;	cur_volume = 3;	is_debugging = 0;}Phone::~Phone(){	delete gui;	delete defaults;}Phone::create_objects(){	defaults = new Defaults("~/.phonerc");	defaults->load();		char string[256];	for(int i = 0; i < PRESETS; i++)	{		sprintf(preset[i], "");		sprintf(string, "PRESET%d", i);		defaults->get(string, preset[i]);	}	gui = new PhoneWindow(this);	gui->create_objects();	cur_volume = defaults->get("VOLUME", cur_volume);	duplex = (defaults->get("DUPLEX", 0) ? FULLDUPLEX : HALFDUPLEX);	sprintf(phone_path, "%s", PHONE);	sprintf(chat_path, "%s", CHAT);	defaults->get("PHONEPATH", phone_path);	defaults->get("CHATPATH", chat_path);}Phone::run(){	start_modem();	gui->run_window();	defaults->update("VOLUME", cur_volume);		defaults->update("DUPLEX", duplex);	defaults->update("PHONEPATH", phone_path);	defaults->update("CHATPATH", chat_path);	char string[256];	for(int i = 0; i < PRESETS; i++)	{		sprintf(string, "PRESET%d", i);		defaults->update(string, preset[i]);	}	defaults->save();	cleanup();}Phone::send(char *string, char *expect){	char string_[256];	sprintf(string_, "%s \'\' \'%s\' \'%s\' <%s >%s", chat_path, string, expect, phone_path, phone_path);   // JP		//printf("[%s]", string_); 	//fflush(stdout); // JP	system(string_);		//printf("\n");  // JP}Phone::start_modem(){  if(duplex)  {	  send("AT&F");  }  else  {	  send("atm2");  }	set_volume(cur_volume);	is_on = 0;}Phone::cleanup(){	if(duplex)	{		 send("ATM1");		 send("ATL1");	}	else	{		send("atm1");		send("atl0");	}}Phone::go_on(){	is_on = 1;	if(duplex)	{		send("ATZ");        send("ATM2");        send("AT#CLS=8#VRN=0#VLS=6#VBT=1");        send("ATH1");	}	else	{		send("ath1");	}}Phone::go_off(){	if(duplex)	{		send("ATH0");	}	else	{		send("ath0");	}	is_on = 0;}Phone::flash_it(){	if(is_on)	{		if(duplex)		{			send("atdt!;");		}		else		{			send("atdt!;");		}	}}Phone::set_volume(int level){	cur_volume = level;	if(duplex)	{        char string[10];        sprintf(string, "ATL%d", level);        send(string);	}	else	{		char string[10];		sprintf(string, "atl%d", level);		send(string);	}}Phone::dial(char *string){	if(is_on)	{		char string_[256];		strcpy(string_, string);		lton(string_);       // replace letters with numbers		if(duplex)		{				char string__[256];				if(string_[1])				{					sprintf(string__, "ATDT%s", string_);                	send(string__, "VCON");                	send("AT#SPK=1,15,1", "OK");				}				else				{					sprintf(string__, "AT#SPK=2,16,1#VTS=%s#SPK=1,15,1", string_);					send(string__);				}		}		else		{			char string__[256];			sprintf(string__, "atdt%s;", string_);			send(string__);		}	}}Phone::fix_preset(char *textin, char *textout) // make sure preset is a legal number{	int i, o;	for(i = 0, o = 0; textin[i] != 0;)	{		char c = textin[i];		if(test_character(c))		{ // ================= illegal character			if(c == '(')			{ // ===================== skip comment				for(; c != ')' && c != 0; i++)				{					c = textin[i];				}				if(c == 0) i--; // get 0 back			}			else			{ // ====================== skip input character				i++;			}		}		else		{			textout[o++] = textin[i++];		}	}	textout[o] = 0;	if(!strlen(textout)) return 1; // nothing passed	else return 0;}Phone::test_character(char c)    // return 1 if character is invalid{	if((tolower(c) < 97 || tolower(c) > 121 || tolower(c) == 'q') && (c < 48 || c > 57) && c != 35 && c != 42 && c != ',')	{ // ================= illegal character		return 1;	}	return 0;      // legal character}Phone::lton(char *string)        // convert letters to phone digits{	int len = strlen(string);	char* num[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "prs", "tuv", "wxy"};		for(int i = 0; i < len; i++)	{		char c = tolower(string[i]);				if(c >= 97 && c <= 121)		{			for(int j = 0, result = 0; j < 10 && !result; j++)			{            // test each number				for(int k = 0; k < strlen(num[j]) && !result; k++)				{          // test each letter for each number					if(c == num[j][k])					{        // replace letter with number						string[i] = j + 48;						result = 1;					}				}			}		}	}		return 0;}

⌨️ 快捷键说明

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