chap9 inline function

本文探讨了C/C++中宏(macro)的常见问题及其潜在风险,例如空格引起的错误、优先级问题及副作用,并对比了内联函数(inline function)的优势。内联函数不仅保持了宏的高效特性,还解决了宏的一些缺陷,如作用域问题。
 
macro
缺点:
(1)#define F (x) (x + 1)
              ~~多余的空格,造成的错误很难找到

(2)对于macro里的每一项都要用括号括起来,如
  #define FLOOR(x,b) x>=b?0:1,如此调用
if(FLOOR(a&0x0f,0x07))....,等价于
if(a&0x0f>=0x07?0:1)...,由于>=的优先级高于&造成结果错误

(3)side effect,如
#define BAND(x) (((x)>5 && (x)<10) ? (x) : 0)
调用BAND(++a),有可能造成a自增两次,主要原因是macro只是简单
的替换,而不是真正的函数

优点:效率高!

inline function
继承macro的优点,扬弃macro的缺点,唯一不足的是,由于编译器
将inline函数放在符号表里,包括声明和函数体,占用空间,但是
因为inline函数一般都是比较简单的,这样的函数做为inline函数比
做为一般的函数使用更少的空间,因为一般的函数都需要参数的出入
栈操作以及调用CALL。

既然inline函数和macro差不多,为什么还要inline呢?
因为macro对于类的作用域没有概念,如
class X{
  int i;
public:
  #define VAL(X::i) //error
macro只会把X::i当作一个整体,而不知道是指类X的i

It is important to understand that an inline is just a suggestion to the compiler;
the compiler is not forced to inline anything at all. A good compiler will inline
small, simple functions while intelligently ignoring inlines that are too complicated.
This will give you the results you want – the true semantics of a function call with
the efficiency of a macro.


inline函数一般用于取得或设置私有数据的函数上,用法
//test.h
class test
{
int i;
public:
test(int ii=0):i(ii){}
int getData(){return i;}//写在类内部的默认为inline
void setData();
void outData();
};

inline void test::setData()//以inline开头,注意inline函数要写在定义类的头文件里
{
i = i * 2;
}
<script language="javascript" type="text/javascript"> </script> <h3 id="t_sett">3G/4G Settings</h3> <div class="content-container"> <form class="pure-form pure-form-aligned"> <div id="backupNotice" class="nd"> <p class="cfg-line" id="t_3g_info">Note: 3G/4G access is unavailable in the current operation mode. Please enable 3G/4G backup or change the operation mode to 3G/4G Router Mode.</p> </div> <div id="usb3gBackupEnable"> <input type="checkbox" id="usb3g_backup_en" /> <label class="T T_en3gbackup">Enable 3G/4G as a backup solution for Internet access</label> </div> <div id="backup_time" class="nd"> <b class="item T" id="t_backup_delay_time">Backup Delay:</b> <select id="backup_min_sel"> <option id="bk_m_0" value="0">0</option> <option id="bk_m_1" value="1">1</option> <option id="bk_m_2" value="2">2</option> <option id="bk_m_3" value="3">3</option> <option id="bk_m_4" value="4">4</option> <option id="bk_m_5" value="5">5</option> <option id="bk_m_6" value="6">6</option> <option id="bk_m_7" value="7">7</option> <option id="bk_m_8" value="8">8</option> <option id="bk_m_9" value="9">9</option> <option id="bk_m_10" value="10">10</option> </select> <span class="T T_minutes">minutes</span> <select id="backup_sec_sel"> <option id="bk_s_0" value="0">0</option> <option id="bk_s_15" value="15">15</option> <option id="bk_s_30" value="30">30</option> <option id="bk_s_45" value="45">45</option> </select> <span class="T T_seconds">seconds</span> <b class="item T" id="t_revert_delay_time">Revert Delay:</b> <select id="revert_min_sel"> <option id="rv_m_0" value="0">0</option> <option id="rv_m_1" value="1">1</option> <option id="rv_m_2" value="2">2</option> <option id="rv_m_3" value="3">3</option> <option id="rv_m_4" value="4">4</option> <option id="rv_m_5" value="5">5</option> <option id="rv_m_6" value="6">6</option> <option id="rv_m_7" value="7">7</option> <option id="rv_m_8" value="8">8</option> <option id="rv_m_9" value="9">9</option> <option id="rv_m_10" value="10">10</option> </select> <span class="T T_minutes">minutes</span> <select id="revert_sec_sel"> <option id="rv_s_0" value="0">0</option> <option id="rv_s_15" value="15">15</option> <option id="rv_s_30" value="30">30</option> <option id="rv_s_45" value="45">45</option> </select> <span class="T T_seconds">seconds</span> </div> <div class="pure-control-group" style="line-height: 30px;"> <label class="label-title item T l" id="t_3g_modem">USB 3G/4G Modem:</label> <span class="text T" id="card_name_unplugged">Unplugged</span> <span class="text nd T T_unknown" id="card_name_unknown">Unknown</span> <span class="text nd T" id="card_name_ing">Identifying...</span> <span class="text nd T" id="card_name_ok">Successfully Identified</span> </div> <div class="pure-control-group" style="line-height: 30px;"> <label class="label-title item T l" id="t_pin_status">PIN Status:</label> <span class="text T T_unknown" id="pin_status_unknown">Unknown</span> <span class="text nd T" id="pin_status_fail">Failed to connect script</span> <span class="text nd T" id="pin_status_ready">Ready</span> <span class="text nd T" id="pin_status_pin">PIN Locked</span> <span class="text nd T" id="pin_status_puk">PUK Locked</span> <span class="text nd T" id="pin_status_errror">Error Unknown</span> </div> <div class="nd" id="puk_lock_info"> <p class="cfg-line" id="t_puk_lock">The SIM/UIM card is locked. Please unlock the SIM/UIM card first with your PUK code on PC/Laptop.</p> </div> <div class="nd" id="pin_unlock"> <div class="inline"> <b class="item L T l" id="t_pin_code">PIN Code:</b> <input id="pin_code" type="text" class="text" /> </div> <div class="inline"> <button type="submit" id="pinUnlockBtn" class="L T blue" value="Unlock"></button> </div> </div> <div class="nd" id="auto_unlock_pin"> <div id="autoUnlockPinEnable"> <b class="item L T l" id="t_auto_unlock_pin_code">Auto-unlock PIN:</b> <input type="checkbox" id="auto_unlock_pin_en" /> <label class="T T_en">Enable</label> </div> </div> <b class="item T T_isp3g l">Mobile ISP:</b> <select id="isp_sel" class="xxl"></select> <div class="part-separate"> <input type="checkbox" id="manual_apn" /> <label class="T_muanl_3g_apn">Set the Dial Number, APN, Username and Password manually</label> </div> <div id="setManual"> <div> <b class="item T T_dialnum3g l">Dial Number:</b> <input id="dial_num" type="text" class="xl" /> </div> <div> <b class="item l" id="t_apn">APN:</b> <input id="apn" type="text" class="xl" /> </div> <div id="setUsername"> <b class="item T T_username l">Username:</b> <input id="username" type="text" class="xl" /> <span class="T T_optional">(optional)</span> </div> <div id="setPassword"> <b class="item T T_passwd l">Password:</b> <input id="password" type="text" class="xl" /> <span class="T T_optional">(optional)</span> </div> </div> <div id="conMode"> <b class="T_connmode l">Connection Mode:</b> <select id="connectMode" class="xl"> <option id="connAlwaysOn" class="T_typeauto" value="Always on" selected>Always on</option> <option id="connOnDemand" class="T_typedemand" value="Connect on demand">Connect on demand</option> <option id="connManual" class="T_typemanual" value="Connect manually">Connect manually</option> </select> </div> <div id="maxIdleTime"> <b class="T T_midle l">Max Idle Time:</b> <input type="text" id="idle_time" class="xl" value="15" /> <span class="T T_minutes">minutes</span> <span id="t_maa">(0 means always active.)</span> </div> <div> <b class="item T T_authtype l">Authentication Type:</b> <select id="ppp_authpro" class="xl"> <option id="t_autoauth" value="AUTO_AUTH" selected>AUTO_AUTH</option> <option id="t_pap" value="PAP">PAP</option> <option id="t_chap" value="CHAP">CHAP</option> </select> </div> <div class="pure-control-group" style="line-height: 30px;"> <label class="label-title item T l" id="t_labelTitle01">Connection Status:</label> <span class="text T" id="connection_status">Disconnected</span> </div> <div id="networkStat" class="part-separate"> <button type="submit" id="connectBtn" class="blue inline T_conn">Connect</button> <button type="submit" id="disconnectBtn" class="blue inline T_disconn">Disconnect</button> <label class="L1" id="network_status"></label> </div> <div class="advanced-block nd" type="button" id="pppClick"> <span class="advanced-icon advanced-hide-icon" id="advClick"></span> <span class="T_adv">Advanced</span> </div> <div id="ppp_elem_adv" class="nd"> <div class="L1" id="p_chg_pin_en"> <input type="checkbox" class="T" id="manual_pinCode" /> <label class="item L T" id="t_pin_chg_en">Enable PIN code change</label> </div> <div id="p_old_pin"> <b class="item T" id="t_old_pin">Old PIN Code:</b> <input id="old_pin" type="text" /> </div> <div id="p_new_pin1"> <b class="item T" id="t_new_pin1">New PIN Code:</b> <input id="new_pin1" type="text" /> </div> <div id="p_new_pin2"> <b class="item T" id="t_new_pin2">Confirm New PIN Code:</b> <input id="new_pin2" type="text" /> </div> <div id="p_pinChangeBtn"> <button type="submit" id="pinChangeBtn" class="blue T T_set">Set</button> </div> <div> <b class="item T l" id="t_mtu">MTU Size (in bytes):</b> <input id="mtu_size" type="text" class="m" maxlength="4" /> <div class="textbox-tips"> <span class="T" id="t_mtu1480">(The default is 1480, do not change unless necessary)</span> </div> </div> <div> <b class="item T T_echo l">Echo Request Interval:</b> <input type="text" id="ppp_echotime" class="m" value="30" maxlength="3" /> <div class="textbox-tips"> <span class="T T_echoinfo">(0-120 seconds, 0 means no request)</span> </div> </div> <div> <input type="checkbox" class="T" id="manual_ipAddr" /> <label class="T" id="t_follow_ip">Use The Following IP Address</label> </div> <div id="static_ip_div"> <b class="item T l" id="t_static_ip">Static IP Address:</b> <input id="static_ip" type="text" value="0.0.0.0" class="ip-address"/> </div> <div> <input type="checkbox" class="T" id="manual_dns" /> <label class="T" id="t_follow_dns">Use The Following DNS Servers</label> </div> <div id="primary_dns_div"> <b class="item T l" id="t_pri_dns">Primary DNS:</b> <input id="dns1" type="text" value="0.0.0.0" class="ip-address"/> </div> <div id="secondary_dns_div"> <b class="item T l" id="t_sec_dns">Secondary DNS:</b> <input id="dns2" type="text" value="0.0.0.0" class="ip-address"/> <span class="T T_optional">(optional)</span> </div> </div> <div class="part-separate"> <div class=&#39;modemSettings inline&#39;></div> <span class="inline" id="modem_set_Btn" style="color:#F93;border-bottom:#F93 solid 1px;cursor:pointer;vertical-align:baseline" >Modem Settings</span> </div> <div style="text-align:right"> <button type="submit" class="green inline T_save" id="saveBtn">Save</button> </div> </form> </div> <script type="text/javascript"> var oldUSBCountryIndex; (function() { var usb3gLinkCfgStk; var PPP3GStk; var wanPPP3G; var wanUsb3g; var wanPPP3GArg = {}; var wanUsb3gArg = {}; var flagDisconneting = false; var tag; var SIM_PIN_UNKNOW_STATUS = 5; var CONN_SCRIPT_FAIL = 9; var SIM_PIN = 19; var SIM_PUK = 20; var PHONE_FAILURE = 32; var DHCP4GStk; var wanDHCP4G; var wanDHCP4GArg = {}; var usb3GObj; var pageInit = 1; var currentLocation = "Other"; var sysMode; $.tpInit(init); $("#usb3g_backup_en").click(function doBackupEnClk() { var bacupEnOnPage = ($("#usb3g_backup_en").prop("data-checked") == true) ? 1 : 0; var manualAPN = ($("#manual_apn").prop("data-checked") == true) ? 1 : 0; disableWidgetForBackup(bacupEnOnPage, manualAPN, 1); }); $("#manual_apn").click(function doManuallyAPN() { var bacupEnOnPage = ($("#usb3g_backup_en").prop("data-checked") == true) ? 1 : 0; var manualAPN = ($("#manual_apn").prop("data-checked") == true) ? 1 : 0; var ispSelect = $("#isp_sel"); if (manualAPN == 1) { $("#setManual").removeClass("nd"); ispSelect.prop("disabled", true); } else { $("#dial_num").val(w3gisp_js[currentLocation]["isp" + ispSelect.data("value")]["dial_num"]); $("#apn").val(w3gisp_js[currentLocation]["isp" + ispSelect.data("value")]["apn"]); $("#username").val(w3gisp_js[currentLocation]["isp" + ispSelect.data("value")]["username"]); $("#password").val(w3gisp_js[currentLocation]["isp" + ispSelect.data("value")]["password"]); $("#setManual").addClass("nd"); ispSelect.prop("disabled", false); } disableWidgetForBackup(bacupEnOnPage, manualAPN, 1); }); $("#connectMode").click(function() { if ($("#connectMode").data("value") == "Always on") { doManuallyIdleTime(0); } else if ($("#connectMode").data("value") == "Connect on demand") { doManuallyIdleTime(1); } else if ($("#connectMode").data("value") == "Connect manually") { doManuallyIdleTime(1); } }); $("#manual_pinCode").click(function() { if ($("#manual_pinCode").prop("data-checked") == true) { $("#p_old_pin").removeClass("nd"); $("#p_new_pin1").removeClass("nd"); $("#p_new_pin2").removeClass("nd"); $("#p_pinChangeBtn").removeClass("nd"); } else { $("#p_old_pin").addClass("nd"); $("#p_new_pin1").addClass("nd"); $("#p_new_pin2").addClass("nd"); $("#p_pinChangeBtn").addClass("nd"); } }); $("#manual_ipAddr").click(function doManuallyIpAddr() { if ($("#manual_ipAddr").prop("data-checked") == true) { $("#static_ip_div").removeClass("nd"); } else { $("#static_ip_div").addClass("nd"); } }); $("#manual_dns").click(function doManuallyDNS() { if ($("#manual_dns").prop("data-checked") == true) { $("#primary_dns_div").removeClass("nd"); $("#secondary_dns_div").removeClass("nd"); } else { $("#primary_dns_div").addClass("nd"); $("#secondary_dns_div").addClass("nd"); } }); $("#saveBtn").click(function() { if (INCLUDE_USER_RESTRICTION && $.userType == "User" && $.unlocked == 0) { return; } $.addLoading($(this)); doSave(sysMode); }); $("#connectBtn").click(function() { var oidstr; if (usb3GObj.USBModemType == "3G") oidstr = ACT_OP_PPP_CONN; else if (usb3GObj.USBModemType == "4G") oidstr = ACT_OP_DHCP_RENEW; else return; $.addLoading($(this)); //doSave(sysMode); $("#connectBtn").prop("disabled", true); $.dm.op({oid:oidstr, data:{ stack:usb3GObj.stack }, callback:{ success:function(){ $.removeLoading(); $.timeout(doReload, 1500); } } }); $("#network_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); $("#connection_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); }); $("#disconnectBtn").click(function() { var oidstr; if (usb3GObj.USBModemType == "3G") oidstr = ACT_OP_PPP_DISCONN; else if (usb3GObj.USBModemType == "4G") oidstr = ACT_OP_DHCP_RELEASE; else return; $.addLoading($("#network_status"));//Modified by pjf 2017-12-12, change loading logo position //doSave(sysMode); $("#disconnectBtn").prop("disabled", true); $.dm.op({oid:oidstr, data:{ stack:usb3GObj.stack }, callback:{ success:function(){ $.removeLoading(); $.timeout(doReload, 5000); } } }); $("#network_status").html("<span class=&#39;T T_disconnecting&#39;>" + s_str.disconnecting + "</span>"); $("#connection_status").html("<span class=&#39;T T_disconnecting&#39;>" + s_str.disconnecting + "</span>"); flagDisconneting = true; }); $("#pinUnlockBtn").click(function doPinUnlock() { var unlockPinCode; var autoUnlock; unlockPinCode = $("#pin_code").val(); autoUnlock = ($("#auto_unlock_pin_en").prop("data-checked") == true) ? 1 : 0; if (unlockPinCode === "") return $.alert(ERR_PIN_CODE_EMPTY); if ($.asc(unlockPinCode, true)) return $.alert(ERR_PIN_ASCII); $.dm.set({ oid: &#39;DEV2_ADT_WAN&#39;, data: { USBPinCode: unlockPinCode, USBPinAction: &#39;3&#39;, USBAutoUnlockPin: autoUnlock, stack: usb3GObj.stack }, callback: { success: function() { $.reload(); } } }); }); $("#pinChangeBtn").click(function() { var oldPin; var newPin1; oldPin = $("#old_pin").val(); if (oldPin === "") return $.alert(ERR_PIN_CODE_EMPTY); if ($.asc(oldPin, true)) return $.alert(ERR_PIN_ASCII); newPin1 = $("#new_pin1").val(); if (newPin1 === "") return $.alert(ERR_PIN_CODE_EMPTY); if ($.asc(newPin1, true)) return $.alert(ERR_PIN_ASCII); if (newPin1 !== $("#new_pin2").val()) return $.alert(ERR_PIN_CODE_CONFLICT); $.dm.set({ oid:WAN_USB_3G_LINK_CFG, data:{ stack:usb3gLinkCfgStk, pinCode:oldPin + "," + newPin1, pinAction: "4" }, callback:{ success:doReload } }); }); $("#advClick").click(function() { if ($("#ppp_elem_adv").hasClass("nd")) { $("#ppp_elem_adv").removeClass("nd"); } else { $("#ppp_elem_adv").addClass("nd"); } }); $("#isp_sel").click(function() { showParam(0); }); $("#modem_set_Btn").click(function doModemSet() { $.loadMain("usb3gModemList.htm"); }); $("backup_min_sel").change(function() { if ($("#backup_min_sel").data("value") == "10") { $("#backup_sec_sel option[value=&#39;" + 0 + "&#39;]").prop("selected", "selected"); $("#backup_sec_sel").prop("disabled", true); } else { $("#backup_sec_sel").prop("disabled", false); } }); $("revert_min_sel").change(function() { if ($("#revert_min_sel").data("value") == "10") { $("#revert_sec_sel option[value=&#39;" + 0 + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); $("#revert_sec_sel").prop("disabled", true); } else { $("#revert_sec_sel").prop("disabled", false); } }); function doReload(err) { if (!err) { $.reload(); } } function showISP() { var $selIspObj = $("#isp_sel"); $("#isp_sel").empty(); i = 0; for (tag in w3gisp_js[currentLocation]) { if (w3gisp_js[currentLocation][tag]["isp_name"] == undefined) { continue; } var $ispOption = $("<option></option>") $ispOption.val(i); $ispOption.text(w3gisp_js[currentLocation][tag]["isp_name"]); $selIspObj.append($ispOption); i++; } var options = { refresh: 1 }; $(&#39;#isp_sel&#39;).tpSelect(options); } function showParam(initFlag) { var locationIndex = currentLocation; var isp = "isp" + $("#isp_sel").data("value"); if (1 == pageInit) { $("#manual_apn").tpCheckbox(); } if ($("#manual_apn").prop("data-checked") == false) { $("#username").val(w3gisp_js[locationIndex][isp]["username"]); $("#password").val(w3gisp_js[locationIndex][isp]["password"]); $("#apn").val(w3gisp_js[locationIndex][isp]["apn"]); $("#dial_num").val(w3gisp_js[locationIndex][isp]["dial_num"]); } else if (initFlag == 1) { $("#username").val(usb3GObj.PPPUserName); $("#password").val(usb3GObj.PPPPassword); $("#apn").val(usb3GObj.USBAPN); $("#dial_num").val(usb3GObj.USBDialNumber); } } function doManuallyIdleTime(val) { if (val == 1) { $("#idle_time").prop("disabled", false); } else { $("#idle_time").prop("disabled", true); } } function disableWidgetForBackup(backupEnable, manulAPN, action) { if (INCLUDE_SYSMODE && sysMode.mode != "USB_3G_MODE") { $("#connectBtn").prop("disabled", true); $("#disconnectBtn").prop("disabled", true); if (backupEnable == 1) { $("#pppClick").removeClass("nd"); if (manulAPN != 1) { $("#setManual").addClass("nd"); $("#isp_sel").prop("disabled", false); } else { $("#setManual").removeClass("nd"); $("#isp_sel").prop("disabled", true); } } else { $("#pppClick").addClass("nd"); $("#ppp_elem_adv").addClass("nd"); $("#isp_sel").prop("disabled", true); } if (action == 1 || (action == 0 && backupEnable != 1)) { $("#isp_sel").tpSelect({ refresh: 1 }); } } } function update3GState(curUsbStk) { $.auto(function() { $.dm.getList({ oid: &#39;DEV2_ADT_WAN&#39;, callback: { success: function(data) { $.each(data, function() { if (this.accessMode === &#39;USB&#39; && this.connType === &#39;PPP3G&#39;) { wanPPP3G = this; if (this.enable === &#39;1&#39; && this.USBModemType == &#39;3G&#39;) { usb3GObj = this; curUsbStk = this.stack; } } if (this.accessMode === &#39;USB&#39; && this.connType === &#39;DHCP4G&#39;) { wanDHCP4G = this; if (this.enable === &#39;1&#39; && this.USBModemType == &#39;4G&#39;) { usb3GObj = this; curUsbStk = this.stack; } } }); success(); } } }); function success() { $("#card_name_unplugged").addClass("nd"); $("#card_name_unknown").addClass("nd"); $("#card_name_ing").addClass("nd"); $("#card_name_ok").addClass("nd"); if (usb3GObj.USBModemStatus == "Unplugged") { $("#card_name_unplugged").removeClass("nd"); } else if (usb3GObj.USBModemStatus == "Unknown") { $("#card_name_unknown").removeClass("nd"); } else if (usb3GObj.USBModemStatus == "Identifying") { $("#card_name_ing").removeClass("nd"); } else { $("#card_name_ok").removeClass("nd"); } $("#pin_status_unknown").addClass("nd"); $("#pin_status_fail").addClass("nd"); $("#pin_status_ready").addClass("nd"); $("#pin_status_pin").addClass("nd"); $("#pin_status_puk").addClass("nd"); $("#puk_lock_info").addClass("nd"); $("#pin_status_errror").addClass("nd"); $("#pin_unlock").addClass("nd"); $("#auto_unlock_pin").addClass("nd"); if (usb3GObj.USBSimStatus == SIM_PIN_UNKNOW_STATUS) { $("#pin_status_unknown").removeClass("nd"); } else if (usb3GObj.USBSimStatus == CONN_SCRIPT_FAIL) { $("#pin_status_fail").removeClass("nd"); } else if (usb3GObj.USBSimStatus == SIM_PIN) { $("#pin_status_pin").removeClass("nd"); $("#pin_unlock").removeClass("nd"); $("#auto_unlock_pin").removeClass("nd"); } else if (usb3GObj.USBSimStatus == SIM_PUK) { $("#pin_status_puk").removeClass("nd"); $("#puk_lock_info").removeClass("nd"); } else if (usb3GObj.USBSimStatus == PHONE_FAILURE) { $("#pin_status_errror").removeClass("nd"); } else { $("#pin_status_ready").removeClass("nd"); } if (usb3GObj.USBUserSaved == 0 && usb3GObj.USBIspCfgReaded == 1 && usb3GObj.USBModemStatus != "Unplugged") { currentLocation = "location" + usb3GObj.USBCountryIndex; if((pageInit == 1) || oldUSBCountryIndex != usb3GObj.USBCountryIndex) { showISP(); } oldUSBCountryIndex = usb3GObj.USBCountryIndex; $("#isp_sel").find("option[value=&#39;" + usb3GObj.USBISPIndex + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); if ($("#manual_apn").prop("data-checked") == false) { showParam(1); } } if ((usb3GObj.USBModemType == &#39;3G&#39;) && (wanPPP3G.enable == true)) { $("#setUsername").removeClass("nd"); $("#setPassword").removeClass("nd"); if ((wanPPP3G.connStatusV4 == "Connected") && (wanPPP3G.USBModemStatus == "Identify successfully")) { $("#connectBtn").prop("disabled", true); if (flagDisconneting == false) { $("#disconnectBtn").prop("disabled", false); } $("#isp_sel").prop("disabled", true); } else if ((wanPPP3G.connStatusV4 == "Disconnected") && (wanPPP3G.USBModemStatus == "Identify successfully")) { if (flagDisconneting == false) { $("#connectBtn").prop("disabled", false); } $("#disconnectBtn").prop("disabled", true); $("#isp_sel").prop("disabled", false); } else { $("#connectBtn").prop("disabled", true); $("#disconnectBtn").prop("disabled", true); $("#isp_sel").prop("disabled", false); } } else if ((usb3GObj.USBModemType == &#39;4G&#39;) && (wanDHCP4G.enable == true)) { $("#setUsername").addClass("nd"); $("#setPassword").addClass("nd"); if ((wanDHCP4G.connStatusV4 == "Connected") && (wanPPP3G.USBModemStatus == "Identify successfully")) { $("#connectBtn").prop("disabled", true); if (flagDisconneting == false) { $("#disconnectBtn").prop("disabled", false); } $("#isp_sel").prop("disabled", true); } else if ((wanDHCP4G.connStatusV4 == "Disconnected") && (wanPPP3G.USBModemStatus == "Identify successfully")) { if (flagDisconneting == false) { $("#connectBtn").prop("disabled", false); } $("#disconnectBtn").prop("disabled", true); $("#isp_sel").prop("disabled", false); } else { $("#connectBtn").prop("disabled", true); $("#disconnectBtn").prop("disabled", true); $("#isp_sel").prop("disabled", false); } } else { $("#connectBtn").prop("disabled", true); $("#disconnectBtn").prop("disabled", true); $("#isp_sel").prop("disabled", false); } if (flagDisconneting == false) { if (usb3GObj.USBModemType == &#39;3G&#39;) { if (wanPPP3G.connStatusV4 == "Connected") { $("#network_status").html("<span class=&#39;T T_connected&#39;>" + m_str.connected + "</span>"); $("#connection_status").html("<span class=&#39;T T_connected&#39;>" + m_str.connected + "</span>"); } else if (wanPPP3G.connStatusV4 == "Disconnected") { $("#network_status").html("<span class=&#39;T T_disconnected&#39;>" + m_str.disconnected + "</span>"); $("#connection_status").html("<span class=&#39;T T_disconnected&#39;>" + m_str.disconnected + "</span>"); } else { $("#network_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); $("#connection_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); } } else if (usb3GObj.USBModemType == &#39;4G&#39;) { if (wanDHCP4G.connStatusV4 == "Connected") { $("#network_status").html("<span class=&#39;T T_connected&#39;>" + m_str.connected + "</span>"); $("#connection_status").html("<span class=&#39;T T_connected&#39;>" + m_str.connected + "</span>"); } else if (wanDHCP4G.connStatusV4 == "Disconnected") { $("#network_status").html("<span class=&#39;T T_disconnected&#39;>" + m_str.disconnected + "</span>"); $("#connection_status").html("<span class=&#39;T T_disconnected&#39;>" + m_str.disconnected + "</span>"); } else { $("#network_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); $("#connection_status").html("<span class=&#39;T T_connecting&#39;>" + m_str.connecting + "</span>"); } } } if (1 == pageInit) { $("#usb3g_backup_en").tpCheckbox(); $("#manual_apn").tpCheckbox(); } var bacupEnOnPage = ($("#usb3g_backup_en").prop("data-checked") == true) ? 1 : 0; var manualAPN = ($("#manual_apn").prop("data-checked") == true) ? 1 : 0; disableWidgetForBackup(bacupEnOnPage, manualAPN, 0); if (usb3GObj.USBModemStatus != "Unplugged") { $("#isp_sel").tpSelect({ refresh: 1 }); } } }, 5000, true); } function init() { var wanList, curUsbStk; var lockNum = 2; if (INCLUDE_SYSMODE){ lockNum++; } if (INCLUDE_USER_RESTRICTION && $.userType == "User" && $.unlocked == 0) { $("#saveBtn").prop(&#39;disabled&#39;, true); } $.dm.get({ oid: &#39;DEV2_USB&#39;, callback: { success: function(data) { wanUsb3g = data; complete(); } } }); if (INCLUDE_SYSMODE ) { $.dm.get({ oid: &#39;DEV2_SYSMODE&#39;, callback: { success: function(data) { sysMode = data; complete(); } } }); } $.dm.getList({ oid: &#39;DEV2_ADT_WAN&#39;, callback: { success: function(data) { wanList = data; $.each(data, function() { if (this.accessMode === &#39;USB&#39; && this.connType === &#39;PPP3G&#39;) { wanPPP3G = this; if (this.enable === &#39;1&#39; && this.USBModemType == &#39;3G&#39;) { usb3GObj = this; curUsbStk = this.stack; } } if (this.accessMode === &#39;USB&#39; && this.connType === &#39;DHCP4G&#39;) { wanDHCP4G = this; if (this.enable === &#39;1&#39; && this.USBModemType == &#39;4G&#39;) { usb3GObj = this; curUsbStk = this.stack; } } }); complete(); } } }); var complete = $.createLock(lockNum, function() { if (INCLUDE_SYSMODE) { if (sysMode.mode == "USB_3G_MODE") { $("#connectStat").addClass("nd"); $("#usb3gBackupEnable").addClass("nd"); $("#backupNotice").addClass("nd"); } else if (sysMode.mode == "DSL_MODE") { $("#conMode").addClass("nd"); $("#maxIdleTime").addClass("nd"); $("#networkStat").addClass("nd"); $("#sysmode_dsl").removeClass("nd"); } else if ($.getSysMode().includes("EWAN_MODE")) { $("#conMode").addClass("nd"); $("#maxIdleTime").addClass("nd"); $("#networkStat").addClass("nd"); $("#sysmod_eth").removeClass("nd"); } } $("#pppClick").removeClass("nd"); $("#ppp_elem_adv").addClass("nd"); $("#usb3g_backup_en").prop("checked", (wanUsb3g.X_TP_BackupEnable == 1)).tpCheckbox(); $("#auto_unlock_pin_en").prop("checked", (wanUsb3g.autoUnlockPin == 1)).tpCheckbox(); $("#manual_pinCode").prop("checked", false); $("#p_chg_pin_en").addClass("nd"); $("#p_old_pin").addClass("nd"); $("#p_new_pin1").addClass("nd"); $("#p_new_pin2").addClass("nd"); $("#p_pinChangeBtn").addClass("nd"); if (!wanPPP3G) { return false; } currentLocation = "location" + wanPPP3G.USBCountryIndex; showISP(); $("#isp_sel").find("option[value=&#39;" + wanPPP3G.USBISPIndex + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); $("#manual_apn").prop("checked", (wanPPP3G.USBManualAPNEnabled == 1)); showParam(1); if (wanPPP3G.USBManualAPNEnabled == 1 || wanPPP3G.USBCountryIndex == 500) { $("#setManual").removeClass("nd"); $("#isp_sel").prop("disabled", true).tpSelect({refresh: 1}); } else { $("#setManual").addClass("nd"); $("#isp_sel").prop("disabled", false).tpSelect({refresh: 1}); } if (wanPPP3G.PPPConnectionTrigger == "OnDemand") { $("#connectMode").find("option[value=&#39;" + "Connect on demand" + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); $("#idle_time").val(wanPPP3G.PPPIdleDisconnectTime); } else if (wanPPP3G.PPPConnectionTrigger == "AlwaysOn") { $("#connectMode").find("option[value=&#39;" + "Always on" + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); $("#idle_time").prop("disabled", true); } else if (wanPPP3G.PPPConnectionTrigger == "Manual") { $("#connectMode").find("option[value=&#39;" + "Connect manually" + "&#39;]").prop(&#39;selected&#39;, &#39;selected&#39;); $("#idle_time").val(wanPPP3G.PPPIdleDisconnectTime); } $("#connectMode").tpSelect({refresh: 1}); if (wanPPP3G.PPPAuthProtocol == "AUTO_AUTH") { $("#ppp_authpro").find("option[value=&#39;" + "AUTO_AUTH" + "&#39;]").prop("selected", "selected"); } else if (wanPPP3G.PPPAuthProtocol == "PAP") { $("#ppp_authpro").find("option[value=&#39;" + "PAP" + "&#39;]").prop("selected", "selected"); } else if (wanPPP3G.PPPAuthProtocol == "CHAP") { $("#ppp_authpro").find("option[value=&#39;" + "CHAP" + "&#39;]").prop("selected", "selected"); } $("#ppp_authpro").tpSelect({refresh: 1}); $("#mtu_size").val(wanPPP3G.maxMTUSize); $("#ppp_echotime").val(wanPPP3G.PPPLCPEcho ? wanPPP3G.PPPLCPEcho : 0); $("#static_ip").tpAddress(&#39;val&#39;, wanPPP3G.connIPv4Address ? wanPPP3G.connIPv4Address : "0.0.0.0"); $("#manual_ipAddr").prop("checked", (wanPPP3G.specifiedIPv4AddrEnabled == 1)).tpCheckbox(); if (wanPPP3G.specifiedIPv4AddrEnabled == 1) { $("#static_ip_div").removeClass("nd"); } else { $("#static_ip_div").addClass("nd"); } $("#dns1").tpAddress(&#39;val&#39;, (wanPPP3G.connIPv4DnsServer.split(",")[0]) ? wanPPP3G.connIPv4DnsServer.split(",")[0] : "0.0.0.0"); $("#dns2").tpAddress(&#39;val&#39;, (wanPPP3G.connIPv4DnsServer.split(",")[1]) ? wanPPP3G.connIPv4DnsServer.split(",")[1] : "0.0.0.0"); $("#manual_dns").prop("checked", (wanPPP3G.specifiedDnsv4Enabled == 1)).tpCheckbox(); if (wanPPP3G.specifiedDnsv4Enabled == 1) { $("#primary_dns_div").removeClass("nd"); $("#secondary_dns_div").removeClass("nd"); } else { $("#primary_dns_div").addClass("nd"); $("#secondary_dns_div").addClass("nd"); } update3GState(curUsbStk); pageInit = 0; }); if(window[&#39;INCLUDE_WISP_DE&#39;]){ $(&#39;#network_status&#39;).hide(); } } function addUsb3gAttrs() { wanUsb3gArg.X_TP_BackupEnable = ($("#usb3g_backup_en").prop("data-checked") == true) ? 1 : 0; if ($("#isp_sel").data("value") != usb3GObj.USBISPIndex) { // wanUsb3gArg.userSaved = 1; } wanUsb3gArg.stack = wanUsb3g.stack; return true; } function addPPP3GAttrs() { wanPPP3GArg.PPPUserName = $("#username").val(); wanPPP3GArg.PPPPassword = $("#password").val(); wanPPP3GArg.USBISPIndex = $("#isp_sel").data("value"); wanPPP3GArg.USBManualAPNEnabled = ($("#manual_apn").prop("data-checked") == true) ? 1 : 0; wanPPP3GArg.USBDialNumber = $("#dial_num").val(); wanPPP3GArg.USBAPN = $("#apn").val(); var pattern = /[^0-9\*#]/ig; if (wanPPP3GArg.USBDialNumber.match(pattern) != null) { $.alert(ERR_3G_INVLIAD_DIALNUM); $("#dial_num").focus().select(); return false; } var idleTime = $("#idle_time"); // Connection Mode if ($("#connectMode").data("value") == "Connect on demand") { wanPPP3GArg.PPPConnectionTrigger = "OnDemand"; wanDHCP4GArg.PPPConnectionTrigger = "OnDemand"; if ((idleTime.val()) && ($.isnum(idleTime.val()))) { wanPPP3GArg.PPPIdleDisconnectTime = parseInt(idleTime.val(), 10); wanDHCP4GArg.PPPIdleDisconnectTime = parseInt(idleTime.val(), 10); } else { $.alert(ERR_IDLETIME_INVAD); idleTime.focus().select(); return false; } } else if ($("#connectMode").data("value") == "Always on") { wanPPP3GArg.PPPConnectionTrigger = "AlwaysOn"; wanDHCP4GArg.PPPConnectionTrigger = "AlwaysOn"; } else if ($("#connectMode").data("value") == "Connect manually") { wanPPP3GArg.PPPConnectionTrigger = "Manual"; wanDHCP4GArg.PPPConnectionTrigger = "Manual"; if ((idleTime.val()) && ($.isnum(idleTime.val()))) { wanPPP3GArg.PPPIdleDisconnectTime = parseInt(idleTime.val(), 10); wanDHCP4GArg.PPPIdleDisconnectTime = parseInt(idleTime.val(), 10); } else { $.alert(ERR_IDLETIME_INVAD); idleTime.focus().select(); return false; } } wanPPP3GArg.PPPAuthProtocol = $("#ppp_authpro").data("value"); // Max Mtu var mtuInput = $("#mtu_size"); if ((mtuInput.val() >= 576) && (mtuInput.val() <= 1492)) { wanPPP3GArg.maxMTUSize = parseInt(mtuInput.val(), 10); } else { $.alert(ERR_WAN_PPPOE_MTU_INVAD); mtuInput.focus().select(); return false; } wanPPP3GArg.NATEnabled = 1; // Echo Time var echoTime = $("#ppp_echotime"); if ((parseInt(echoTime.val(), 10) >= 0) && (parseInt(echoTime.val(), 10) <= 120)) { wanPPP3GArg.PPPLCPEcho = parseInt(echoTime.val(), 10); } else { $.alert(ERR_WAN_ECHOTIME_INVAD); echoTime.focus().select(); return false; } // Static IP var staticIp = $("#static_ip"); if ($("#manual_ipAddr").prop("data-checked") == true) { if ((staticIp.tpAddress(&#39;val&#39;) != "") && (staticIp.tpAddress(&#39;val&#39;) != "0.0.0.0") && ($.ifip(staticIp.tpAddress(&#39;val&#39;), true))) { $.alert(ERR_IP_FORMAT); staticIp.focus().select(); return false; } wanPPP3GArg.specifiedIPv4AddrEnabled = 1; wanPPP3GArg.connIPv4Address = (staticIp.tpAddress(&#39;val&#39;)) ? $.ip2ip(staticIp.tpAddress(&#39;val&#39;)) : "0.0.0.0"; } else { wanPPP3GArg.specifiedIPv4AddrEnabled = 0; } // DNS if ($("#manual_dns").prop("data-checked") == true) { var tempDNS1 = $("#dns1"); var tempDNS2 = $("#dns2"); if ((tempDNS1.tpAddress(&#39;val&#39;) != "") && (tempDNS1.tpAddress(&#39;val&#39;) != "0.0.0.0") && ($.ifip(tempDNS1.tpAddress(&#39;val&#39;), true))) { $.alert(ERR_WAN_DNSADDR_INVAD); tempDNS1.focus().select(); return false; } if ((tempDNS2.tpAddress(&#39;val&#39;) != "") && (tempDNS2.tpAddress(&#39;val&#39;) != "0.0.0.0") && ($.ifip(tempDNS2.tpAddress(&#39;val&#39;), true))) { $.alert(ERR_WAN_SECDNS_INVAD); tempDNS2.focus().select(); return false; } var tmpDns1 = (tempDNS1.tpAddress(&#39;val&#39;)) ? $.ip2ip(tempDNS1.tpAddress(&#39;val&#39;)) : "0.0.0.0"; var tmpDns2 = (tempDNS2.tpAddress(&#39;val&#39;)) ? $.ip2ip(tempDNS2.tpAddress(&#39;val&#39;)) : "0.0.0.0"; wanPPP3GArg.specifiedDnsv4Enabled = 1; wanPPP3GArg.connIPv4DnsServer = tmpDns1 + "," + tmpDns2; wanDHCP4GArg.specifiedDnsv4Enabled = 1; wanDHCP4GArg.connIPv4DnsServer = tmpDns1 + "," + tmpDns2; } else { wanPPP3GArg.specifiedDnsv4Enabled = 0; wanDHCP4GArg.specifiedDnsv4Enabled = 0; } wanPPP3GArg.stack = wanPPP3G.stack; wanDHCP4GArg.stack = wanDHCP4G.stack; return true; } function doSave(sysMode) { if (!addUsb3gAttrs()) { return; } if (!addPPP3GAttrs()) { return; } var complete = $.createLock(3, function() { $.removeLoading(); $.reload(); }); if ($.isSubset(wanPPP3GArg, wanPPP3G)) { complete(); } else { $.dm.set({ oid: &#39;DEV2_ADT_WAN&#39;, data: wanPPP3GArg, callback: { success: complete } }); } if ($.isSubset(wanDHCP4GArg, wanDHCP4G)) { complete(); } else { $.dm.set({ oid: &#39;DEV2_ADT_WAN&#39;, data: wanDHCP4GArg, callback: { success: complete } }); } if ($.isSubset(wanUsb3gArg, wanUsb3g)) { complete(); } else { $.dm.set({ oid: &#39;DEV2_USB&#39;, data: wanUsb3gArg, callback: { success: complete } }); } } })(); </script> 这是整个前端代码,我想在页面首行添加一行文本比如, 你想要的连接是:abc; abc从 var echoTime = $("#ppp_echotime");读取,请告诉我如何添加,不用全部把整个文件返回
09-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值