📄 ckuusy.c
字号:
if (haveurl) { makestr(&ssh_hst,g_url.hos); makestr(&ssh_prt,g_url.svc); ckstrncpy(ttname,ssh_hst,TTNAMLEN+1); ckstrncat(ttname,":",TTNAMLEN+1); ckstrncat(ttname,ssh_prt,TTNAMLEN+1); } else #endif /* CK_URL */ { while (--xargc > 0) { /* Go through command line words */ xargv++; debug(F111,"cmdlin ssh xargv",*xargv,xargc); if (**xargv == '=') return(0); if (!strcmp(*xargv,"--")) /* getopt() conformance */ return(0);#ifdef VMS else if (**xargv == '/') continue;#endif /* VMS */ /* Got an option (begins with dash) */ else if (**xargv == '-') { int xx; x = *(*xargv+1); /* Get the option letter */ debug(F111,"cmdlin args 1",*xargv,xargc); xx = dossharg(x); debug(F101,"cmdlin doarg","",xx); debug(F111,"cmdlin args 2",*xargv,xargc); if (xx < 0) {#ifndef NOICP if (what == W_COMMAND) return(0); else#endif /* NOICP */ {#ifdef OS2 sleep(1); /* Give it a chance... */#endif /* OS2 */ doexit(BAD_EXIT,1); /* Go handle option */ } } } else { /* No dash must be hostname */ ckstrncpy(ttname,*xargv,TTNAMLEN+1); makestr(&ssh_hst,ttname); debug(F110,"cmdlin ssh host",ttname,0);#ifndef NOICP#ifndef NODIAL nhcount = 0; /* Check network directory */ debug(F101,"cmdlin nnetdir","",nnetdir); if (nnetdir > 0) /* If there is a directory... */ lunet(*xargv); /* Look up the name */ else /* If no directory */ nhcount = 0; /* we didn't find anything there */#ifdef DEBUG if (deblog) { debug(F101,"cmdlin lunet nhcount","",nhcount); if (nhcount > 0) { debug(F110,"cmdlin lunet nh_p[0]",nh_p[0],0); debug(F110,"cmdlin lunet nh_p2[0]",nh_p2[0],0); debug(F110, "cmdlin lunet nh_px[0][0]",nh_px[0][0],0); } }#endif /* DEBUG */ /* If network type specified */ /* it must be TCP/IP */ if (nhcount > 0 && nh_p2[0]) if (ckstrcmp(nh_p2[0],"tcp/ip",6,0)) nhcount = 0; if (nhcount == 1) { /* Still OK, so make substitution */ ckstrncpy(ttname,nh_p[0],TTNAMLEN+1); makestr(&ssh_hst,ttname); debug(F110,"cmdlin lunet substitution",ttname,0); }#endif /* NODIAL */#endif /* NOICP */ /* Service from command line? */ if (--xargc > 0 && !haveurl) { xargv++; ckstrncat(ttname,":",TTNAMLEN+1); ckstrncat(ttname,*xargv,TTNAMLEN+1); makestr(&ssh_prt,*xargv); debug(F110,"cmdlin telnet host2",ttname,0); }#ifdef COMMENT /* Do not substitute net dir service for ssh port */#ifndef NOICP#ifndef NODIAL /* No - how about in net directory? */ else if (nhcount) { if (nh_px[0][0]) { ckstrncat(ttname,":",TTNAMLEN+1); ckstrncat(ttname,nh_px[0][0],TTNAMLEN+1); makestr(&ssh_prt,nh_px[0][0]); } }#endif /* NODIAL */#endif /* NOICP */#endif /* COMMENT */ break; } } } local = 1; /* Try to open the connection */ nettype = NET_SSH; mdmtyp = -nettype; if (ttopen(ttname,&local,mdmtyp,0) < 0) { XFATAL("can't open host connection"); } network = 1; /* It's open */#ifdef CKLOGDIAL dolognet();#endif /* CKLOGDIAL */#ifndef NOXFER reliable = 1; /* It's reliable */ xreliable = 1; /* ... */ setreliable = 1;#endif /* NOXFER */ cflg = 1; /* Connect */ stayflg = 1; /* Stay */ tn_exit = 1; /* Telnet-like exit condition */ quiet = 1; exitonclose = 1; /* Exit when connection closes */#ifndef NOSPL if (local) { if (nmac) { /* Any macros defined? */ int k; /* Yes */ k = mlook(mactab,"on_open",nmac); /* Look this up */ if (k >= 0) { /* If found, */ if (dodo(k,ttname,0) > -1) /* set it up, */ parser(1); /* and execute it */ } } }#endif /* NOSPL */ return(0); }#endif /* SSHBUILTIN */ if (howcalled == I_AM_SSHSUB) return(0);/* From here down: We were called as "kermit" or "iksd". If we were started directly from a Kermit script file, the filename of the script is in argv[1], so skip past it.*/ if (xargc > 1) { int n = 1; if (*xargv[1] != '-') {#ifdef KERBANG /* If we were started with a Kerbang script, the script */ /* arguments were already picked up in prescan / cmdini() */ /* and there is nothing here for us anyway. */ if (!strcmp(xargv[1],"+")) return(0);#endif /* KERBANG */ if (cfilef) { /* Command file found in prescan() */ xargc -= n; /* Skip past it */ xargv += n; cfilef = 0; debug(F101,"cmdlin cfilef set to 0","",cfilef); } } }/* Regular Unix-style command line parser, mostly conforming with 'A Proposed Command Syntax Standard for Unix Systems', Hemenway & Armitage, Unix/World, Vol.1, No.3, 1984.*/ while (--xargc > 0) { /* Go through command line words */ xargv++; debug(F111,"cmdlin xargv",*xargv,xargc); if (**xargv == '=') return(0); if (!strcmp(*xargv,"--")) /* getopt() conformance */ return(0);#ifdef VMS else if (**xargv == '/') continue;#endif /* VMS */ else if (**xargv == '-') { /* Got an option (begins with dash) */ int xx; x = *(*xargv+1); /* Get the option letter */ debug(F111,"cmdlin args 1",*xargv,xargc); xx = doarg(x); debug(F101,"cmdlin doarg","",xx); debug(F111,"cmdlin args 2",*xargv,xargc); if (xx < 0) {#ifndef NOICP if (what == W_COMMAND) return(0); else#endif /* NOICP */ {#ifdef OS2 sleep(1); /* Give it a chance... */#endif /* OS2 */ doexit(BAD_EXIT,1); /* Go handle option */ } } } else if (!haveurl) { /* No dash where expected */ char xbuf[32]; char buf[128]; int k; k = ckstrncpy(xbuf,*xargv,40); if (k > 30) { xbuf[30] = '.'; xbuf[29] = '.'; xbuf[28] = '.'; } xbuf[31] = NUL; ckmakmsg(buf, 128, "invalid command-line option, type \"", myname, " -h\" for help", NULL ); fatal2(xbuf,buf); } }#ifdef DEBUG if (deblog) {#ifndef NOICP debug(F101,"cmdlin what","",what);#endif /* NOICP */ debug(F101,"cmdlin action","",action);#ifndef NOXFER debug(F101,"cmdlin stdouf","",stdouf);#endif /* NOXFER */ }#endif /* DEBUG */#ifdef NOICP if (!action && !cflg && !cnflg) { debug(F100,"cmdlin NOICP fatal no action","",0); XFATAL("?No actions specified on command line"); }#else if (inserver && what == 0) { /* Internet Kermit server checks */ if (local || (action != 0 && action != 'x')) { if (local) printf("local\r\n"); if (action) printf("action=%c\r\n",action); debug(F100,"cmdlin fatal 1","",0); XFATAL("No actions or connections allowed with -A"); } }#endif /* NOICP */#ifndef NOLOCAL if (!local) { if ((action == 'c') || (cflg != 0)) { debug(F100,"cmdlin fatal 2","",0); XFATAL("-l or -j or -X required"); } }#endif /* NOLOCAL */#ifndef NOXFER if (*cmarg2 != 0) { if ((action != 's') && (action != 'r') && (action != 'v')) { debug(F100,"cmdlin fatal 3","",0); XFATAL("-a without -s, -r, or -g"); } if (action == 'r' || action == 'v') {#ifdef CK_TMPDIR if (isdir(cmarg2)) { /* -a is a directory */ if (!zchdir(cmarg2)) { /* try to change to it */ debug(F100,"cmdlin fatal 4","",0); XFATAL("can't change to '-a' directory"); } else cmarg2 = ""; } else#endif /* CK_TMPDIR */ if (zchko(cmarg2) < 0) { debug(F100,"cmdlin fatal 5","",0); XFATAL("write access to -a file denied"); } } } if ((action == 'v') && (stdouf) && (!local)) { if (is_a_tty(1)) { debug(F100,"cmdlin fatal 6","",0); XFATAL("unredirected -k can only be used in local mode"); } } if ((action == 's') || (action == 'v') || (action == 'r') || (action == 'x')) { if (local) displa = 1; if (stdouf) { displa = 0; quiet = 1; } } if (quiet) displa = 0; /* No display if quiet requested */#endif /* NOXFER */#ifdef DEBUG if (action) debug(F000,"cmdlin returns action","",action); else debug(F101,"cmdlin returns action","",action);#endif /* DEBUG */ return(action); /* Then do any requested protocol */}/* Extended argument parsing: --keyword[:value] (or =value) *//* XA_xxxx symbols are defined in ckuusr.h. If you add a new one, also remember to update doshow(), SHXOPT section, in ckuus5.c.*/struct keytab xargtab[] = {#ifdef CK_LOGIN { "anonymous", XA_ANON, CM_ARG|CM_PRE },#endif /* CK_LOGIN */ { "bannerfile", XA_BAFI, CM_ARG }, { "cdfile", XA_CDFI, CM_ARG }, { "cdmessage", XA_CDMS, CM_ARG }, { "cdmsg", XA_CDMS, CM_ARG|CM_INV },#ifdef KUI { "changedim", XA_CHGD, CM_PRE },#endif /* KUI */#ifndef NOCSETS { "charset", XA_CSET, CM_ARG|CM_PRE },#endif /* NOCSETS */#ifdef IKSDB { "database", XA_DBAS, CM_ARG|CM_PRE }, { "dbfile", XA_DBFI, CM_ARG|CM_PRE },#endif /* IKSDB */#ifdef KUI { "facename", XA_FNAM, CM_ARG|CM_PRE|CM_INV }, { "fontname", XA_FNAM, CM_ARG|CM_PRE }, { "fontsize", XA_FSIZ, CM_ARG|CM_PRE },#endif /* KUI */#ifdef COMMENT#ifdef NEWFTP { "ftp", XA_FTP, CM_ARG },#endif /* NEWFTP */#endif /* COMMENT */#ifndef NOLOCAL#ifdef OS2 { "height", XA_ROWS, CM_ARG|CM_PRE },#endif /* OS2 */#endif /* NOLOCAL */ { "help", XA_HELP, 0 },#ifndef NOHELP { "helpfile", XA_HEFI, CM_ARG },#endif /* NOHELP */#ifdef CK_LOGIN { "initfile", XA_ANFI, CM_ARG|CM_PRE },#endif /* CK_LOGIN */#ifdef OS2 { "lockdown", XA_LOCK, CM_PRE },#ifdef KUI { "maximize", XA_WMAX, CM_PRE }, { "minimize", XA_WMIN, CM_PRE }, { "nobars", XA_NOBAR, CM_PRE },#endif /* KUI */ { "noescape", XA_NOESCAPE, CM_PRE },#endif /* OS2 */ { "nointerrupts",XA_NOIN, CM_PRE },#ifdef KUI { "nomenubar", XA_NOMN, CM_PRE },#endif /* KUI */ { "noperms", XA_NPRM, 0 },#ifndef NOPUSH { "nopush", XA_NOPUSH, CM_PRE },#endif /* NOPUSH */#ifdef OS2 { "noscroll", XA_NOSCROLL, CM_PRE },#endif /* OS2 */#ifdef KUI { "nostatusbar", XA_NOSB, CM_PRE }, { "notoolbar", XA_NOTB, CM_PRE },#endif /* KUI */#ifdef COMMENT { "password", XA_PASS, CM_ARG|CM_INV },#endif /* COMMENT */#ifdef CK_LOGIN#ifndef NOXFER#ifdef CK_PERM { "permissions", XA_PERM, CM_ARG|CM_PRE }, { "perms", XA_PERM, CM_ARG|CM_PRE|CM_INV },#endif /* CK_PERM */#endif /* NOXFER */#ifdef UNIX { "privid", XA_PRIV, CM_ARG|CM_PRE },#endif /* UNIX */#ifndef NOLOCAL#ifndef NOCSETS { "rcharset", XA_CSET, CM_ARG|CM_PRE|CM_INV },#endif /* NOCSETS */#endif /* NOLOCAL */#ifdef UNIX { "root", XA_ROOT, CM_ARG|CM_PRE },#else /* UNIX */#ifdef CKROOT { "root", XA_ROOT, CM_ARG|CM_PRE },#endif /* CKROOT */#endif /* UNIX */#ifdef KUI { "scalefont", XA_SCALE, CM_PRE },#endif /* KUI */#ifdef COMMENT#ifdef SSHBUILTIN { "ssh", XA_SSH, CM_ARG },#endif /* SSHBUILTIN */#endif /* COMMENT */#ifdef CKSYSLOG { "syslog", XA_SYSL, CM_ARG|CM_PRE },#endif /* CKSYSLOG */#ifndef NOLOCAL#ifdef COMMENT#ifdef TNCODE { "telnet", XA_TEL, CM_ARG },#endif /* TNCODE */#endif /* COMMENT */ { "termtype", XA_TERM, CM_ARG|CM_PRE },#endif /* NOLOCAL */ { "timeout", XA_TIMO, CM_ARG|CM_PRE },#ifndef NOLOCAL#ifdef OS2 { "title", XA_TITL, CM_ARG },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -