9fans archive / 2001 / 05 / 482 / prev next
From: jmk@pla...
Subject: Re: [9fans] Compilation error??
Date: Wed, 30 May 2001 19:09:54 -0400
On Wed May 30 18:57:33 EDT 2001, mike@duc... wrote:
> >you can't use typestr anymore. it's a reserved word.
>
> But what does it do? I just spent a few minutes looking
> at the compiler source, and it was not obvious to me.
Typestr was one of the things to come out of Ken's parting
flurry of activity. Here's the complete documentation as we have
it from his show-and-tell a couple of days before he left:
#include <u.h>
#include <libc.h>
typestr struct _cmplx Cmplx;
struct _cmplx
{
double r;
double i;
};
int Zconv(va_list*, Fconv*);
#pragma varargck type "Z" Cmplx
void
main(void)
{
Cmplx a, b;
int ia[10];
double d;
fmtinstall('Z', Zconv);
a = (Cmplx){1, 0};
b = (Cmplx){0, 1};
a = -((a + b) - (b - a)) + -((a - b) - (b + a));
print("a = %Z\n", a);
a += b;
print("a = %Z\n", a);
if(a == a)
print("ok\n");
a = (d = a);
print("d = %g\n", d);
print("a = %Z\n", a);
a = (Cmplx)1.0;
print("a = %Z\n", a);
}
/*
* print conversion
*/
int
Zconv(va_list *arg, Fconv *fp)
{
char s[50];
Cmplx z;
z = va_arg(*arg, Cmplx);
sprint(s, "(%g %g)", z.r, z.i);
strconv(s, fp);
return sizeof(z);
}
/*
* operators
*/
Cmplx
_cmplx_pos_(Cmplx a)
{
Cmplx r;
r.r = +a.r;
r.i = +a.i;
return r;
}
Cmplx
_cmplx_neg_(Cmplx a)
{
Cmplx r;
r.r = -a.r;
r.i = -a.i;
return r;
}
Cmplx
_cmplx_add_(Cmplx a, Cmplx b)
{
Cmplx r;
r.r = a.r + b.r;
r.i = a.i + b.i;
return r;
}
Cmplx
_cmplx_sub_(Cmplx a, Cmplx b)
{
Cmplx r;
r.r = a.r - b.r;
r.i = a.i - b.i;
return r;
}
int
_cmplx_eq_(Cmplx a, Cmplx b)
{
Cmplx r;
return a.r == b.r && a.i == b.i;
}
/*
* assignment-op (can be made from assig and op)
*/
Cmplx
_cmplx_asadd_(Cmplx *a, Cmplx b)
{
*a = *a + b;
return *a;
}
Cmplx
_cmplx_assub_(Cmplx *a, Cmplx b)
{
*a = *a - b;
return *a;
}
/*
* conversions
*/
int
_cmplx_i_(Cmplx a)
{
return sqrt(a.r*a.r + a.i*a.i);
}
double
_cmplx_d_(Cmplx a)
{
return sqrt(a.r*a.r + a.i*a.i);
}
Cmplx
_d_cmplx_(double a)
{
Cmplx r;
r.r = a;
r.i = 0;
return r;
}