|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T p ┃
Length: 1849 (0x739) Types: TextFile Names: »printw.c.new«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen └─ ⟦this⟧ »cph85dist/new_curses/printw.c.new«
/* * 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); } }