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 - metrics - download
Index: T x

⟦555a0929e⟧ TextFile

    Length: 2666 (0xa6a)
    Types: TextFile
    Names: »xmandel.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/X/Xmandel/xmandel.c« 

TextFile

#include <stdio.h>
#include <signal.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

#define NMAX 200
#define LINE 80
#define SCFAC 5

typedef struct complx{
	double re;
	double im;
} Cmplx;

char *argv0;
int rsiz0 = 12;
double xin0 = 0;
double yin0 = 0;
double scale0 = 1;
char *display0 = NULL;
char *malloc();
double xo,yo;
FILE *fp = stderr;
FILE *fpin = stdin;

main(argc,argv)
int argc;
char **argv;
{
	int nmand(), length;
	void exithandler();

	argv0 = argv[0];
again:
	if (argc > 2 && strcmp(argv[1], "-display") == 0) {
		argv++;
		argc--;
		length = strlen(argv[1]);
		display0 = malloc(length + 5);
		strcpy(display0,argv[1]);
		if ((length < 4) || (argv[1][length - 4] != ':'))
			strcat(display0,":0.0");
		argv++;
		argc--;
		goto again;
	}
	if (argc > 2 && strcmp(argv[1], "-x") == 0) {
		argv++;
		argc--;
		if (sscanf(argv[1], "%F", &xin0) !=1)
			usage();
		argv++;
		argc--;
		goto again;
	}
	if (argc > 2 && strcmp(argv[1], "-y") == 0) {
		argv++;
		argc--;
		if (sscanf(argv[1], "%F", &yin0) !=1)
			usage();
		argv++;
		argc--;
		goto again;
	}
	if (argc > 2 && strcmp(argv[1], "-s") == 0) {
		argv++;
		argc--;
		if (sscanf(argv[1], "%F", &scale0) !=1)
			usage();
		argv++;
		argc--;
		goto again;
	}
	if (argc > 2 && strcmp(argv[1], "-r") == 0) {
		argv++;
		argc--;
		if (sscanf(argv[1], "%d", &rsiz0) !=1)
			usage();
		argv++;
		argc--;
		goto again;
	}

	if (argc > 1) usage();

	on_exit(exithandler);
	graphics(display0,xin0,yin0,scale0,rsiz0,nmand,NMAX);
}

int nmand(x,y)
double x,y;
{
	Cmplx map(),z;
	int n;

	n = 1;
	xo = z.re = x;
	yo = z.im = y;
	for(;z.re*z.re+z.im*z.im < 4;z = map(z))
		if (++n>=NMAX) break;
	return NMAX - n;
}

Cmplx map(z)
Cmplx z;
{
	Cmplx t;

	t.re = z.re*z.re - z.im*z.im + xo;
	t.im = 2*z.re*z.im + yo;
	return t;
}

usage()
{
	fprintf(stderr,
	    "usage: %s [-display host] [-x x0] [-y y0] [-s scale]\n",argv0);
	fprintf(stderr,"       [-r resolution]\n");
	exit(1);
}

void exithandler(status)
int status;
{
	int wtf,nmand();

	if (status != SIGINT) exit(0);
	wtf = lgetd("Write to file",0);
	if (wtf == 0) exit(0);
	writeman(nmand);
}

lgetd(mesg,deflt)
char *mesg;
int deflt;
{
    char s[LINE], *sptr;
    for(;;) {
        fprintf(fp,"*%s [%c]: ",mesg,(deflt ? 'y' : 'n'));
        fflush(fp);
        sptr = fgets(s,LINE,fpin);
        if (!sptr) exit(-1);
        while(isspace(*sptr)) sptr++;
        if(*sptr=='\0') return(deflt);
        if(isupper(*sptr)) *sptr = tolower(*sptr);
          if(*sptr == 'y')
                return(1);
          else if(*sptr == 'n')
                return(0);
          else
                fprintf(fp,"   Say what? Enter y or n.\n");
    }
}