📄 utilities.c
字号:
++i; } break; case TELQUAL_NAME: i = 2; fprintf(NetTrace, " NAME \""); while (i < length) putc(pointer[i++], NetTrace); putc('"', NetTrace); break; default: for (i = 2; i < length; i++) fprintf(NetTrace, " ?%d?", pointer[i]); break; } break;#endif#ifdef ENCRYPTION case TELOPT_ENCRYPT: fprintf(NetTrace, "ENCRYPT"); if (length < 2) { fprintf(NetTrace, " (empty suboption??\?)"); break; } switch (pointer[1]) { case ENCRYPT_START: fprintf(NetTrace, " START"); break; case ENCRYPT_END: fprintf(NetTrace, " END"); break; case ENCRYPT_REQSTART: fprintf(NetTrace, " REQUEST-START"); break; case ENCRYPT_REQEND: fprintf(NetTrace, " REQUEST-END"); break; case ENCRYPT_IS: case ENCRYPT_REPLY: fprintf(NetTrace, " %s ", (pointer[1] == ENCRYPT_IS) ? "IS" : "REPLY"); if (length < 3) { fprintf(NetTrace, " (partial suboption??\?)"); break; } if (ENCTYPE_NAME_OK(pointer[2])) fprintf(NetTrace, "%s ", ENCTYPE_NAME(pointer[2])); else fprintf(NetTrace, " %d (unknown)", pointer[2]); encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf)); fprintf(NetTrace, "%s", buf); break; case ENCRYPT_SUPPORT: i = 2; fprintf(NetTrace, " SUPPORT "); while (i < length) { if (ENCTYPE_NAME_OK(pointer[i])) fprintf(NetTrace, "%s ", ENCTYPE_NAME(pointer[i])); else fprintf(NetTrace, "%d ", pointer[i]); i++; } break; case ENCRYPT_ENC_KEYID: fprintf(NetTrace, " ENC_KEYID "); goto encommon; case ENCRYPT_DEC_KEYID: fprintf(NetTrace, " DEC_KEYID "); goto encommon; default: fprintf(NetTrace, " %d (unknown)", pointer[1]); encommon: for (i = 2; i < length; i++) fprintf(NetTrace, " %d", pointer[i]); break; } break;#endif /* ENCRYPTION */ case TELOPT_LINEMODE: fprintf(NetTrace, "LINEMODE "); if (length < 2) { fprintf(NetTrace, " (empty suboption??\?)"); break; } switch (pointer[1]) { case WILL: fprintf(NetTrace, "WILL "); goto common; case WONT: fprintf(NetTrace, "WONT "); goto common; case DO: fprintf(NetTrace, "DO "); goto common; case DONT: fprintf(NetTrace, "DONT "); common: if (length < 3) { fprintf(NetTrace, "(no option??\?)"); break; } switch (pointer[2]) { case LM_FORWARDMASK: fprintf(NetTrace, "Forward Mask"); for (i = 3; i < length; i++) fprintf(NetTrace, " %x", pointer[i]); break; default: fprintf(NetTrace, "%d (unknown)", pointer[2]); for (i = 3; i < length; i++) fprintf(NetTrace, " %d", pointer[i]); break; } break; case LM_SLC: fprintf(NetTrace, "SLC"); for (i = 2; i < length - 2; i += 3) { if (SLC_NAME_OK(pointer[i+SLC_FUNC])) fprintf(NetTrace, " %s", SLC_NAME(pointer[i+SLC_FUNC])); else fprintf(NetTrace, " %d", pointer[i+SLC_FUNC]); switch (pointer[i+SLC_FLAGS]&SLC_LEVELBITS) { case SLC_NOSUPPORT: fprintf(NetTrace, " NOSUPPORT"); break; case SLC_CANTCHANGE: fprintf(NetTrace, " CANTCHANGE"); break; case SLC_VARIABLE: fprintf(NetTrace, " VARIABLE"); break; case SLC_DEFAULT: fprintf(NetTrace, " DEFAULT"); break; } fprintf(NetTrace, "%s%s%s", pointer[i+SLC_FLAGS]&SLC_ACK ? "|ACK" : "", pointer[i+SLC_FLAGS]&SLC_FLUSHIN ? "|FLUSHIN" : "", pointer[i+SLC_FLAGS]&SLC_FLUSHOUT ? "|FLUSHOUT" : ""); if (pointer[i+SLC_FLAGS]& ~(SLC_ACK|SLC_FLUSHIN| SLC_FLUSHOUT| SLC_LEVELBITS)) fprintf(NetTrace, "(0x%x)", pointer[i+SLC_FLAGS]); fprintf(NetTrace, " %d;", pointer[i+SLC_VALUE]); if ((pointer[i+SLC_VALUE] == IAC) && (pointer[i+SLC_VALUE+1] == IAC)) i++; } for (; i < length; i++) fprintf(NetTrace, " ?%d?", pointer[i]); break; case LM_MODE: fprintf(NetTrace, "MODE "); if (length < 3) { fprintf(NetTrace, "(no mode??\?)"); break; } { char tbuf[64]; sprintf(tbuf, "%s%s%s%s%s", pointer[2]&MODE_EDIT ? "|EDIT" : "", pointer[2]&MODE_TRAPSIG ? "|TRAPSIG" : "", pointer[2]&MODE_SOFT_TAB ? "|SOFT_TAB" : "", pointer[2]&MODE_LIT_ECHO ? "|LIT_ECHO" : "", pointer[2]&MODE_ACK ? "|ACK" : ""); fprintf(NetTrace, "%s", tbuf[1] ? &tbuf[1] : "0"); } if (pointer[2]&~(MODE_MASK)) fprintf(NetTrace, " (0x%x)", pointer[2]); for (i = 3; i < length; i++) fprintf(NetTrace, " ?0x%x?", pointer[i]); break; default: fprintf(NetTrace, "%d (unknown)", pointer[1]); for (i = 2; i < length; i++) fprintf(NetTrace, " %d", pointer[i]); } break; case TELOPT_STATUS: { register char *cp; register int j, k; fprintf(NetTrace, "STATUS"); switch (pointer[1]) { default: if (pointer[1] == TELQUAL_SEND) fprintf(NetTrace, " SEND"); else fprintf(NetTrace, " %d (unknown)", pointer[1]); for (i = 2; i < length; i++) fprintf(NetTrace, " ?%d?", pointer[i]); break; case TELQUAL_IS: if (--want_status_response < 0) want_status_response = 0; if (NetTrace == stdout) fprintf(NetTrace, " IS\r\n"); else fprintf(NetTrace, " IS\n"); for (i = 2; i < length; i++) { switch(pointer[i]) { case DO: cp = "DO"; goto common2; case DONT: cp = "DONT"; goto common2; case WILL: cp = "WILL"; goto common2; case WONT: cp = "WONT"; goto common2; common2: i++; if (TELOPT_OK((int)pointer[i])) fprintf(NetTrace, " %s %s", cp, TELOPT(pointer[i])); else fprintf(NetTrace, " %s %d", cp, pointer[i]); if (NetTrace == stdout) fprintf(NetTrace, "\r\n"); else fprintf(NetTrace, "\n"); break; case SB: fprintf(NetTrace, " SB "); i++; j = k = i; while (j < length) { if (pointer[j] == SE) { if (j+1 == length) break; if (pointer[j+1] == SE) j++; else break; } pointer[k++] = pointer[j++]; } printsub(0, &pointer[i], k - i); if (i < length) { fprintf(NetTrace, " SE"); i = j; } else i = j - 1; if (NetTrace == stdout) fprintf(NetTrace, "\r\n"); else fprintf(NetTrace, "\n"); break; default: fprintf(NetTrace, " %d", pointer[i]); break; } } break; } break; } case TELOPT_XDISPLOC: fprintf(NetTrace, "X-DISPLAY-LOCATION "); switch (pointer[1]) { case TELQUAL_IS: fprintf(NetTrace, "IS \"%.*s\"", length-2, (char *)pointer+2); break; case TELQUAL_SEND: fprintf(NetTrace, "SEND"); break; default: fprintf(NetTrace, "- unknown qualifier %d (0x%x).", pointer[1], pointer[1]); } break; case TELOPT_NEW_ENVIRON: fprintf(NetTrace, "NEW-ENVIRON ");#ifdef OLD_ENVIRON goto env_common1; case TELOPT_OLD_ENVIRON: fprintf(NetTrace, "OLD-ENVIRON"); env_common1:#endif switch (pointer[1]) { case TELQUAL_IS: fprintf(NetTrace, "IS "); goto env_common; case TELQUAL_SEND: fprintf(NetTrace, "SEND "); goto env_common; case TELQUAL_INFO: fprintf(NetTrace, "INFO "); env_common: { register int noquote = 2;#if defined(ENV_HACK) && defined(OLD_ENVIRON) extern int old_env_var, old_env_value;#endif for (i = 2; i < length; i++ ) { switch (pointer[i]) { case NEW_ENV_VALUE:#ifdef OLD_ENVIRON /* case NEW_ENV_OVAR: */ if (pointer[0] == TELOPT_OLD_ENVIRON) {# ifdef ENV_HACK if (old_env_var == OLD_ENV_VALUE) fprintf(NetTrace, "\" (VALUE) " + noquote); else# endif fprintf(NetTrace, "\" VAR " + noquote); } else#endif /* OLD_ENVIRON */ fprintf(NetTrace, "\" VALUE " + noquote); noquote = 2; break; case NEW_ENV_VAR:#ifdef OLD_ENVIRON /* case OLD_ENV_VALUE: */ if (pointer[0] == TELOPT_OLD_ENVIRON) {# ifdef ENV_HACK if (old_env_value == OLD_ENV_VAR) fprintf(NetTrace, "\" (VAR) " + noquote); else# endif fprintf(NetTrace, "\" VALUE " + noquote); } else#endif /* OLD_ENVIRON */ fprintf(NetTrace, "\" VAR " + noquote); noquote = 2; break; case ENV_ESC: fprintf(NetTrace, "\" ESC " + noquote); noquote = 2; break; case ENV_USERVAR: fprintf(NetTrace, "\" USERVAR " + noquote); noquote = 2; break; default: def_case: if (isprint(pointer[i]) && pointer[i] != '"') { if (noquote) { putc('"', NetTrace); noquote = 0; } putc(pointer[i], NetTrace); } else { fprintf(NetTrace, "\" %03o " + noquote, pointer[i]); noquote = 2; } break; } } if (!noquote) putc('"', NetTrace); break; } } break; default: if (TELOPT_OK(pointer[0])) fprintf(NetTrace, "%s (unknown)", TELOPT(pointer[0])); else fprintf(NetTrace, "%d (unknown)", pointer[0]); for (i = 1; i < length; i++) fprintf(NetTrace, " %d", pointer[i]); break; } if (direction) { if (NetTrace == stdout) fprintf(NetTrace, "\r\n"); else fprintf(NetTrace, "\n"); } if (NetTrace == stdout) fflush(NetTrace); }}/* EmptyTerminal - called to make sure that the terminal buffer is empty. * Note that we consider the buffer to run all the * way to the kernel (thus the select). */voidEmptyTerminal(){#if defined(unix) fd_set o; FD_ZERO(&o);#endif /* defined(unix) */ if (TTYBYTES() == 0) {#if defined(unix) FD_SET(tout, &o); (void) select(tout+1, (fd_set *) 0, &o, (fd_set *) 0, (struct timeval *) 0); /* wait for TTLOWAT */#endif /* defined(unix) */ } else { while (TTYBYTES()) { (void) ttyflush(0);#if defined(unix) FD_SET(tout, &o); (void) select(tout+1, (fd_set *) 0, &o, (fd_set *) 0, (struct timeval *) 0); /* wait for TTLOWAT */#endif /* defined(unix) */ } }}voidSetForExit(){ setconnmode(0);#if defined(TN3270) if (In3270) { Finish3270(); }#else /* defined(TN3270) */ do { (void)telrcv(); /* Process any incoming data */ EmptyTerminal(); } while (ring_full_count(&netiring)); /* While there is any */#endif /* defined(TN3270) */ setcommandmode(); fflush(stdout); fflush(stderr);#if defined(TN3270) if (In3270) { StopScreen(1); }#endif /* defined(TN3270) */ setconnmode(0); EmptyTerminal(); /* Flush the path to the tty */ setcommandmode();}voidExit(int returnCode){ SetForExit(); exit(returnCode);}voidExitString(char *string, int returnCode){ SetForExit(); fwrite(string, 1, strlen(string), stderr); exit(returnCode);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -