void inir(void) { char kbuf[80],vbuf[80]; int i,j,p; bool cgaflag; for (i=0;i<17;i++) { sprintf(kbuf,"%s%c",keynames[i],(i>=5 && i<10) ? '2' : 0); sprintf(vbuf,"%i/%i/%i/%i/%i",keycodes[i][0],keycodes[i][1], keycodes[i][2],keycodes[i][3],keycodes[i][4]); GetINIString(INI_KEY_SETTINGS,kbuf,vbuf,vbuf,80,ININAME); krdf[i]=true; p=0; for (j=0;j<5;j++) { keycodes[i][j]=atoi(vbuf+p); while (vbuf[p]!='/' && vbuf[p]!=0) p++; if (vbuf[p]==0) break; p++; } } gtime=(int)GetINIInt(INI_GAME_SETTINGS,"GauntletTime",120,ININAME); ftime=GetINIInt(INI_GAME_SETTINGS,"Speed",80000l,ININAME); gauntlet=GetINIBool(INI_GAME_SETTINGS,"GauntletMode",false,ININAME); GetINIString(INI_GAME_SETTINGS,"Players","1",vbuf,80,ININAME); if (vbuf[0]=='2' && toupper(vbuf[1])=='S') { diggers=2; nplayers=1; } else { diggers=1; nplayers=atoi(vbuf); if (nplayers<1 || nplayers>2) nplayers=1; } soundflag=GetINIBool(INI_SOUND_SETTINGS,"SoundOn",true,ININAME); musicflag=GetINIBool(INI_SOUND_SETTINGS,"MusicOn",true,ININAME); sound_device=(int)GetINIInt(INI_SOUND_SETTINGS,"Device",DEF_SND_DEV,ININAME); sound_port=(int)GetINIInt(INI_SOUND_SETTINGS,"Port",544,ININAME); sound_irq=(int)GetINIInt(INI_SOUND_SETTINGS,"Irq",5,ININAME); sound_dma=(int)GetINIInt(INI_SOUND_SETTINGS,"DMA",1,ININAME); sound_rate=(int)GetINIInt(INI_SOUND_SETTINGS,"Rate",22050,ININAME); sound_length=(int)GetINIInt(INI_SOUND_SETTINGS,"BufferSize",DEFAULT_BUFFER, ININAME); if (sound_device==1) { volume=1; setupsound=s1setupsound; killsound=s1killsound; fillbuffer=s1fillbuffer; initint8=s1initint8; restoreint8=s1restoreint8; soundoff=s1soundoff; setspkrt2=s1setspkrt2; settimer0=s1settimer0; timer0=s1timer0; settimer2=s1settimer2; timer2=s1timer2; soundinitglob(sound_port,sound_irq,sound_dma,sound_length,sound_rate); } dx_sound_volume=(int)GetINIInt(INI_SOUND_SETTINGS,"SoundVolume",0,ININAME); g_bWindowed=true; use_640x480_fullscreen=GetINIBool(INI_GRAPHICS_SETTINGS,"640x480",false, ININAME); use_async_screen_updates=GetINIBool(INI_GRAPHICS_SETTINGS,"Async",true, ININAME); synchvid=GetINIBool(INI_GRAPHICS_SETTINGS,"Synch",false,ININAME); cgaflag=GetINIBool(INI_GRAPHICS_SETTINGS,"CGA",false,ININAME); biosflag=GetINIBool(INI_GRAPHICS_SETTINGS,"BIOSPalette",false,ININAME); unlimlives=GetINIBool(INI_GAME_SETTINGS,"UnlimitedLives",false,ININAME); startlev=(int)GetINIInt(INI_GAME_SETTINGS,"StartLevel",1,ININAME); }
void inir(void) { char kbuf[80],vbuf[80]; int i,j,p; bool cgaflag; for (i=0;i<17;i++) { sprintf(kbuf,"%s%c",keynames[i],(i>=5 && i<10) ? '2' : 0); sprintf(vbuf,"%i/%i/%i/%i/%i",keycodes[i][0],keycodes[i][1], keycodes[i][2],keycodes[i][3],keycodes[i][4]); GetINIString(INI_KEY_SETTINGS,kbuf,vbuf,vbuf,80,ININAME); krdf[i]=true; p=0; for (j=0;j<5;j++) { keycodes[i][j]=atoi(vbuf+p); while (vbuf[p]!='/' && vbuf[p]!=0) p++; if (vbuf[p]==0) break; p++; } } gtime=(int)GetINIInt(INI_GAME_SETTINGS,"GauntletTime",120,ININAME); if (ftime == 0) { ftime=GetINIInt(INI_GAME_SETTINGS,"Speed",80000l,ININAME); } gauntlet=GetINIBool(INI_GAME_SETTINGS,"GauntletMode",false,ININAME); GetINIString(INI_GAME_SETTINGS,"Players","1",vbuf,80,ININAME); strupr(vbuf); if (vbuf[0]=='2' && vbuf[1]=='S') { diggers=2; nplayers=1; } else { diggers=1; nplayers=atoi(vbuf); if (nplayers<1 || nplayers>2) nplayers=1; } soundflag=GetINIBool(INI_SOUND_SETTINGS,"SoundOn",true,ININAME); musicflag=GetINIBool(INI_SOUND_SETTINGS,"MusicOn",true,ININAME); sound_device=(int)GetINIInt(INI_SOUND_SETTINGS,"Device",DEF_SND_DEV,ININAME); sound_port=(int)GetINIInt(INI_SOUND_SETTINGS,"Port",544,ININAME); sound_irq=(int)GetINIInt(INI_SOUND_SETTINGS,"Irq",5,ININAME); sound_dma=(int)GetINIInt(INI_SOUND_SETTINGS,"DMA",1,ININAME); sound_rate=(int)GetINIInt(INI_SOUND_SETTINGS,"Rate",22050,ININAME); sound_length=(int)GetINIInt(INI_SOUND_SETTINGS,"BufferSize",DEFAULT_BUFFER, ININAME); #if !defined(UNIX) && !defined(_SDL) if (sound_device==1) { #else if (!quiet) { #endif volume=1; setupsound=s1setupsound; killsound=s1killsound; fillbuffer=s1fillbuffer; initint8=s1initint8; restoreint8=s1restoreint8; soundoff=s1soundoff; setspkrt2=s1setspkrt2; settimer0=s1settimer0; timer0=s1timer0; settimer2=s1settimer2; timer2=s1timer2; soundinitglob(sound_port,sound_irq,sound_dma,sound_length,sound_rate); } dx_sound_volume=(int)GetINIInt(INI_SOUND_SETTINGS,"SoundVolume",0,ININAME); g_bWindowed=true; use_640x480_fullscreen=GetINIBool(INI_GRAPHICS_SETTINGS,"640x480",false, ININAME); use_async_screen_updates=GetINIBool(INI_GRAPHICS_SETTINGS,"Async",true, ININAME); synchvid=GetINIBool(INI_GRAPHICS_SETTINGS,"Synch",false,ININAME); cgaflag=GetINIBool(INI_GRAPHICS_SETTINGS,"CGA",false,ININAME); biosflag=GetINIBool(INI_GRAPHICS_SETTINGS,"BIOSPalette",false,ININAME); if (cgaflag || biosflag) { ddap->ginit=cgainit; ddap->gpal=cgapal; ddap->ginten=cgainten; ddap->gclear=cgaclear; ddap->ggetpix=cgagetpix; ddap->gputi=cgaputi; ddap->ggeti=cgageti; ddap->gputim=cgaputim; ddap->gwrite=cgawrite; ddap->gtitle=cgatitle; ddap->ginit(); ddap->gpal(0); } unlimlives=GetINIBool(INI_GAME_SETTINGS,"UnlimitedLives",false,ININAME); startlev=(int)GetINIInt(INI_GAME_SETTINGS,"StartLevel",1,ININAME); } void redefkeyb(bool allf) { int i,j,k,l,z,y=0; bool f; char kbuf[80],vbuf[80]; maininit(); if (diggers==2) { outtext(ddap, "PLAYER 1:",0,y,3); y+=12; } outtext(ddap, "PRESS NEW KEY FOR",0,y,3); y+=12; /* Step one: redefine keys that are always redefined. */ for (i=0;i<5;i++) { outtext(ddap, keynames[i],0,y,2); /* Red first */ findkey(i); outtext(ddap, keynames[i],0,y,1); /* Green once got */ y+=12; for (j=0;j<i;j++) { /* Note: only check keys just pressed (I hate it when this is done wrong, and it often is.) */ if (keycodes[i][0]==keycodes[j][0] && keycodes[i][0]!=0) { i--; y-=12; break; } for (k=2;k<5;k++) for (l=2;l<5;l++) if (keycodes[i][k]==keycodes[j][l] && keycodes[i][k]!=-2) { j=i; k=5; i--; y-=12; break; /* Try again if this key already used */ } } } if (diggers==2) { outtext(ddap, "PLAYER 2:",0,y,3); y+=12; for (i=5;i<10;i++) { outtext(ddap, keynames[i],0,y,2); /* Red first */ findkey(i); outtext(ddap, keynames[i],0,y,1); /* Green once got */ y+=12; for (j=0;j<i;j++) { /* Note: only check keys just pressed (I hate it when this is done wrong, and it often is.) */ if (keycodes[i][0]==keycodes[j][0] && keycodes[i][0]!=0) { i--; y-=12; break; } for (k=2;k<5;k++) for (l=2;l<5;l++) if (keycodes[i][k]==keycodes[j][l] && keycodes[i][k]!=-2) { j=i; k=5; i--; y-=12; break; /* Try again if this key already used */ } } } } /* Step two: redefine other keys which step one has caused to conflict */ z=0; y-=12; for (i=10;i<17;i++) { f=false; for (j=0;j<10;j++) for (k=0;k<5;k++) for (l=2;l<5;l++) if (keycodes[i][k]==keycodes[j][l] && keycodes[i][k]!=-2) f=true; for (j=10;j<i;j++) for (k=0;k<5;k++) for (l=0;l<5;l++) if (keycodes[i][k]==keycodes[j][l] && keycodes[i][k]!=-2) f=true; if (f || (allf && i!=z)) { if (i!=z) y+=12; outtext(ddap, keynames[i],0,y,2); /* Red first */ findkey(i); outtext(ddap, keynames[i],0,y,1); /* Green once got */ z=i; i--; } } /* Step three: save the INI file */ for (i=0;i<17;i++) if (krdf[i]) { sprintf(kbuf,"%s%c",keynames[i],(i>=5 && i<10) ? '2' : 0); sprintf(vbuf,"%i/%i/%i/%i/%i",keycodes[i][0],keycodes[i][1], keycodes[i][2],keycodes[i][3],keycodes[i][4]); WriteINIString(INI_KEY_SETTINGS,kbuf,vbuf,ININAME); } }
void parsecmd(int argc,char *argv[]) { char *word; Sint4 arg,i,j,speedmul; bool sf,gs=false,norepf=false; FILE *levf; for (arg=1;arg<argc;arg++) { word=argv[arg]; if (word[0]=='/' || word[0]=='-') { if (word[1]=='L' || word[1]=='l' || word[1]=='R' || word[1]=='r' || word[1]=='P' || word[1]=='p' || word[1]=='S' || word[1]=='s' || word[1]=='E' || word[1]=='e' || word[1]=='G' || word[1]=='g' || word[1]=='A' || word[1]=='a' || word[1]=='I' || word[1]=='i') if (word[2]==':') i=3; else i=2; if (word[1]=='L' || word[1]=='l') { j=0; while (word[i]!=0) levfname[j++]=word[i++]; levfname[j]=word[i]; levfflag=true; } if (word[1]=='R' || word[1]=='r') recname(word+i); if (word[1]=='P' || word[1]=='p' || word[1]=='E' || word[1]=='e') { openplay(word+i); if (escape) norepf=true; } if (word[1]=='E' || word[1]=='e') { finish(); if (escape) exit(0); exit(1); } if ((word[1]=='O' || word[1]=='o') && !norepf) { arg=0; continue; } if (word[1]=='S' || word[1]=='s') { speedmul=0; while (word[i]!=0) speedmul=10*speedmul+word[i++]-'0'; ftime=speedmul*2000l; gs=true; } if (word[1]=='I' || word[1]=='i') sscanf(word+i,"%u",&startlev); if (word[1]=='U' || word[1]=='u') unlimlives=true; if (word[1]=='?' || word[1]=='h' || word[1]=='H') { finish(); printf("DIGGER - Copyright (c) 1983 Windmill software\n" "Restored 1998 by AJ Software\n" "http://www.digger.org\n" "Version: "DIGGER_VERSION"\n\n" "Command line syntax:\n" " DIGGER [[/S:]speed] [[/L:]level file] [/C] [/B] [/Q] [/M] " "[/P:playback file]\n" " [/E:playback file] [/R:record file] [/O] [/K[A]] " "[/G[:time]] [/2]\n" " [/A:device,port,irq,dma,rate,length] [/V] [/U] " "[/I:level]\n\n" "/Q = Quiet mode (no sound at all) " "/M = No music\n" "/R = Record graphics to file\n" "/P = Playback and restart program " "/E = Playback and exit program\n" "/O = Loop to beginning of command line\n" "/K = Redefine keyboard\n" "/G = Gauntlet mode\n" "/2 = Two player simultaneous mode\n" "/A = Use alternate sound device\n" "/U = Allow unlimited lives\n" "/I = Start on a level other than 1\n"); exit(1); } if (word[1]=='Q' || word[1]=='q') soundflag=false; if (word[1]=='M' || word[1]=='m') musicflag=false; if (word[1]=='2') diggers=2; if (word[1]=='K' || word[1]=='k') if (word[2]=='A' || word[2]=='a') redefkeyb(true); else redefkeyb(false); if (word[1]=='A' || word[1]=='a') { sscanf(word+i,"%u,%x,%u,%u,%u,%u",&sound_device,&sound_port,&sound_irq, &sound_dma,&sound_rate,&sound_length); killsound(); volume=1; setupsound=s1setupsound; killsound=s1killsound; fillbuffer=s1fillbuffer; initint8=s1initint8; restoreint8=s1restoreint8; soundoff=s1soundoff; setspkrt2=s1setspkrt2; settimer0=s1settimer0; timer0=s1timer0; settimer2=s1settimer2; timer2=s1timer2; soundinitglob(sound_port,sound_irq,sound_dma,sound_length,sound_rate); initsound(); } if (word[1]=='V' || word[1]=='v') synchvid=true; if (word[1]=='G' || word[1]=='g') { gtime=0; while (word[i]!=0) gtime=10*gtime+word[i++]-'0'; if (gtime>3599) gtime=3599; if (gtime==0) gtime=120; gauntlet=true; } } else { i=strlen(word); if (i<1) continue; sf=true; if (!gs) for (j=0;j<i;j++) if (word[j]<'0' || word[j]>'9') { sf=false; break; } if (sf) { speedmul=0; j=0; while (word[j]!=0) speedmul=10*speedmul+word[j++]-'0'; gs=true; ftime=speedmul*2000l; } else { j=0; while (word[j]!=0) { levfname[j]=word[j]; j++; } levfname[j]=word[j]; levfflag=true; } } } if (levfflag) { levf=fopen(levfname,"rb"); if (levf==NULL) { strcat(levfname,".DLF"); levf=fopen(levfname,"rb"); } if (levf==NULL) levfflag=false; else { fread(&bonusscore,2,1,levf); fread(leveldat,1200,1,levf); fclose(levf); } } }