[comp.lang.c] How about a `gprintf' for Turbo C

rds95@leah.Albany.Edu (Robert Seals) (04/15/88)

I know it's not strictly C, but it IS the secondary group...

The new console functions in version 1.5 of turbo c are really swell
and everything, (swollen too, if you check the size of the executable)
but they aren't much good if you want to write on the graphics screen.
Your only choice is `outtext{xy}', whose argument must be a string.

Has anybody got any great ideas about how to formatted text output
on the graphics screen, i.e., `gprintf(format, arg, ..., arg)' ???

Is this dopey? Am I a buffoon? Do I have to do it myself for goodness sake?

oomingmak and all that,
rob

If `reply' doesn't work, try rob@asrcmv.albany.edu or rds95@leah.albany.edu
	         Failure to do so will result in the failure

sam@ncsuvx.ncsu.edu (Samuel A. Moore) (04/16/88)

In article <686@leah.Albany.Edu> rds95@leah.Albany.Edu (Robert Seals) writes:
>
>Has anybody got any great ideas about how to formatted text output
>on the graphics screen, i.e., `gprintf(format, arg, ..., arg)' ???

Try sprintf() to format the string and then use your string output function.

Sam




-- 
Sam Moore                          ||\\  || //==\\ //==\\ ||   ||
NCSU Computing Center              || \\ || ||     ||==\\ ||   ||
Raleigh, NC                        ||  \\|| ||         || ||   ||
sam@ncsuvx.ncsu.edu                ||   \\  \\==// \\==||  \\==//

swarbric@tramp.Colorado.EDU (Frank Swarbrick) (04/17/88)

In article <686@leah.Albany.Edu> rds95@leah.Albany.Edu (Robert Seals) writes:
>The new console functions in version 1.5 of turbo c are really swell
>and everything, (swollen too, if you check the size of the executable)
>but they aren't much good if you want to write on the graphics screen.
>Your only choice is `outtext{xy}', whose argument must be a string.
>
>Has anybody got any great ideas about how to formatted text output
>on the graphics screen, i.e., `gprintf(format, arg, ..., arg)' ???

Try...

{
 char str[80];

 sprintf(str,"Here is %d line",1);
 outtextxy(1,1,(char far *)str);
}

Frank Swarbrick (and his cat)
swarbric@tramp.UUCP               swarbric@tramp.Colorado.EDU
...!{ncar|nbires}!boulder!tramp!swarbric
Mal and N*va are dead...

Devin_E_Ben-Hur@cup.portal.com (04/18/88)

#include <stdarg.h>
#include <graphics.h>
#include <stdio.h>

int gprintf(char *format, ...)
{
  char buf[81];
  int ret;
  va_list args;

  va_start(args,format);
  ret = vsprintf(buf,format,args);
  outtext(buf);
  va_end(args);
  return ret;
}

chris@mimsy.UUCP (Chris Torek) (04/21/88)

In article <4576@cup.portal.com> Devin_E_Ben-Hur@cup.portal.com writes:
>int gprintf(char *format, ...) {
>  char buf[81];
   ...
>  ret = vsprintf(buf,format,args);
>  outtext(buf);

I thought we just finished arguing over why `sprintf' is evil :-) .
Note that this limits you to printing 80 characters or less.  If
you had a function-style stdio, you could do this:

#include <stdio.h>
#include <stdarg.h>
/* etc */

#define GP_BUFSIZE 80	/* or whatever */

static int gwrite(void *context, const char *buf, int n) {
	char *realbuf = (char *)context;
	int k, left = n;

	while (left > 0) {
		k = left > GP_BUFSIZE ? GP_BUFSIZE : left;
		(void) memmove((void *)realbuf, (void *)buf, k);
		realbuf[k] = 0;
		outtext(realbuf);
		buf += k;
		left -= k;
	}
	return (n);
}

int gprintf(char *fmt, ...) {
	FILE *fp;
	va_list ap;
	int rv;
	char buf[GP_BUFSIZE + 1];	/* leave room for '\0'! */

	if ((fp = fwopen((void *)buf, gwrite)) == NULL)
		return (-1);
	va_start(ap, fmt);
	rv = vfprintf(fp, fmt, ap);
	va_end(ap);
	(void) fclose(fp);
	return (rv);
}

A bit clumsy, I admit, but this has no output restrictions.
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
Domain:	chris@mimsy.umd.edu	Path:	uunet!mimsy!chris