📄 miscres.c
字号:
putstring(row+1,45,C_GENERAL_HI,syou_are_cycling);
row += 2;
i = j = 0;
if (display3d > 0) {
if (usr_floatflag)
j = 1;
}
else
if (floatflag)
j = (usr_floatflag) ? 1 : 2;
if (j) {
putstring(row,45,C_GENERAL_HI,sfloating_point);
putstring(-1,-1,C_GENERAL_HI,(j == 1) ? sflag_is_activated
: sin_use_required );
i = 1;
}
else
{
putstring(row,45,C_GENERAL_HI,sinteger_math);
i = 1;
}
if (calc_status == 1 || calc_status == 2)
if (curfractalspecific->flags&INFCALC) {
putstring(row,2,C_GENERAL_HI,sruns_forever);
i = 1;
}
row += i;
if (calc_status == 1 || calc_status == 2)
if (curfractalspecific->flags&NORESUME)
{
static char far msg[] = {"Note: can't resume this type after interrupts other than <tab> and <F1>"};
putstring(row++,2,C_GENERAL_HI,msg);
}
++row;
if (got_status >= 0 && (calc_status == 1 || calc_status == 2)) {
switch (got_status) {
case 0:
sprintf(msg,"%d Pass Mode",totpasses);
putstring(row,2,C_GENERAL_HI,msg);
break;
case 1:
putstring(row,2,C_GENERAL_HI,ssolid_guessing);
break;
case 2:
putstring(row,2,C_GENERAL_HI,sboundary_tracing);
break;
case 3:
sprintf(msg,"Processing row %d (of %d) of input image",currow,fileydots);
putstring(row,2,C_GENERAL_HI,msg);
break;
case 4:
putstring(row,2,C_GENERAL_HI,stesseral);
break;
}
++row;
if (got_status != 3) {
sprintf(msg,"Working on block (y,x) [%d,%d]...[%d,%d], ",
yystart,xxstart,yystop,xxstop);
putstring(row,2,C_GENERAL_MED,msg);
if (got_status == 2 || got_status == 4) { /* btm or tesseral */
putstring(-1,-1,C_GENERAL_MED,"at ");
sprintf(msg,"[%d,%d]",currow,curcol);
putstring(-1,-1,C_GENERAL_HI,msg);
}
else {
if (totpasses > 1) {
putstring(-1,-1,C_GENERAL_MED,"pass ");
sprintf(msg,"%d",curpass);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED," of ");
sprintf(msg,"%d",totpasses);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED,", ");
}
putstring(-1,-1,C_GENERAL_MED,"at row ");
sprintf(msg,"%d",currow);
putstring(-1,-1,C_GENERAL_HI,msg);
}
++row;
}
}
putstring(row,2,C_GENERAL_MED,scalculation_time);
sprintf(msg,"%3ld:%02ld:%02ld.%02ld", calctime/360000,
(calctime%360000)/6000, (calctime%6000)/100, calctime%100);
putstring(-1,-1,C_GENERAL_HI,msg);
row += 2;
if (videoentry.xdots) {
sprintf(msg,"Video: %dx%dx%d %s %s",
videoentry.xdots, videoentry.ydots, videoentry.colors,
videoentry.name, videoentry.comment);
putstring(row,2,C_GENERAL_MED,msg);
}
++row;
putstring(row,2,C_GENERAL_MED,scornersxy);
putstring(++row,3,C_GENERAL_MED,stop_left);
sprintf(msg,"%20.16f %20.16f",xxmin,yymax);
putstring(-1,17,C_GENERAL_HI,msg);
putstring(++row,3,C_GENERAL_MED,sbottom_right);
sprintf(msg,"%20.16f %20.16f",xxmax,yymin);
putstring(-1,17,C_GENERAL_HI,msg);
adjust_corner(); /* make bottom left exact if very near exact */
if (cvtcentermag(&Xctr, &Yctr, &Magnification)) {
putstring(row+=2,2,C_GENERAL_MED,scenter);
sprintf(msg,"%20.16f %20.16f",Xctr,Yctr);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED,smag);
if (Magnification < 1e6)
sprintf(msg,"%20.14f",Magnification);
else if (Magnification < 1e12)
sprintf(msg,"%20.8f",Magnification);
else
sprintf(msg,"%20.2f",Magnification);
putstring(-1,-1,C_GENERAL_HI,msg);
}
else if (xxmin != xx3rd || yymin != yy3rd) {
putstring(++row,3,C_GENERAL_MED,sbottom_left);
sprintf(msg,"%20.16f %20.16f",xx3rd,yy3rd);
putstring(-1,17,C_GENERAL_HI,msg);
}
putstring(row+=2,2,C_GENERAL_MED,sparams);
for (i = 0; i < 4; i++) {
sprintf(msg,"%3d: ",i+1);
putstring(-1,-1,C_GENERAL_MED,msg);
sprintf(msg,"%12.9f",param[i]);
putstring(-1,-1,C_GENERAL_HI,msg);
}
putstring(row+=2,2,C_GENERAL_MED,siteration_maximum);
sprintf(msg,"%d",maxit);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED,seffective_bailout);
sprintf(msg,"%f",rqlim);
putstring(-1,-1,C_GENERAL_HI,msg);
if (fractype == PLASMA) {
putstring(++row,2,C_GENERAL_MED,scurrent_rseed);
sprintf(msg,"%d",rseed);
putstring(-1,-1,C_GENERAL_HI,msg);
}
if(invert) {
extern double f_radius,f_xcenter,f_ycenter;
putstring(++row,2,C_GENERAL_MED,sinversion_radius);
sprintf(msg,"%12.9f",f_radius);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED,sxcenter);
sprintf(msg,"%12.9f",f_xcenter);
putstring(-1,-1,C_GENERAL_HI,msg);
putstring(-1,-1,C_GENERAL_MED,sycenter);
sprintf(msg,"%12.9f",f_ycenter);
putstring(-1,-1,C_GENERAL_HI,msg);
}
if ((row += 2) < 23) ++row;
waitforkey:
putstringcenter(row,0,80,C_GENERAL_LO,
"...Press any key to continue, F6 for area...");
movecursor(25,80);
#ifdef XFRACT
while (keypressed()) {
getakey();
}
#endif
key = getakeynohelp();
if (key==F6) {
unstackscreen();
area();
stackscreen();
/* goto waitforkey;*/
goto top;
}
unstackscreen();
timer_start = clock_ticks(); /* tab display was "time out" */
return(0);
}
static void area()
{
/* apologies to UNIX folks, we PC guys have to save near space */
static char far warning[] = {"Warning: inside may not be unique\n"};
static char far total_area[] = {". Total area "};
char far *msg;
int x,y;
char buf[160];
long cnt=0;
if (inside<0) {
static char far msg[] = {"Need solid inside to compute area"};
stopmsg(0,msg);
return;
}
for (y=0;y<ydots;y++) {
for (x=0;x<xdots;x++) {
if (getcolor(x,y)==inside) {
cnt++;
}
}
}
if (inside>0 && outside<0 && maxit>inside) {
msg = warning;
} else {
msg = (char far *)"";
}
#ifndef XFRACT
sprintf(buf,"%Fs%ld inside pixels of %ld%Fs%f",
msg,cnt,(long)xdots*(long)ydots,total_area,
cnt/((float)xdots*(float)ydots)*(xxmax-xxmin)*(yymax-yymin));
#else
sprintf(buf,"%s%ld inside pixels of %ld%s%f",
msg,cnt,(long)xdots*(long)ydots,total_area,
cnt/((float)xdots*(float)ydots)*(xxmax-xxmin)*(yymax-yymin));
#endif
stopmsg(4,buf);
}
int endswithslash(char *fl)
{
int len;
len = strlen(fl);
if(len)
if(fl[--len] == SLASHC)
return(1);
return(0);
}
char far insufficient_ifs_mem[]={"Insufficient memory for IFS"};
/* --------------------------------------------------------------------- */
int numaffine;
int ifsload() /* read in IFS parameters */
{
int i;
FILE *ifsfile;
char buf[201];
char *bufptr;
extern float suffix[]; /* shared temp */
int ret,rowsize;
if (ifs_defn) { /* release prior parms */
farmemfree((char far *)ifs_defn);
ifs_defn = NULL;
}
ifs_changed = ifs_type = 0;
rowsize = IFSPARM;
if (find_file_item(IFSFileName,IFSName,&ifsfile) < 0)
return(-1);
fgets(buf,200,ifsfile);
strlwr(buf);
bufptr = &buf[0];
while (*bufptr) {
if (strncmp(bufptr,"(3d)",4) == 0) {
ifs_type = 1;
rowsize = IFS3DPARM;
}
++bufptr;
}
for (i = 0; i < (NUMIFS+1)*IFS3DPARM; ++i)
suffix[i] = 0.0;
i = ret = 0;
while (fscanf(ifsfile," %f ",&suffix[i])) {
if (++i >= NUMIFS*rowsize) {
static char far msg[]={"IFS definition has too many lines"};
stopmsg(0,msg);
ret = -1;
break;
}
}
if ((i % rowsize) != 0 || getc(ifsfile) != '}') {
static char far msg[]={"invalid IFS definition"};
stopmsg(0,msg);
ret = -1;
}
if (i == 0 && ret == 0) {
static char far msg[]={"Empty IFS definition"};
stopmsg(0,msg);
ret = -1;
}
fclose(ifsfile);
if (ret == 0) {
numaffine = i/rowsize;
if ((ifs_defn = (float far *)farmemalloc(
(long)((NUMIFS+1)*IFS3DPARM*sizeof(float)))) == NULL) {
stopmsg(0,insufficient_ifs_mem);
ret = -1;
}
else
for (i = 0; i < (NUMIFS+1)*IFS3DPARM; ++i)
ifs_defn[i] = suffix[i];
}
return(ret);
}
int find_file_item(char *filename,char *itemname,FILE **infile)
{
char tmpname[41];
char fullpathname[FILE_MAX_PATH];
long notepoint;
char buf[201];
int c;
findpath(filename, fullpathname);
if ((*infile = fopen(fullpathname,"rt")) == NULL) {
sprintf(buf,s_cantopen,fullpathname);
stopmsg(0,buf);
return(-1);
}
while (1) {
while ((c = getc(*infile)) == ' ' || c == '\t' || c == '\n') { }
if (c == EOF) break;
if (c == ';') {
while ((c = fgetc(*infile)) != '\n' && c != EOF) { }
if (c == EOF) break;
continue;
}
notepoint = ftell(*infile) - 1;
ungetc(c,*infile);
if (fscanf(*infile," %40[^ \n\t({]",tmpname) == EOF) break;
while ((c = getc(*infile)) != EOF && c != '{' && c != '\n') { }
if (c == EOF) break;
if (c == '{') {
if (stricmp(tmpname,itemname) == 0) {
fseek(*infile,notepoint,SEEK_SET);
return(0);
}
while ((c = getc(*infile)) != '}' && c != EOF) { }
if (c == EOF) break;
}
}
fclose(*infile);
sprintf(buf,"'%s' definition not found",itemname);
stopmsg(0,buf);
return(-1);
}
int file_gets(char *buf,int maxlen,FILE *infile)
{
int len,c;
/* similar to 'fgets', but file may be in either text or binary mode */
/* returns -1 at eof, length of string otherwise */
if (feof(infile)) return -1;
len = 0;
while (len < maxlen) {
if ((c = getc(infile)) == EOF || c == '\032') {
if (len) break;
return -1;
}
if (c == '\n') break; /* linefeed is end of line */
if (c != '\r') buf[len++] = c; /* ignore c/r */
}
buf[len] = 0;
return len;
}
int first_err = 1;
#ifndef XFRACT
#ifdef WINFRACT
/* call this something else to dodge the QC4WIN bullet... */
int win_matherr( struct exception *except )
#else
int matherr( struct exception *except )
#endif
{
extern int debugflag;
static char far msg[]={"Math error, but we'll try to keep going"};
if(first_err)
{
if(debugflag == 4000)stopmsg(0,msg);
first_err = 0;
}
if(debugflag)
{
static int ct = 0;
static FILE *fp=NULL;
if(fp==NULL)
fp = fopen("matherr","w");
if(ct++ < 100)
{
fprintf(fp,"err: %d\nname: %s\narg: %le\n",
except->type, except->name, except->arg1);
fflush(fp);
}
}
if( except->type == DOMAIN )
{
char buf[40];
sprintf(buf,"%le",except->arg1);
/* This test may be unnecessary - from my experiments if the
argument is too large or small the error is TLOSS not DOMAIN */
if(strstr(buf,"IN")||strstr(buf,"NAN")) /* trashed arg? */
/* "IND" with MSC, "INF" with BC++ */
{
if( strcmp( except->name, "sin" ) == 0 )
{
except->retval = 0.0;
return(1);
}
else if( strcmp( except->name, "cos" ) == 0 )
{
except->retval = 1.0;
return(1);
}
else if( strcmp( except->name, "log" ) == 0 )
{
except->retval = 1.0;
return(1);
}
}
}
if( except->type == TLOSS )
{
/* try valiantly to keep going */
if( strcmp( except->name, "sin" ) == 0 )
{
except->retval = 0.5;
return(1);
}
else if( strcmp( except->name, "cos" ) == 0 )
{
except->retval = 0.5;
return(1);
}
}
/* shucks, no idea what went wrong, but our motto is "keep going!" */
except->retval = 1.0;
return(1);
}
#endif
void roundfloatd(double *x) /* make double converted from float look ok */
{
char buf[30];
sprintf(buf,"%-10.7g",*x);
*x = atof(buf);
}
/* fake a keystroke, returns old pending key */
int ungetakey(int key)
{
int old;
extern int keybuffer;
old = keybuffer;
keybuffer = key;
return(old);
}
/* use this indirect aproach so that we can put GIFVIEW.C in an overlay */
int gifview()
{
return(gifview1());
}
char *extract_filename(char * fullfilename)
{
static char fname_ext[FILE_MAX_FNAME+FILE_MAX_EXT];
char fname[FILE_MAX_FNAME];
char ext[FILE_MAX_EXT];
fname_ext[0] = 0;
splitpath(fullfilename ,NULL,NULL,fname,ext);
makepath(fname_ext,"" ,"" ,fname,ext);
return(fname_ext);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -