📄 ckuus3.c
字号:
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 DEBUG
debug(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 + -