DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T p

⟦c5fae42db⟧ TextFile

    Length: 1849 (0x739)
    Types: TextFile
    Names: »printw.c.new«

Derivation

└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
    └─ ⟦this⟧ »cph85dist/new_curses/printw.c.new« 

TextFile

/*
 * printw and friends
 *
 * 1/26/81 (Berkeley) @(#)printw.c	1.1
 */

# include	"curses.ext"

/*
 *	This routine implements a printf on the standard screen.
 *	
 *	Modified by David Owen, U.C.S.D. 10.5.83 to allow arbitrary
 *	length strings to "printw". In "sprintw" the error status is 
 *	checked on return from the "doprnt" and if set, the
 *	call is repeated with a bigger buffer.
 */
printw(fmt, args)
char	*fmt;
int	args; {

	return _sprintw(stdscr, fmt, &args);
}

/*
 *	This routine implements a printf on the given window.
 */
wprintw(win, fmt, args)
WINDOW	*win;
char	*fmt;
int	args; {

	return _sprintw(win, fmt, &args);
}
/*
 *	This routine actually executes the printf and adds it to the window
 *
 *	This is really a modified version of "sprintf".  As such,
 * it assumes that sprintf interfaces with the other printf functions
 * in a certain way.  If this is not how your system works, you
 * will have to modify this routine to use the interface that your
 * "sprintf" uses.
 */
_sprintw(win, fmt, args)
WINDOW	*win;
char	*fmt;
int	*args; {

	FILE	junk;
	char	buf[BUFSIZ],*bptr;
	int count,res;
	count = 0;

	junk._flag = _IOWRT + _IOSTRG;
	junk._ptr = buf;
	junk._base = buf;
	junk._cnt = BUFSIZ;
/*Make sure error flag set if ever "flsbuf" is called*/
	junk._file = -1;
	for(;;){
		_doprnt(fmt, args, &junk);
		putc('\0', &junk);
/*If there was a write error increase buffer and try again*/
		if(junk._flag & _IOERR){
			if(count) 
				free(bptr);
			else
				count = BUFSIZ;
			count += BUFSIZ;
			if((bptr = (char *)malloc(count)) == NULL){
				fprintf(stderr,"sprintw:no malloc space\n");
				return(-1);
			}
			junk._flag = _IOWRT + _IOSTRG;
			junk._ptr = bptr;
			junk._base = bptr;
			junk._cnt = count;
			junk._file = -1;
			continue;
		}
		res = waddstr(win,junk._base);
		if(count) free(bptr);
		return(res);
	}
}