📄 miscovl.c
字号:
put_parm_line();
}
#define NICELINELEN 68
#define MAXLINELEN 72
static void put_parm_line()
{
int len,c;
if ((len = wbdata->len) > NICELINELEN) {
len = NICELINELEN+1;
while (--len != 0 && wbdata->buf[len] != ' ') { }
if (len == 0) {
len = NICELINELEN-1;
while (++len < MAXLINELEN
&& wbdata->buf[len] && wbdata->buf[len] != ' ') { }
}
}
c = wbdata->buf[len];
wbdata->buf[len] = 0;
fputs(" ",parmfile);
fputs(wbdata->buf,parmfile);
if (c && c != ' ')
fputc('\\',parmfile);
fputc('\n',parmfile);
if ((wbdata->buf[len] = c) == ' ')
++len;
wbdata->len -= len;
strcpy(wbdata->buf,wbdata->buf+len);
}
static int getprec(double a,double b,double c)
{
double diff,temp;
int digits;
double highv = 1.0E20;
if ((diff = fabs(a - b)) == 0.0) diff = highv;
if ((temp = fabs(a - c)) == 0.0) temp = highv;
if (temp < diff) diff = temp;
if ((temp = fabs(b - c)) == 0.0) temp = highv;
if (temp < diff) diff = temp;
digits = 7;
if(debugflag >= 700 && debugflag < 720 )
digits = debugflag - 700;
while (diff < 1.0 && digits < 17) {
diff *= 10;
++digits;
}
return(digits);
}
static void put_float(int slash,double fnum,int prec)
{ char buf[40];
char *bptr, *dptr;
bptr = buf;
if (slash)
*(bptr++) = '/';
/* sprintf(bptr,"%1.*f",prec,fnum); */
#ifndef XFRACT
sprintf(bptr,"%1.*Lg",prec,(long double)fnum);
#else
sprintf(bptr,"%1.*g",prec,(double)fnum);
#endif
if ((dptr = strchr(bptr,'.'))) {
++dptr;
bptr = buf + strlen(buf);
while (--bptr > dptr && *bptr == '0')
*bptr = 0;
}
put_parm(buf);
}
#ifndef XFRACT
void shell_to_dos()
{
char *comspec;
/* from fractint.c & calls no ovlys, doesn't need ENTER_OVLY */
if ((comspec = getenv("COMSPEC")) == NULL)
printf("Cannot find COMMAND.COM.\n");
else {
putenv("PROMPT='EXIT' returns to FRACTINT.$_$p$g");
spawnl(P_WAIT, comspec, NULL);
}
}
#endif
void showfreemem()
{
#ifndef XFRACT
extern int num_adapters;
extern char *adapters[];
char *tempptr;
BYTE huge *fartempptr;
unsigned i,i2;
long j,j2;
extern char supervga_list; /* from the list in VIDEO.ASM */
char adapter_name[8]; /* entry lenth from VIDEO.ASM */
char *adapter_ptr;
ENTER_OVLY(OVLY_MISCOVL);
printf("\n CPU type: %d FPU type: %d IIT FPU: %d Video: %d",
cpu, fpu, iit, video_type);
adapter_ptr = &supervga_list;
for(i = 0 ; ; i++) { /* find the SuperVGA entry */
int j;
memcpy(adapter_name , adapter_ptr, 8);
adapter_ptr += 8;
if (adapter_name[0] == ' ') break; /* end-of-the-list */
if (adapter_name[6] == 0) continue; /* not our adapter */
adapter_name[6] = ' ';
for (j = 0; j < 8; j++)
if(adapter_name[j] == ' ')
adapter_name[j] = 0;
printf(" Video chip: %d (%s)",i+1,adapter_name);
}
printf("\n\n");
i = j = 0;
i2 = 0x8000;
while ((i2 >>= 1) != 0)
if ((tempptr = malloc(i+i2)) != NULL) {
free(tempptr);
i += i2;
}
printf(" %d NEAR bytes free \n", i);
j2 = 0x80000;
while ((j2 >>= 1) != 0)
if ((fartempptr = (BYTE huge *)farmemalloc(j+j2)) != NULL) {
farmemfree((void far*)fartempptr);
j += j2;
}
printf(" %ld FAR bytes free \n\n press any key to continue...\n", j);
getakey();
EXIT_OVLY;
#endif
}
edit_text_colors()
{
extern int debugflag;
extern int lookatmouse;
int save_debugflag,save_lookatmouse;
int row,col,bkgrd;
int rowf,colf,rowt,colt;
char far *vidmem;
char far *savescreen;
char far *farp1; char far *farp2;
int i,j,k;
ENTER_OVLY(OVLY_MISCOVL);
save_debugflag = debugflag;
save_lookatmouse = lookatmouse;
debugflag = 0; /* don't get called recursively */
lookatmouse = 2; /* text mouse sensitivity */
row = col = bkgrd = rowt = rowf = colt = colf = 0;
vidmem = MK_FP(0xB800,0);
while (1) {
if (row < 0) row = 0;
if (row > 24) row = 24;
if (col < 0) col = 0;
if (col > 79) col = 79;
movecursor(row,col);
i = getakey();
if (i >= 'a' && i <= 'z') i -= 32; /* uppercase */
switch (i) {
case 27: /* esc */
debugflag = save_debugflag;
lookatmouse = save_lookatmouse;
movecursor(25,80);
EXIT_OVLY;
return 0;
case '/':
farp1 = savescreen = farmemalloc(4000L);
farp2 = vidmem;
for (i = 0; i < 4000; ++i) { /* save and blank */
*(farp1++) = *farp2;
*(farp2++) = 0;
}
for (i = 0; i < 8; ++i) /* 8 bkgrd attrs */
for (j = 0; j < 16; ++j) { /* 16 fgrd attrs */
k = i*16 + j;
farp1 = vidmem + i*320 + j*10;
*(farp1++) = ' '; *(farp1++) = k;
*(farp1++) = i+'0'; *(farp1++) = k;
*(farp1++) = (j < 10) ? j+'0' : j+'A'-10; *(farp1++) = k;
*(farp1++) = ' '; *(farp1++) = k;
}
getakey();
farp1 = vidmem;
farp2 = savescreen;
for (i = 0; i < 4000; ++i) /* restore */
*(farp1++) = *(farp2++);
farmemfree(savescreen);
break;
case ',':
rowf = row; colf = col; break;
case '.':
rowt = row; colt = col; break;
case ' ': /* next color is background */
bkgrd = 1; break;
case 1075: /* cursor left */
--col; break;
case 1077: /* cursor right */
++col; break;
case 1072: /* cursor up */
--row; break;
case 1080: /* cursor down */
++row; break;
case 13: /* enter */
*(vidmem + row*160 + col*2) = getakey();
break;
default:
if (i >= '0' && i <= '9') i -= '0';
else if (i >= 'A' && i <= 'F') i -= 'A'-10;
else break;
for (j = rowf; j <= rowt; ++j)
for (k = colf; k <= colt; ++k) {
farp1 = vidmem + j*160 + k*2 + 1;
if (bkgrd) *farp1 = (*farp1 & 15) + i * 16;
else *farp1 = (*farp1 & 0xf0) + i;
}
bkgrd = 0;
}
}
}
extern int badconfig;
extern struct videoinfo far videotable[];
extern struct videoinfo far *vidtbl;
extern int vidtbllen;
extern int tabmode;
extern int adapter;
static int *entsptr;
static int modes_changed;
extern int mode7text;
int select_video_mode(int curmode)
{
static char far hdg2[]={"key...name......................xdot.ydot.colr.comment.................."};
static char far hdg1[]={"Select Video Mode"};
int entnums[MAXVIDEOMODES];
int attributes[MAXVIDEOMODES];
int i,j,k,ret;
int oldtabmode,oldhelpmode;
ENTER_OVLY(OVLY_MISCOVL);
load_fractint_cfg(0); /* load fractint.cfg to extraseg */
for (i = 0; i < vidtbllen; ++i) { /* init tables */
entnums[i] = i;
attributes[i] = 1;
}
entsptr = entnums; /* for indirectly called subroutines */
qsort(entnums,vidtbllen,sizeof(entnums[0]),entcompare); /* sort modes */
/* pick default mode */
if (curmode < 0) {
switch (video_type) { /* set up a reasonable default (we hope) */
case 1: videoentry.videomodeax = 8; /* hgc */
videoentry.colors = 2;
break;
case 2: videoentry.videomodeax = 4; /* cga */
videoentry.colors = 4;
break;
case 3: videoentry.videomodeax = 16; /* ega */
videoentry.colors = 16;
if (mode7text) { /* egamono */
videoentry.videomodeax = 15;
videoentry.colors = 2;
}
break;
default: videoentry.videomodeax = 19; /* mcga/vga? */
videoentry.colors = 256;
break;
}
}
else
far_memcpy((char far *)&videoentry,(char far *)&videotable[curmode],
sizeof(videoentry));
#ifndef XFRACT
for (i = 0; i < vidtbllen; ++i) { /* find default mode */
if ( videoentry.videomodeax == vidtbl[entnums[i]].videomodeax
&& videoentry.colors == vidtbl[entnums[i]].colors
&& (curmode < 0
|| far_memcmp((char far *)&videoentry,(char far *)&vidtbl[entnums[i]],
sizeof(videoentry)) == 0))
break;
}
if (i >= vidtbllen) /* no match, default to first entry */
i = 0;
oldtabmode = tabmode;
oldhelpmode = helpmode;
modes_changed = 0;
tabmode = 0;
helpmode = HELPVIDSEL;
i = fullscreen_choice(CHOICEHELP,hdg1,hdg2,NULL,vidtbllen,NULL,attributes,
1,16,72,i,format_item,NULL,NULL,check_modekey);
tabmode = oldtabmode;
helpmode = oldhelpmode;
if (i == -1) {
static char far msg[]={"Save new function key assignments or cancel changes?"};
if (modes_changed /* update fractint.cfg for new key assignments */
&& badconfig == 0
&& stopmsg(22,msg) == 0)
update_fractint_cfg();
EXIT_OVLY;
return(-1);
}
if (i < 0) /* picked by function key */
i = -1 - i;
else /* picked by Enter key */
i = entnums[i];
#endif
far_memcpy((char far *)&videoentry,(char far *)&vidtbl[i],
sizeof(videoentry)); /* the selected entry now in videoentry */
#ifndef XFRACT
/* copy fractint.cfg table to resident table, note selected entry */
j = k = 0;
far_memset((char far *)videotable,0,sizeof(*vidtbl)*MAXVIDEOTABLE);
for (i = 0; i < vidtbllen; ++i) {
if (vidtbl[i].keynum > 0) {
far_memcpy((char far *)&videotable[j],(char far *)&vidtbl[i],
sizeof(*vidtbl));
if (far_memcmp((char far *)&videoentry,(char far *)&vidtbl[i],
sizeof(videoentry)) == 0)
k = vidtbl[i].keynum;
if (++j >= MAXVIDEOTABLE-1)
break;
}
}
#else
k = vidtbl[0].keynum;
#endif
if ((ret = k) == 0) { /* selected entry not a copied (assigned to key) one */
far_memcpy((char far *)&videotable[MAXVIDEOTABLE-1],
(char far *)&videoentry,sizeof(*vidtbl));
ret = 1400; /* special value for check_vidmode_key */
}
if (modes_changed /* update fractint.cfg for new key assignments */
&& badconfig == 0)
update_fractint_cfg();
EXIT_OVLY;
return(ret);
}
static void format_item(int choice,char *buf)
{
char kname[5];
char biosflag;
far_memcpy((char far *)&videoentry,(char far *)&vidtbl[entsptr[choice]],
sizeof(videoentry));
vidmode_keyname(videoentry.keynum,kname);
biosflag = (videoentry.dotmode % 100 == 1) ? 'B' : ' ';
sprintf(buf,"%-5s %-25s %4d %4d %3d%c %-25s", /* 72 chars */
kname, videoentry.name, videoentry.xdots, videoentry.ydots,
videoentry.colors, biosflag, videoentry.comment);
}
static int check_modekey(int curkey,int choice)
{
int i,j,k,ret;
if ((i = check_vidmode_key(1,curkey)) >= 0)
return(-1-i);
i = entsptr[choice];
ret = 0;
if ( (curkey == '-' || curkey == '+')
&& (vidtbl[i].keynum == 0 || vidtbl[i].keynum >= 1084)) {
static char far msg[]={"Missing or bad FRACTINT.CFG file. Can't reassign keys."};
if (badconfig)
stopmsg(0,msg);
else {
if (curkey == '-') { /* deassign key? */
if (vidtbl[i].keynum >= 1084) {
vidtbl[i].keynum = 0;
modes_changed = 1;
}
}
else { /* assign key? */
j = getakeynohelp();
if (j >= 1084 && j <= 1113) {
for (k = 0; k < vidtbllen; ++k) {
if (vidtbl[k].keynum == j) {
vidtbl[k].keynum = 0;
ret = -1; /* force redisplay */
}
}
vidtbl[i].keynum = j;
modes_changed = 1;
}
}
}
}
return(ret);
}
static int entcompare(VOIDCONSTPTR p1,VOIDCONSTPTR p2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -