Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!ucsd!hub.ucsb.edu!eiffel!marc From: marc@eiffel.UUCP (Jean-Marc Nerson) Newsgroups: comp.lang.eiffel Subject: Re: formated string objects Summary: Slight modifications Keywords: sprintf like routine Message-ID: <475@eiffel.UUCP> Date: 5 Jan 91 23:46:12 GMT References: <457@kepler1.kepler.com> Organization: Interactive Software Engineering, Santa Barbara CA Lines: 81 In article <457@kepler1.kepler.com>, fcaggian@kepler.com (Frank Caggiano) writes: > The following c routine is something I've wanted to write for > a while now. It makes creating formatted string objects > easier. Your contribution will be very helpful. I slightly updated your C code to include: 1) Recognition of conversion characters E, G, X 2) Use of specific Eiffel run-time routine MakeStr() instead of eif_create() and eif_rout() The diff -c follows. -------------------- CUT HERE ------------------ *** /tmp/,RCSt1a04581 Sat Jan 5 15:30:58 1991 --- _format.c Sat Jan 5 15:28:13 1991 *************** *** 25,34 **** register int n; register char *cp, c, *buf_end; char buf[BUFSIZ], f[20]; - OBJPTR strobj; - ROUT_PTR from_c; - cp = buf; f[0] = '%'; --- 25,32 ---- register int n; register char *cp, c, *buf_end; char buf[BUFSIZ], f[20]; + extern OBJPTR MakeStr(); cp = buf; f[0] = '%'; *************** *** 68,74 **** --- 66,74 ---- case 'f': /* floats etc. */ case 'g': + case 'G': case 'e': + case 'E': f[n++] = c; f[n] = '\0'; sprintf(cp, f,va_arg(ap, double)); *************** *** 80,85 **** --- 80,86 ---- case 'o': case 'c': case 'x': + case 'X': case 'u': f[n++] = c; f[n] = '\0'; *************** *** 102,109 **** *cp = '\0'; ! strobj = (OBJPTR) eif_create("string", 0) ! from_c = (ROUT_PTR) eif_rout(strobj, "from_c"); ! (*from_c) (strobj, buf); ! return (strobj); } --- 103,107 ---- *cp = '\0'; ! return (MakeStr (buf)); } -------------------- CUT HERE ------------------ -- Jean-Marc Nerson marc@eiffel.com