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

📄 ckuus3.c

📁 C语言核心协议的C语言源代码,用于早期网络通信
💻 C
📖 第 1 页 / 共 2 页
字号:
        printf("\n?Sorry, 94 is the maximum\n");        return(-2);    }    if ((y = cmcfm()) < 0) return(y);    *prm = x;    return(0);}/*  S E T C C  --  Set parameter to an ASCII control character value.  */setcc(prm,x,y) int x, y, *prm; {    if (y < 0) return(y);    if ((x > 037) && (x != 0177)) {        printf2("\n?Not in ASCII control range - %d\n",x);        return(-2);    }    if ((y = cmcfm()) < 0) return(y);    *prm = x;    return(0);}/*  D O R M T  --  Do a remote command  */dormt(xx) int xx; {    int x;    char *s, sbuf[50], *s2;    if (xx < 0) return(xx);    switch (xx) {case XZCWD:                             /* CWD */    if ((x = cmtxt("Remote directory name","",&s)) < 0) return(x);    debug(F111,"XZCWD: ",s,x);    *sbuf = NUL;    s2 = sbuf;    if (*s != NUL) {                    /* If directory name given, */                                        /* get password on separate line. */        if (tlevel > -1) {              /* From take file... */            *line = NUL;            if (fgets(sbuf,50,tfile[tlevel]) == NULL)                ermsg("take file ends prematurely in 'remote cwd'");            debug(F110," pswd from take file",s2,0);        } else {                        /* From terminal... */            printf(" Password: ");              /* get a password */            while (((x = getchar()) != NL) && (x != CR)) { /* with no echo */                if ((x &= 0177) == '?') {                    printf("? Password of remote directory\n Password: ");                    s2 = sbuf;                    *sbuf = NUL;                }                else if (x == ESC)      /* Mini command line editor... */                    putchar(BEL);                else if (x == BS || x == 0177)                    s2--;                else if (x == 025) {                    s2 = sbuf;                    *sbuf = NUL;                }                else                    *s2++ = x;            }            *s2 = NUL;            putchar('\n');        }        s2 = sbuf;    } else s2 = "";    debug(F110," password",s2,0);    sstate = setgen('C',s,s2,"");    return(0);case XZDEL:                             /* Delete */    if ((x = cmtxt("Name of remote file(s) to delete","",&s)) < 0) return(x);    return(sstate = rfilop(s,'E'));case XZDIR:                             /* Directory */    if ((x = cmtxt("Remote directory or file specification","",&s)) < 0)        return(x);    return(sstate = setgen('D',s,"",""));case XZHLP:                             /* Help */    if (x = (cmcfm()) < 0) return(x);    sstate = setgen('H',"","","");    return(0);case XZHOS:                             /* Host */    if ((x = cmtxt("Command for remote system","",&cmarg)) < 0) return(x);    return(sstate = 'c');case XZPRI:                             /* Print */    if ((x = cmtxt("Remote file(s) to print on remote printer","",&s)) < 0)        return(x);    return(sstate = rfilop(s,'S'));case XZSPA:                             /* Space */    if ((x = cmtxt("Confirm, or remote directory name","",&s)) < 0) return(x);    return(sstate = setgen('U',s,"",""));case XZTYP:                             /* Type */    if ((x = cmtxt("Remote file specification","",&s)) < 0) return(x);    return(sstate = rfilop(s,'T'));case XZWHO:    if ((x = cmtxt("Remote user name, or carriage return","",&s)) < 0)        return(x);    return(sstate = setgen('W',s,"",""));default:    if (x = (cmcfm()) < 0) return(x);    printf2("not working yet - %s\n",cmdbuf);    return(-2);    }}/*  R F I L O P  --  Remote File Operation  */rfilop(s,t) char *s, t; {    if (*s == NUL) {        printf("?File specification required\n");        return(-2);    }    debug(F111,"rfilop",s,t);    return(setgen(t,s,"",""));}/*  S C R E E N  --  Screen display function  *//*  screen(f,c,n,s)      f - argument descriptor      c - a character or small integer      n - a long integer      s - a string. Fill in this routine with the appropriate display update for the system. This version is for a dumb tty.*/screen(f,c,n,s) int f; long n; char c; char *s; {    static int p = 0;                   /* Screen position */    int len;                            /* Length of string */    char buf[80];                       /* Output buffer */    len = strlen(s);                    /* Length of string */    if (!displa || quiet) return;       /* No update if display flag off */    switch (f) {case SCR_FN:                            /* filename */    conoll(""); conol(s); conoc(SP); p = len + 1; return;case SCR_AN:                            /* as-name */    if (p + len > 75) { conoll(""); p = 0; }    conol("=> "); conol(s); if ((p += (len + 3)) > 78) { conoll(""); p = 0; }    return;case SCR_FS:                            /* file-size */    sprintf(buf,", Size: %ld",n);  conoll(buf);  p = 0; return;case SCR_XD:                            /* x-packet data */    conoll(""); conoll(s); p = 0; return;case SCR_ST:                            /* File status */    switch (c) {        case ST_OK:                     /*  Transferred OK */            if ((p += 5) > 78) { conoll(""); p = 0; }            conoll(" [OK]"); p += 5; return;        case ST_DISC:                   /*  Discarded */            if ((p += 12) > 78) { conoll(""); p = 0; }            conoll(" [discarded]"); p += 12; return;        case ST_INT:                    /*  Interrupted */            if ((p += 14) > 78) { conoll(""); p = 0; }            conoll(" [interrupted]"); p += 14; return;        case ST_SKIP:                   /*  Skipped */            conoll("");            conol("Skipping "); conoll(s); p = 0;            return;        default:            conoll("*** screen() called with bad status ***"); p = 0; return;    }case SCR_PN:                            /* Packet number */    sprintf(buf,"%s: %ld",s,n); conol(buf); p += strlen(buf); return;case SCR_PT:                            /* Packet type or pseudotype */    if (c == 'Y') return;               /* Don't bother with ACKs */    if (c == 'D') {                     /* Only show every 4th data packet */        if (n % 4) return;        c = '.';    }#ifndef AMIGA    if (p++ > 78) {                     /* If near right margin, */        conoll("");                     /* Start new line */        p = 0;                          /* and reset counter. */    }#endif    conoc(c);                           /* Display the character. */#ifdef AMIGA    if (c == 'G') conoll("");           /* new line after G packets */#endif    return;case SCR_TC:                            /* transaction complete */    conoc(BEL); return;case SCR_EM:                            /* Error message */    conoll(""); conoc('?'); conoll(s); p = 0; return;           /* +1   */case SCR_WM:                            /* Warning message */    conoll(""); conoll(s); p = 0; return;case SCR_TU:                            /* Undelimited text */    if ((p += len) > 78) { conoll(""); p = len; }    conol(s); return;case SCR_TN:                            /* Text delimited at beginning */    conoll(""); conol(s); p = len; return;case SCR_TZ:                            /* Text delimited at end */    if ((p += len) > 78) { conoll(""); p = len; }    conoll(s); return;case SCR_QE:                            /* Quantity equals */    sprintf(buf,"%s: %ld",s,n);    conoll(buf); p = 0; return;default:    conoll("*** screen() called with bad object ***"); p = 0; return;    }}/*  I N T M S G  --  Issue message about terminal interrupts  */intmsg(n) long n; {    extern char *chstr();    char buf[80];    if ((!displa) || (quiet)) return;#ifdef UXIII    (void) conchk();    /* clear out pending escape-signals in ckxbsd.c */#endif    if (n == 1) {#ifdef UXIII                                /* we need to signal before kb input */        sprintf(buf,"Type escape (%s) followed by:",chstr(escape));        screen(SCR_TN,0,0l,buf);#endif screen(SCR_TN,0,0l,"CTRL-F to cancel file,  CTRL-R to resend current packet"); screen(SCR_TN,0,0l,"CTRL-B to cancel batch, CTRL-A for status report: ");    }    else screen(SCR_TU,0,0l," ");}/*  C H K I N T  --  Check for console interrupts  *//*** should rework not to destroy typeahead ***/chkint() {    int ch, cn;    if ((!local) || (quiet)) return(0); /* Only do this if local & not quiet */    cn = conchk();                      /* Any input waiting? */    debug(F101,"conchk","",cn);    while (cn > 0) {                    /* Yes, read it. */        cn--;                        /* give read 5 seconds for interrupt character */        if ((ch = coninc(5)) < 0) return(0);        switch (ch & 0177) {            case 0001:                  /* CTRL-A */                screen(SCR_TN,0,0l,"^A  Status report:");                screen(SCR_TN,0,0l," file type: ");                if (binary) screen(SCR_TZ,0,0l,"binary");                    else    screen(SCR_TZ,0,0l,"text");                screen(SCR_QE,0,(long)filcnt," file number");                screen(SCR_QE,0,(long)ffc,   " characters ");                screen(SCR_QE,0,(long)bctu,  " block check");                screen(SCR_QE,0,(long)rptflg," compression");                screen(SCR_QE,0,(long)ebqflg," 8th-bit prefixing");                continue;            case 0002:                  /* CTRL-B */                screen(SCR_TN,0,0l,"^B - Cancelling Batch ");                czseen = 1;                continue;            case 0006:                  /* CTRL-F */                screen(SCR_TN,0,0l,"^F - Cancelling File ");                cxseen = 1;                continue;            case 0022:                  /* CTRL-R */                screen(SCR_TN,0,0l,"^R - Resending ");                resend();                return(1);            default:                    /* Anything else, just ignore */                screen(SCR_TU,0,0l," [Ignored] ");                continue;        }    }    return(0);}/*  D E B U G  --  Enter a record in the debugging log  *//* Call with a format, two strings, and a number:   f  - Format, a bit string in range 0-7.        If bit x is on, then argument number x is printed.   s1 - String, argument number 1.  If selected, printed as is.   s2 - String, argument number 2.  If selected, printed in brackets.   n  - Int, argument 3.  If selected, printed preceded by equals sign.   f=0 is special: print s1,s2, and interpret n as a char.*/#ifdef DEBUGdebug(f,s1,s2,n) int f, n; char *s1, *s2; {    static char s[200];    char *sp = s;    if (!deblog) return;                /* If no debug log, don't */    switch (f) {        case F000:                      /* 0, print both strings, */            sprintf(sp,"%s%s%c\n",s1,s2,n); /*  and interpret n as a char */            zsout(ZDFILE,s);            break;        case F001:                      /* 1, "=n" */            sprintf(sp,"=%d\n",n);            zsout(ZDFILE,s);            break;        case F010:                      /* 2, "[s2]" */            sprintf(sp,"[%s]\n",s2);            zsout(ZDFILE,"");            break;        case F011:                      /* 3, "[s2]=n" */            sprintf(sp,"[%s]=%d\n",s2,n);            zsout(ZDFILE,s);            break;        case F100:                      /* 4, "s1" */            zsoutl(ZDFILE,s1);            break;        case F101:                      /* 5, "s1=n" */            sprintf(sp,"%s=%d\n",s1,n);            zsout(ZDFILE,s);            break;        case F110:                      /* 6, "s1[s2]" */            sprintf(sp,"%s[%s]\n",s1,s2);            zsout(ZDFILE,s);            break;        case F111:                      /* 7, "s1[s2]=n" */            sprintf(sp,"%s[%s]=%d\n",s1,s2,n);            zsout(ZDFILE,s);            break;        default:            sprintf(sp,"\n?Invalid format for debug() - %d\n",n);            zsout(ZDFILE,s);    }}#endif#ifdef TLOG/*  T L O G  --  Log a record in the transaction file  *//* Call with a format and 3 arguments: two strings and a number:   f  - Format, a bit string in range 0-7, bit x is on, arg #x is printed.   s1,s2 - String arguments 1 and 2.   n  - Int, argument 3.*/tlog(f,s1,s2,n) int f; long n; char *s1, *s2; {    static char s[200];    char *sp = s; int x;    if (!tralog) return;                /* If no transaction log, don't */    switch (f) {        case F000:                      /* 0 (special) "s1 n s2"  */            sprintf(sp,"%s %ld %s\n",s1,n,s2);            zsout(ZTFILE,s);            break;        case F001:                      /* 1, " n" */            sprintf(sp," %ld\n",n);            zsout(ZTFILE,s);            break;        case F010:                      /* 2, "[s2]" */            x = strlen(s2);            if (s2[x] == '\n') s2[x] = '\0';            sprintf(sp,"[%s]\n",s2);            zsout(ZTFILE,"");            break;        case F011:                      /* 3, "[s2] n" */            x = strlen(s2);            if (s2[x] == '\n') s2[x] = '\0';            sprintf(sp,"[%s] %ld\n",s2,n);            zsout(ZTFILE,s);            break;        case F100:                      /* 4, "s1" */            zsoutl(ZTFILE,s1);            break;        case F101:                      /* 5, "s1: n" */            sprintf(sp,"%s: %ld\n",s1,n);            zsout(ZTFILE,s);            break;        case F110:                      /* 6, "s1 s2" */            x = strlen(s2);            if (s2[x] == '\n') s2[x] = '\0';            sprintf(sp,"%s %s\n",s1,s2);            zsout(ZTFILE,s);            break;        case F111:                      /* 7, "s1 s2: n" */            x = strlen(s2);            if (s2[x] == '\n') s2[x] = '\0';            sprintf(sp,"%s %s: %ld\n",s1,s2,n);            zsout(ZTFILE,s);            break;        default:            sprintf(sp,"\n?Invalid format for tlog() - %ld\n",n);            zsout(ZTFILE,s);    }}#endif

⌨️ 快捷键说明

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