Exemple #1
0
/* Print the command shell's prompt. */
void
MakePrompt(char *dst, size_t dsize)
{
	char acwd[64];

#	ifdef HAVE_SNPRINTF
	if (gConn.loggedIn != 0) {
		AbbrevStr(acwd, gRemoteCWD, 25, 0);
		snprintf(dst, dsize, "%sncftp%s %s %s>%s ",
			tcap_boldface, tcap_normal, acwd,
			tcap_boldface, tcap_normal);
	} else {
		snprintf(dst, dsize, "%sncftp%s> ",
			tcap_boldface, tcap_normal);
	}
#	else	/* HAVE_SNPRINTF */
	(void) Strncpy(dst, tcap_boldface, dsize);
	(void) Strncat(dst, "ncftp", dsize);
	(void) Strncat(dst, tcap_normal, dsize);
	if (gConn.loggedIn != 0) {
		AbbrevStr(acwd, gRemoteCWD, 25, 0);
		(void) Strncat(dst, " ", dsize);
		(void) Strncat(dst, acwd, dsize);
		(void) Strncat(dst, " ", dsize);
	}
	(void) Strncat(dst, tcap_boldface, dsize);
	(void) Strncat(dst, ">", dsize);
	(void) Strncat(dst, tcap_normal, dsize);
	(void) Strncat(dst, " ", dsize);
#	endif	/* HAVE_SNPRINTF */
}	/* MakePrompt */
Exemple #2
0
/*****************************************************************************
 *		Private Functions
 *****************************************************************************/
static void
CheckFreePrivInfo(_DtCvSegment *seg)
{
    /*
     * free the match information
     */
    if (NULL != MatchInfo(seg))
      {
	SdlMatchData *m = (SdlMatchData *)(MatchInfo(seg));

	if (NULL != m->ssi)
	    free(m->ssi);
	free(m);
      }

    /*
     * free any abbreviation
     */
    if (NULL != AbbrevStr(seg))
	free(AbbrevStr(seg));
}
Exemple #3
0
/* This is the meat of the site options window.  We can selectively update
 * portions of the window by using a bitmask with bits set for items
 * we want to update.
 */
void EditHostWinDraw(int flags, int hilite)
{
	int maxy, maxx;
	int i, f;
	char str[256];
	char spec[32];
	const char *cp;

	/* Draw the keys the user can type in reverse text. */
	WAttr(gEditHostWin, kReverse, 1);
	f = 5;
	for (i = kFirstEditWindowItem; i <= kLastEditWindowItem; i++) {
		if (TESTBIT(flags, i))
			mvwaddch(gEditHostWin, f + i, 2, 'A' + i);
	}
	
	/* The "quit" item is a special item that is offset a line, and
	 * always has the "X" key assigned to it.
	 */
	i = kQuitEditWindowItem;
	if (TESTBIT(flags, i))
		mvwaddch(gEditHostWin, 1 + f + i, 2, 'X');
	WAttr(gEditHostWin, kReverse, 0);
	
	/* We can use this to hilite a whole line, to indicate to the
	 * user that a certain item is being edited.
	 */
	if (hilite)
		WAttr(gEditHostWin, kReverse, 1);
	getmaxyx(gEditHostWin, maxy, maxx);
	sprintf(spec, " %%-26s%%-%ds",
		maxx - 32);

	/* Now draw the items on a case-by-case basis. */
	if (TESTBIT(flags, kNicknameEditWindowItem)) {
		mvwprintw(gEditHostWin, kNicknameEditWindowItem + f, 3, spec,
			"Bookmark name:",
			gEditRsi.bookmarkName
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kHostnameEditWindowItem)) {
		mvwprintw(gEditHostWin, kHostnameEditWindowItem + f, 3, spec,
			"Hostname:",
			gEditRsi.name
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kUserEditWindowItem)) {
		mvwprintw(gEditHostWin, kUserEditWindowItem + f, 3, spec,
			"User:"******"anonymous" : gEditRsi.user
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kPassEditWindowItem)) {
		if (gEditRsi.pass[0] == '\0' && gEditRsi.user[0] == '\0')
			STRNCPY(str, gLib.defaultAnonPassword);
		mvwprintw(gEditHostWin, kPassEditWindowItem + f, 3, spec,
			"Password:"******"********" : str
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kAcctEditWindowItem)) {
		mvwprintw(gEditHostWin, kAcctEditWindowItem + f, 3, spec,
			"Account:",
			gEditRsi.acct[0] == '\0' ? "none" : gEditRsi.acct
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kDirEditWindowItem)) {
		if (gEditRsi.dir[0] == '\0')
			STRNCPY(str, "/");
		else
			AbbrevStr(str, gEditRsi.dir, (size_t) maxx - 32, 0);
		mvwprintw(gEditHostWin, kDirEditWindowItem + f, 3, spec,
			"Remote Directory:",
			str
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kLDirEditWindowItem)) {
		if (gEditRsi.ldir[0] == '\0')
			STRNCPY(str, "(current)");
		else
			AbbrevStr(str, gEditRsi.ldir, (size_t) maxx - 32, 0);
		mvwprintw(gEditHostWin, kLDirEditWindowItem + f, 3, spec,
			"Local Directory:",
			str
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kXferTypeEditWindowItem)) {
		if ((gEditRsi.xferType == 'I') || (gEditRsi.xferType == 'B'))
			cp = "Binary";
		else if (gEditRsi.xferType == 'A')
			cp = "ASCII Text";
		else
			cp = "Tenex";
		mvwprintw(gEditHostWin, kXferTypeEditWindowItem + f, 3, spec,
			"Transfer type:",
			cp
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kPortEditWindowItem)) {
		sprintf(str, "%u", (gEditRsi.port == 0) ? 21 : (unsigned int) gEditRsi.port);
		mvwprintw(gEditHostWin, kPortEditWindowItem + f, 3, spec,
			"Port:",
			str
		);
		wclrtoeol(gEditHostWin);
	}
#if 0
	if (TESTBIT(flags, kSizeEditWindowItem)) {
		mvwprintw(gEditHostWin, kSizeEditWindowItem + f, 3, spec,
			"Has SIZE command:",
			gEditRsi.hasSIZE ? "Yes" : "No"
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kMdtmEditWindowItem)) {
		mvwprintw(gEditHostWin, kMdtmEditWindowItem + f, 3, spec,
			"Has MDTM command:",
			gEditRsi.hasMDTM ? "Yes" : "No"
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kPasvEditWindowItem)) {
		mvwprintw(gEditHostWin, kPasvEditWindowItem + f, 3, spec,
			"Can use passive FTP:",
			gEditRsi.hasPASV ? "Yes" : "No"
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kOSEditWindowItem)) {
		mvwprintw(gEditHostWin, kOSEditWindowItem + f, 3, spec,
			"Operating System:",
			(gEditRsi.isUnix == 1) ? "UNIX" : "Non-UNIX"
		);
		wclrtoeol(gEditHostWin);
	} 
#endif
	if (TESTBIT(flags, kCommentEditWindowItem)) {
		if (gEditRsi.comment[0] == '\0')
			STRNCPY(str, "(none)");
		else
			AbbrevStr(str, gEditRsi.comment, (size_t) maxx - 32, 0);
		mvwprintw(gEditHostWin, kCommentEditWindowItem + f, 3, spec,
			"Comment:",
			str
		);
		wclrtoeol(gEditHostWin);
	}
	if (TESTBIT(flags, kQuitEditWindowItem)) {
		mvwprintw(gEditHostWin, kQuitEditWindowItem + f + 1, 3, spec,
			"(Done editing)",
			""
		);
		wclrtoeol(gEditHostWin);
	}

	if (hilite)
		WAttr(gEditHostWin, kReverse, 0);

	wmove(gEditHostWin, maxy - 1, 0);
	wrefresh(gEditHostWin);
}	/* EditHostWinDraw */
Exemple #4
0
int PrStatBar(XferSpecPtr xp, int mode)
{
	int result = kPrWantStatsMsg;
	double rate, done;
	int secLeft, minLeft;
	char *rStr;
	static char *uStr;
	static double uTotal, uMult;
	char localName[32];
	string line;
	int i;

	switch (mode) {
		case kPrInitMsg:
			uTotal = FileSize((double) xp->expectedSize, &uStr, &uMult);

			/* Leave room for a ':' and '\0'. */
			AbbrevStr(localName, xp->localFileName, 30, 0);
			STRNCAT(localName, ":");
			EPrintF("%-32s", localName);
			break;
		case kPrUpdateMsg:
			/* Guess how much time is remaining in the transfer, based on
			 * the current transfer statistics.
			 */
			secLeft = (int) ((xp->bytesLeft / xp->bytesPerSec) + 0.5);
			minLeft = secLeft / 60;
			secLeft = secLeft - (minLeft * 60);
			if (minLeft > 999) {
				minLeft = 999;
				secLeft = 59;
			}

			rate = FileSize(xp->bytesPerSec, &rStr, NULL);
			done = (double) xp->bytesTransferred / uMult;

			AbbrevStr(localName, xp->localFileName, sizeof(localName) - 2, 0);
			STRNCAT(localName, ":");

			sprintf(line, "%-32s   %5.1f/%.1f %s   %5.1f %s/s   ETA %3d:%02d",
				localName,
				done,
				uTotal,
				uStr,
				rate,
				rStr,
				minLeft,
				secLeft
			);

			/* Pad the rest of the line with spaces, to erase any
			 * stuff that might have been left over from the last
			 * update.
			 */
			for (i=strlen(line); i < gScreenWidth - 2; i++)
				line[i] = ' ';
			line[i] = '\0';

			/* Print the updated information. */
			EPrintF("\r%s", line);

			break;
		case kPrEndMsg:
			result = kPrWantStatsMsg;
			EPrintF("\r");
			break;
	}
	return result;
}	/* PrStatBar */
Exemple #5
0
/* This draws the scrolling list of bookmarks, and hilites the currently
 * selected host.
 */
void DrawHostList(void)
{
	int lastLine, i;
	BookmarkPtr rsip;
	char str[256];
	char url[256];
	int maxy, maxx;
	int lmaxy, lmaxx;
	int begy, begx;
	char spec[32];

	getmaxyx(gHostListWin, lmaxy, lmaxx);
	getbegyx(gHostListWin, begy, begx);
	getmaxyx(gHostWin, maxy, maxx);
	/* We have a status line saying how many bookmarks there are in
	 * the list.  That way the user knows something is supposed to
	 * be there when the host list is totally empty, and also that
	 * there are more bookmarks to look at when the entire host list
	 * doesn't fit in the scroll window.
	 */
	WAttr(gHostWin, kUnderline, 1);
	mvwprintw(
		gHostWin,
		begy - 1,
		begx,
		strcpy(spec, "%s"),	/* avoid warnings on BSD */
		"Number of bookmarks"
	);
	WAttr(gHostWin, kUnderline, 0);
	wprintw(
		gHostWin,
		strcpy(spec, ": %3d"),
		gNumBookmarks
	);

	if (gHostListWinWide == 0) {
		sprintf(spec, "%%-16.16s %%-%ds", lmaxx - 17);
		lastLine = lmaxy + gHostListWinStart;
		for (i=gHostListWinStart; (i<lastLine) && (i<gNumBookmarks); i++) {
			rsip = &gBookmarkTable[i];
			if (rsip == gCurHostListItem)
				WAttr(gHostListWin, kReverse, 1);
			sprintf(str, spec, rsip->bookmarkName, rsip->name);
			str[lmaxx] = '\0';
			DrawStrAt(gHostListWin, i - gHostListWinStart, 0, str);
			swclrtoeol(gHostListWin);
			if (rsip == gCurHostListItem) {
				WAttr(gHostListWin, kReverse, 0);
			}
		}
	} else {
		lastLine = lmaxy + gHostListWinStart;
		for (i=gHostListWinStart; (i<lastLine) && (i<gNumBookmarks); i++) {
			rsip = &gBookmarkTable[i];
			if (rsip == gCurHostListItem)
				WAttr(gHostListWin, kReverse, 1);
			BookmarkToURL(rsip, url, sizeof(url));
			sprintf(str, "%-16.16s  ", rsip->bookmarkName);
			STRNCAT(str, url);
			memset(url, 0, sizeof(url));
			AbbrevStr(url, str, (size_t) lmaxx, 1);
			DrawStrAt(gHostListWin, i - gHostListWinStart, 0, url);
			swclrtoeol(gHostListWin);
			if (rsip == gCurHostListItem) {
				WAttr(gHostListWin, kReverse, 0);
			}
		}
	}


	/* Add 'vi' style empty-lines. */
	for ( ; i<lastLine; ++i) {
		DrawStrAt(gHostListWin, i - gHostListWinStart, 0, "~");
		swclrtoeol(gHostListWin);
	}
	wmove(gHostWin, maxy - 3, 2);
	sprintf(spec, "%%-%ds", maxx - 4);
	if (gCurHostListItem == NULL) {
		str[0] = '\0';
	} else if (gCurHostListItem->comment[0] == '\0') {
		memset(str, 0, sizeof(str));
		if (gHostListWinWide == 0) {
			BookmarkToURL(gCurHostListItem, url, sizeof(url));
			AbbrevStr(str, url, (size_t) maxx - 2, 1);
		}
	} else {
		STRNCPY(str, "``");
		STRNCAT(str, gCurHostListItem->comment);
		AbbrevStr(str + 2, gCurHostListItem->comment, (size_t) maxx - 8, 1);
		STRNCAT(str, "''");
	}
	wprintw(gHostWin, spec, str);
	wmove(gHostWin, maxy - 1, 0);
	UpdateHostWindows(0);
}	/* DrawHostList */