亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? efaxio.c

?? efax傳真軟件源代碼
?? C
字號:
#include <ctype.h>		/* ANSI C */#include <signal.h>    #include <stdio.h>#include <string.h>#include "efaxio.h"		/* EFAX */#include "efaxmsg.h"#include "efaxos.h"#define MAXRESPB 1024	    /* maximum bytes of modem responses saved */char *prompts[] = {		/* modem responses that are prompts */  "OOK", "-CONNECT FAX", "CCONNECT", "NNO CARRIER", "EERROR",  "NNO DIALTONE", "BBUSY", "NNO ANSWER", "M+FCERROR", "VVCON",   "DDATA", 0 } ;int lockpolldelay = 8000 ;	/* milliseconds between checks of lock files */			    /* signals to be caught so can hang up phone */int catch [] = { CATCHSIGS, 0 } ;/* Modem features */int c1=0, c20=0 ;		/* use class 1/class 2.0 */int c2=0 ;			/* force class 2 */int cmdpause = T_CMD ;		/* delay before each init command */int vfc = 0 ;			/* virtual flow control */uchar startchar = DC2 ;	/* character to start reception */				/* response detector lookup tables */uchar rd_nexts [ 256 ] = { 0 }, rd_allowed [ 256 ] = { 0 } ;/* Initialize two lookup tables used by a state machine to detect   modem responses embedded in data.  The first shows which   characters are allowed in each state.  The second shows which   characters in each state increment the state.  Each table is   indexed by character.  The detector sequences through 6 states   corresponding to sequences of the form: <CR><LF>AX...<CR><LF>   where A is an upper-case letter and X is an u.c. letter or   space.  The state values are 01, 02, 04, 08, 10 and 20 (hex)   and are used to mask in a bit from the tables.  When the state   reaches 0x20 a modem response has been detected.  With random   data there is a small O(10^-10) chance of spurious   detection. */void rd_init ( void ){  int c ;  rd_nexts[CR] = rd_allowed[CR] = 0x01 | 0x08 ;  rd_nexts[LF] = rd_allowed[LF] = 0x02 | 0x10 ;  for ( c='A' ; c<'Z' ; c++ ) {      rd_allowed[c] = 0x04 | 0x08 ;      rd_nexts[c] = 0x04 ;    }  rd_allowed[' '] = 0x08 ;}/* Get a modem response into buffer s, storing up to n bytes.   The response includes characters from the most recent control   character until the first LF following some text.  Returns s   or null if times-out in t deciseconds or on i/o error. Trace   messages are buffered to reduce possible timing problems. */char *tgets( TFILE *f, char *s, int len, int t ){  int i, n, c ;  for ( i=n=0 ; 1 ; i++ ) {    if ( ( c = tgetc ( f, t ) ) == EOF ) break ;    if ( i == 0 ) msg ( "M-+ .%03d [", time_ms ( ) ) ;    msg ( "M-+ %s", cname ( c ) ) ;    if ( n > 0 && c == LF ) break ;    if ( ! iscntrl ( c ) && n < len ) s[n++] = c ;  }  if ( n >= len ) msg ( "W- modem response overflow" ) ;  s[ n < len ? n : len-1 ] = '\0' ;  if ( i > 0 ) {    if ( c == EOF ) msg ( "M- <...%.1f s>]", (float)t/10 ) ;    else msg ( "M- ]" ) ;  }  return c == EOF ? 0 : s ;}/* Send bytes to the modem, doing bit-reversal and escaping DLEs.   Returns 0 or 2 on errors. */int sendbuf ( TFILE *f, uchar *p, int n, int dcecps ){  int err=0, c, over ;  uchar *order = f->obitorder ;  uchar buf [ MINWRITE+1 ] ;  int i ;  for ( i=0 ; ! err && n > 0 ; n-- ) {    c  = order [ *p++ ] ;    if ( c == DLE ) buf[i++] = DLE ;    buf[i++] = c ;    if ( i >= MINWRITE || n == 1 ) {      /* ``virtual'' flow control */      if ( vfc && dcecps > 0 ) {	over = f->bytes - ( proc_ms ( ) - f->mstart ) * dcecps / 1000 	  - MAXDCEBUF ;	if ( over > 0 ) msleep ( over * 1000 / dcecps ) ;      }      if ( tput ( f, buf, i ) < 0 )	err = msg ( "ES2fax device write error:" ) ;      i = 0 ;    }  }  return err ;}/* Scan responses since giving previous command (by cmd()) for a   match to string 's' at start of response.  If a matching   response is found it finds the start of the data field which   is defined as the next non-space character in the current or   any subsequent responses. If ip is not null, reads one integer   (decimal format) into ip. [problem: Class 2.0 status responses   are in hex.] Returns pointer to start of data field of   response string or NULL if not found. */char responses [ MAXRESPB ], *lresponse = responses ;char *sresponse ( char *s, int *ip ){  char *p, *r = 0 ;  int lens, lenr ;    lens = strlen ( s ) ;  for ( p=responses ; p<lresponse ; p += strlen(p) + 1 ) {    if ( ! strncmp ( p, s, lens ) ) {      r = p + lens ;      lenr = strlen ( r ) ;      if ( strspn ( r, " \r\n" ) == lenr && r+lenr < lresponse ) r += lenr ;      if ( ip && sscanf ( r, "%d", ip ) > 0 )	msg ( "R read value %d from \"%s\"", *ip, r ) ;    }      }  return r ;}/* Search for the string s in responses since last command.   Skips lines beginning with "AT" (command echo) and removes   trailing spaces.  Returns pointer to the string or NULL if not   found. */char *strinresp ( char *s ){  char *p, *r = 0 ;  for ( p=responses ; p<lresponse && !r ; p += strlen(p) + 1 )    if ( strncmp ( p, "AT", 2 ) )      r = strstr ( p, s ) ;  return r ;}/* Appends the value of the first response that includes the   string s to buffer buf of length len.  Skips characters before   and including "=" in the response and doesn't copy trailing   spaces.  */int getresp ( char *s, char *buf, int len ){  int err=0, n ;  char *p, *q ;    if ( ( p = strinresp ( s ) ) ) {    if ( ( q = strchr ( p, '=' ) ) ) p = q+1 ;    for ( q = p+strlen(p)-1 ; q>=p && isspace(*q) ; q-- ) ;    n = q - p + 1 ;    if ( n + strlen(buf) < len )      strncat ( buf, p, n ) ;    else      strncat ( buf, p, len - strlen(buf) - 1 ) ;  } else {    err = 1 ;  }  return err ;}/* Search for a match to the string s in a null-terminated array of   possible prefix strings pointed to by p.  The first character of each   prefix string is skipped.  Returns pointer to the table entry or NULL if   not found. */char *strtabmatch ( char **p, char *s ){  while ( *p && strncmp ( *p+1, s, strlen ( *p+1 ) ) ) p++ ;  return ( ! *p || **p == '-' ) ? NULL : *p ;}/* Send command to modem and check responses.  All modem commands   go through this function. Collects pending (unexpected)   responses and then pauses for inter-command delay (cmdpause)   if t is negative.  Writes command s to modem if s is not null.   Reads responses and terminates when a response is one of the   prompts in prompts[] or if times out in t deciseconds.   Repeats command if detects a RING response (probable   collision). Returns the first character of the matching prefix   string (e.g. 'O' for OK, 'C' for CONNECT, etc.)  or EOF if no   such response was received within timeout t. */int cmd ( TFILE *f, char *s, int t ){  char buf [ CMDBUFSIZE ], *p = "" ;  int resplen=0, pause=0 ;  if ( t < 0 ) {    pause = cmdpause ;    t = -t ;  }  lresponse = responses ;  retry:  if ( s ) {     while ( tgets ( f, buf, CMDBUFSIZE, pause ) )      msg ( "W- unexpected response \"%s\"", buf ) ;    msg ( "C- command  \"%s\"", s ) ;    if ( strlen(s) >= CMDBUFSIZE-4 ) {      msg ( "E modem command \"%s\" too long", s ) ;    } else {      sprintf ( buf, "AT%s\r", s ) ;      tput ( f, buf, strlen(buf) ) ;    }  }  if ( t ) {    msg ( "C- waiting %.1f s", ((float) t)/10 ) ;    while ( ( p = tgets ( f, buf, CMDBUFSIZE, t ) ) ) {      if ( ( resplen += strlen ( buf ) + 1 ) <= MAXRESPB ) {	strcpy ( lresponse, buf ) ;	lresponse += strlen ( buf ) + 1 ;      }            if ( ( p = strtabmatch ( (char**) prompts, buf ) ) ) {	msg ( "C- response \"%s\"", buf ) ;	break ;      }            if ( ! strcmp ( buf, "RING" ) ) { msleep ( 100 ) ; goto retry ; }    }  }  return p ? *p : EOF ;}/* Send command to modem and wait for reply after testing (and   possibly setting) current error status via err   pointer. Returns 0 if err is already set, command response, or   EOF on timeout. */int ckcmd ( TFILE *f, int *err, char *s, int t, int r ){  int c=0 ;  if ( ( ! err || ! *err ) && ( c = cmd ( f, s, t ) ) != r && r ) {    msg ( err ? "E %s %s %s" : "W %s %s %s",	 c == EOF ? "timed out" : "wrong response",	 s ? "after command: " :  "after waiting",	 s ? s : "" ) ;    if ( err ) *err = 3 ;  }  return c ;}/* Resynchronize modem from an unknown state.  If no immediate   response, try pulsing DTR low (needs &D{2,3,4}), and then   cancelling data or fax data modes.  In each case, discards any   responses for about 2 seconds and then tries command ATQ0V1 to   enable text responses.  Returns 0 if OK or 4 if no response.   */int modemsync ( TFILE *f ){  int err=0, method=0 ;  for ( method=0 ; ! err ; method++ ) {    switch ( method ) {    case 0 :       break ;    case 1 :      ttymode ( f, VOICECOMMAND ) ;      break ;    case 2 :       msg ("Isync: dropping DTR") ;      ttymode ( f, COMMAND ) ; msleep ( 200 ) ;      ttymode ( f, DROPDTR ) ; msleep ( 200 ) ;      ttymode ( f, COMMAND ) ;       break ;    case 3 :      msg ("Isync: sending escapes") ;      ttymode ( f, VOICECOMMAND ) ;      tput ( f, CAN_STR, 1 ) ;      tput ( f, DLE_ETX, 2 ) ;       msleep ( 100 ) ;      ttymode ( f, COMMAND ) ;      tput ( f, CAN_STR, 1 ) ;      tput ( f, DLE_ETX, 2 ) ;       msleep ( 1500 ) ;      tput ( f, "+++", 3 ) ;       break ;    case 4 :      err = msg ("E4sync: modem not responding") ;      continue ;    }    while ( method && cmd ( f, 0, 20 ) != EOF ) ;    if ( cmd ( f, "Q0V1", -20 ) == OK ) break ;  }  return err ;} /* Set up modem by sending initialization/reset commands.   Accepts either OK or CONNECT responses. Optionally changes   baud rate if a command begins with a number. Returns 0 if OK,   3 on errors. */int setup ( TFILE *f, char **cmds, int ignerr ){  int err=0 ;  char c ;  for ( ; ! err && *cmds ; cmds++ ) {#if 0    if ( *cmds && isdigit( **cmds ) ) {          }#endif    if ( ( c = cmd ( f, *cmds, -TO_RESET ) ) != OK && c !=  VCONNECT && 	! ignerr ) {      err = msg ( "E3modem command (%s) failed", *cmds ? *cmds : "none" ) ;    }  }  return err ;}/* Terminate session.  Makes sure modem is responding, sends   modem reset commands or hang-up command if none, removes lock   files. Returns 0 if OK, 3 on error.*/int end_session ( TFILE *f, char **zcmd,  char **lkfile, int sync ){  int err = 0 ;  if ( f && sync )     err = modemsync ( f ) ;  if ( f && zcmd && ! err && sync )     err = setup ( f, zcmd, 0 ) ;  if ( f )    ttymode ( f, ORIGINAL ) ;  if ( lkfile )    unlockall ( lkfile ) ;  return err ;}     /* Initialize session.  Try locking and opening fax device until opened or   get error. Then set tty modes, register signal handler, set up   modem. Returns 0 if OK, 2 on errors, 3 if initialization failed, 4 if no   modem response. */int begin_session ( TFILE *f, char *fname, int reverse, int hwfc, 		    char **lkfile, ttymodes mode, void (*onsig) (int) ){  int i, err=0, busy=0, minbusy=0 ;  do {    err = lockall ( lkfile, busy >= minbusy ) ;    if ( ! err ) err = ttyopen ( f, fname, reverse, hwfc ) ;    if ( err == 1 ) {       if ( busy++ >= minbusy ) {	msg ( "W %s locked or busy. waiting.", fname ) ;	minbusy = minbusy ? minbusy*2 : 1 ;      }      msleep ( lockpolldelay ) ;    }  } while ( err == 1 ) ;    if ( ! err ) msg ( "Iopened %s", fname ) ;  if ( ! err ) err = ttymode ( f, mode ) ;  if ( ! err ) {    rd_init ( ) ;    f->rd_state = RD_BEGIN ;  }    for ( i=0 ; ! err && catch [ i ] ; i++ )     if ( signal ( catch [ i ], onsig ) == SIG_ERR )       err = msg ( "ES2can't set signal %d handler:", catch [ i ] ) ;    if ( !err ) err = modemsync ( f ) ;  return err ;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线网站| 欧洲激情一区二区| 亚洲国产精品天堂| 亚洲小少妇裸体bbw| 亚洲视频一二区| 亚洲欧洲精品成人久久奇米网| 久久久久亚洲综合| 久久久精品免费网站| 久久亚洲精华国产精华液| 日韩精品在线网站| 久久综合九色综合欧美就去吻| 精品久久久久久久久久久久久久久久久 | 欧美色图片你懂的| 在线欧美日韩国产| 91精品婷婷国产综合久久| 欧美一区二区三区在线| 欧美tickling网站挠脚心| 欧美精品一区二区三区蜜桃| 久久久精品tv| 亚洲精品视频自拍| 亚洲韩国一区二区三区| 日韩va欧美va亚洲va久久| 老司机精品视频导航| 国产成人亚洲精品狼色在线| www.亚洲人| 欧美日韩精品一区二区三区蜜桃| 日韩欧美aaaaaa| 中文字幕+乱码+中文字幕一区| 18欧美亚洲精品| 性做久久久久久久免费看| 久久久天堂av| 91看片淫黄大片一级在线观看| 久久精品人人做人人爽人人| 一区在线中文字幕| 亚洲精品欧美激情| 精品国产1区二区| 日韩亚洲电影在线| av一本久道久久综合久久鬼色| 日韩精品专区在线影院观看| 欧美肥妇毛茸茸| 精品国产乱码久久久久久1区2区| 中文字幕av不卡| 午夜国产不卡在线观看视频| 国产精品系列在线播放| 色天天综合久久久久综合片| 日韩精品一区二区三区在线播放| 亚洲视频精选在线| 久色婷婷小香蕉久久| 91黄视频在线| 国产日韩亚洲欧美综合| 日韩激情av在线| 99免费精品在线| 久久久综合视频| 日韩二区在线观看| 在线日韩av片| 中文字幕一区二区日韩精品绯色| 青青草一区二区三区| 日本韩国视频一区二区| 国产精品日韩成人| 麻豆免费看一区二区三区| 欧美亚洲日本国产| 国产精品家庭影院| 国产精品中文字幕日韩精品| 欧美一区永久视频免费观看| 亚洲视频你懂的| 99久久精品情趣| 亚洲国产精品成人综合色在线婷婷| 午夜精品久久久久| 欧美在线视频日韩| 亚洲裸体xxx| 91免费观看在线| 亚洲人妖av一区二区| 91视频在线观看免费| 亚洲午夜在线观看视频在线| 97久久超碰精品国产| 中文字幕中文在线不卡住| 成人免费视频一区二区| 中文字幕日本不卡| 91美女在线观看| 亚洲另类中文字| 欧美色老头old∨ideo| 亚洲一区欧美一区| 欧美三级视频在线| 亚洲大片精品永久免费| 欧美一区二区视频免费观看| 蜜臀va亚洲va欧美va天堂| 日韩一区二区三区四区五区六区| 日本不卡在线视频| 日韩免费观看高清完整版在线观看| 天天爽夜夜爽夜夜爽精品视频| 欧美精品自拍偷拍动漫精品| 日本不卡一区二区三区 | 在线观看91av| 五月激情综合色| 精品国产乱码久久久久久闺蜜| 国产精品456| 日韩理论片网站| 欧美日本高清视频在线观看| 蜜桃视频一区二区三区在线观看 | 欧美一区二区三区免费视频| 天天影视色香欲综合网老头| 精品999在线播放| www.亚洲精品| 五月综合激情网| 欧美国产97人人爽人人喊| 一本色道久久综合狠狠躁的推荐| 亚洲国产成人高清精品| 亚洲一区二区三区四区的| 欧美一区二区三区日韩视频| 国产高清精品网站| 一区二区在线免费观看| 日韩视频免费直播| www.亚洲国产| 奇米影视7777精品一区二区| 国产视频一区不卡| 欧美日韩免费观看一区三区| 久久国产人妖系列| 亚洲色图.com| 91精品国产综合久久婷婷香蕉| 国产麻豆精品在线| 视频一区二区三区中文字幕| 久久久精品蜜桃| 欧美理论电影在线| www.在线成人| 九九九精品视频| 亚洲成人免费在线| 最新成人av在线| 精品日本一线二线三线不卡| 91免费观看视频| 国产综合色在线视频区| 亚洲电影中文字幕在线观看| 久久久久久影视| 91精品国产高清一区二区三区蜜臀 | 在线电影一区二区三区| 99久久精品国产一区二区三区| 日韩av电影免费观看高清完整版 | 中文字幕一区二区在线播放| 欧美一二三区在线| 欧美在线free| 99精品国产热久久91蜜凸| 国产精品99久久久久久似苏梦涵| 午夜欧美2019年伦理| 一区二区三区成人| 亚洲欧美在线观看| 中文字幕第一区| 久久精品免费在线观看| 欧美videos中文字幕| 日韩一级大片在线| 91精品国产色综合久久久蜜香臀| 欧美色图天堂网| 色就色 综合激情| 91福利视频久久久久| jlzzjlzz国产精品久久| av一区二区三区在线| 99在线精品一区二区三区| 丰满岳乱妇一区二区三区| 国产成人免费视频一区| 青青草一区二区三区| 另类专区欧美蜜桃臀第一页| 激情综合色播五月| 国内精品国产三级国产a久久| 奇米一区二区三区av| 美女免费视频一区| 国产麻豆精品在线观看| 成人免费黄色大片| 一本色道久久综合亚洲aⅴ蜜桃| jlzzjlzz亚洲女人18| 欧美性一级生活| 6080午夜不卡| 精品区一区二区| 久久99在线观看| 国产成人免费网站| 色综合久久久久网| 69堂国产成人免费视频| 精品美女在线观看| 中文字幕av一区二区三区| 亚洲综合激情小说| 奇米色一区二区三区四区| 国产一区欧美日韩| 91在线视频在线| 正在播放亚洲一区| 国产日韩成人精品| 亚洲资源在线观看| 国产伦精一区二区三区| 91小视频在线| 日韩欧美一区二区免费| 国产视频一区二区在线观看| 一区二区三区精品在线| 蜜桃91丨九色丨蝌蚪91桃色| 9人人澡人人爽人人精品| 91精品在线麻豆| 国产免费观看久久| 亚洲丰满少妇videoshd| 国产精品亚洲人在线观看| 在线视频你懂得一区二区三区| 精品国产在天天线2019| 综合亚洲深深色噜噜狠狠网站| 天堂在线一区二区| av在线一区二区三区| 欧美大黄免费观看|