123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838 |
- //
- // Enter modem config info
- //
- #include <process.h>
- #include <dos.h>
- #include <string.h>
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <bios.h>
- #include "main.h"
- #include "default.h"
- //
- // Choose who to call for modem play
- //
- phonelist_t phonelist[MAXPHNLIST];
- int numInList;
- char chosenPhoneNum[16];
- //
- // Parse the MODOOM.NUM file
- //
- int ParseMODOOMList(void)
- {
- int i;
- int ok;
- FILE *fp;
- int rv;
- int found;
- fp = fopen("MODEM.NUM","rt");
- if (fp == NULL)
- {
- gotoxy(2,25);
- printf("There's no MODEM.NUM file! Press a key. ");
- sound(2500);
- delay(3);
- nosound();
- getch();
- return 0;
- }
- i = 0;
- ok = 1;
- do
- {
- rv = fscanf(fp,"%[^\n]",&phonelist[i].name);
- if (!rv || rv == EOF)
- ok = 0;
-
- rv = fscanf(fp,"\n");
- if (rv == EOF)
- ok = 0;
-
- rv = fscanf(fp,"%[^\n]",&phonelist[i].number);
- if (!rv || rv == EOF)
- ok = 0;
- rv = fscanf(fp,"\n\n");
- if (rv == EOF)
- ok = 0;
- i++;
- } while(ok);
- numInList = i;
- fclose(fp);
- //
- // Quick little shell sort
- //
- do
- {
- int j;
- found = 0;
- for (i = 0; i < numInList-1; i++)
- for (j = i+1; j < numInList; j++)
- if (strcmp(phonelist[j].name,phonelist[i].name)<0)
- {
- phonelist_t temp;
- temp = phonelist[j];
- phonelist[j] = phonelist[i];
- phonelist[i] = temp;
- found = 1;
- }
- } while(found);
- return 1;
- }
- //
- // Blit the phone numbers to the screen
- //
- void BlitPhoneNumbers(int start)
- {
- int i;
- int max;
- int y;
- int j;
- int len;
- max = start + 10;
- if (max > numInList)
- max = numInList;
- y = 8;
- for (i = start; i < max; i++)
- {
- gotoxy(17,y);
- cprintf("%s",phonelist[i].name);
- len = 32 - strlen(phonelist[i].name);
- for (j = 0; j < len; j++)
- cprintf(" ");
- gotoxy(49,y++);
- cprintf("%s",phonelist[i].number);
- len = 16 - strlen(phonelist[i].number);
- for (j = 0; j < len; j++)
- cprintf(" ");
- }
- gotoxy(1,25);
- }
- //
- // Choose who to call
- //
- enum {ADDNAME,ADDNUMBER,MAXADD};
- item_t additems[]= {
- {ADDNAME, 17,12,28,-1,ADDNUMBER},
- {ADDNUMBER, 46,12,18,ADDNAME,-1}};
- menu_t addmenu = {&additems[0],ADDNAME,MAXADD,0x7f};
- int ChooseOpponentInList(void)
- {
- int i;
- int xit;
- int blitY;
- int hliteY;
- int lastHliteY;
- int index;
- chosenPhoneNum[0] = 0;
- if (!ParseMODOOMList())
- return 0;
- SaveScreen();
- DrawPup(&phonelst);
- textcolor(11);
- textbackground(1);
- gotoxy(1,25);
- xit = 0;
- blitY = 0;
- lastHliteY = hliteY = 0;
- do
- {
- int key;
- textcolor(11);
- textbackground(1);
- BlitPhoneNumbers(blitY);
- AttriBar(16,lastHliteY+7,48,0x1b);
- lastHliteY = hliteY;
- AttriBar(16,hliteY+7,48,0x7f);
- key = _bios_keybrd(_NKEYBRD_READ)>>8;
- switch(key)
- {
- #ifndef FRENCH
- case KEY_F1: // ADD NUMBER TO LIST!
- SaveScreen();
- DrawPup(&entrnmbr);
- {
- int field;
- int key;
- int which;
- int exit;
- char tempstring[32];
- which = numInList;
- exit = 0;
- while(!exit)
- {
- SetupMenu(&addmenu);
- field = GetMenuInput();
- switch(menukey)
- {
- case KEY_F10: // DONE!
- if (phonelist[which].name[0] ||
- phonelist[which].number[0])
- {
- FILE *fp;
-
- numInList++;
- fp = fopen("MODEM.NUM","w+");
- if (fp == NULL)
- {
- gotoxy(2,25);
- printf("Error creating MODEM.NUM file! Press a key. ");
- sound(2500);
- delay(3);
- nosound();
- getch();
- return 0;
- }
- for (i = 0;i < numInList; i++)
- fprintf(fp,"%s\n%s\n\n",
- phonelist[i].name,phonelist[i].number);
- fclose(fp);
- }
- case KEY_ESC: // ABORT!
- exit = 1;
- break;
- case KEY_ENTER: // EDIT NUMBER/NAME
- switch(field)
- {
- case ADDNAME:
- strcpy(tempstring,phonelist[which].name);
- key = EditLine(&additems[ADDNAME],tempstring,28);
- if (key == KEY_ENTER)
- strcpy(phonelist[which].name,tempstring);
- textcolor(15);
- textbackground(1);
- Clear(&additems[ADDNAME]);
- Pos(&additems[ADDNAME]);
- cprintf("%s",phonelist[which].name);
- gotoxy(1,25);
- break;
- case ADDNUMBER:
- strcpy(tempstring,phonelist[which].number);
- key = EditLine(&additems[ADDNUMBER],tempstring,18);
- if (key == KEY_ENTER)
- strcpy(phonelist[which].number,tempstring);
- textcolor(15);
- textbackground(1);
- Clear(&additems[ADDNUMBER]);
- Pos(&additems[ADDNUMBER]);
- cprintf("%s",phonelist[which].number);
- gotoxy(1,25);
- break;
- }
- break;
- }
- }
- }
- RestoreScreen();
- break;
- #endif
- case 0x1c: // ENTER
- index = blitY + hliteY;
- for (i=0;i<strlen(phonelist[index].number);i++)
- if ((phonelist[index].number[i] >= '0' &&
- phonelist[index].number[i] <= '9') ||
- phonelist[index].number[i] == '#' ||
- phonelist[index].number[i] == '*' ||
- phonelist[index].number[i] == ',')
- {
- char num[2];
- num[0] = phonelist[index].number[i];
- num[1] = 0;
- strcat(chosenPhoneNum,num);
- }
- xit = 1;
- break;
- case SC_ESC: // ESC
- xit = 1;
- break;
- case 0x48: // UP
- if (hliteY > 5 ||
- (!blitY && hliteY))
- hliteY--;
- else
- if (blitY)
- blitY--;
- break;
- case 0x50: // DOWN
- if (hliteY > 4 && blitY+10<numInList)
- blitY++;
- else
- if (hliteY < 9 &&
- ((blitY+10 == numInList) ||
- (hliteY < numInList - 1)))
- hliteY++;
- break;
- case 0x49: // PGUP
- blitY -= 9;
- if (blitY < 0)
- hliteY = blitY = 0;
- break;
- case 0x51: // PGDN
- blitY += 9;
- if (blitY+10 > numInList)
- {
- blitY = numInList - 10;
- hliteY = 9;
- }
- if (numInList < 10)
- {
- blitY = 0;
- hliteY = numInList - 1;
- }
- break;
- }
- } while(!xit);
- RestoreScreen();
- return chosenPhoneNum[0];
- }
- #ifndef DOOM2
- //
- // Epsiode radio buttons
- //
- radio_t mepi[]=
- {
- {28,3,1},
- {28,4,2},
- {28,5,3}
- };
- radiogroup_t mepig=
- { &mepi[0],3,&minfo.episode,15,1 };
- //
- // Skill level radio buttons
- //
- radio_t mskill[]=
- {
- {28,7,2},
- {28,8,3},
- {28,9,4},
- {28,10,5}
- };
- radiogroup_t mskillg=
- { &mskill[0],4,&minfo.skillLevel,15,1 };
- //
- // Mode radio buttons
- //
- radio_t mdeath[]=
- {
- {28,12,0},
- {28,13,1}
- };
- radiogroup_t mdeathg=
- { &mdeath[0],2,&minfo.deathMatch,15,1 };
- //
- // Com port radio buttons
- //
- radio_t mcomport[]=
- {
- {28,15,1},
- {28,16,2},
- {42,15,3},
- {42,16,4}
- };
- radiogroup_t mcomportg=
- { &mcomport[0],4,&minfo.comport,15,1 };
- //
- // Connection-type radio buttons
- //
- radio_t mcomtype[]=
- {
- {28,18,0},
- {28,19,1},
- {28,20,2}
- };
- radiogroup_t mcomtypeg=
- { &mcomtype[0],3,&minfo.comtype,15,1 };
- #else
- //
- // Skill level radio buttons
- //
- radio_t mskill[]=
- {
- {28,5,2},
- {28,6,3},
- {28,7,4},
- {28,8,5},
- };
- radiogroup_t mskillg=
- { &mskill[0],4,&minfo.skillLevel,15,1 };
- //
- // Mode radio buttons
- //
- radio_t mdeath[]=
- {
- {28,10,0},
- {28,11,1}
- };
- radiogroup_t mdeathg=
- { &mdeath[0],2,&minfo.deathMatch,15,1 };
- //
- // Com port radio buttons
- //
- radio_t mcomport[]=
- {
- {28,13,1},
- {28,14,2},
- {42,13,3},
- {42,14,4}
- };
- radiogroup_t mcomportg=
- { &mcomport[0],4,&minfo.comport,15,1 };
- //
- // Connection-type radio buttons
- //
- radio_t mcomtype[]=
- {
- {28,16,0},
- {28,17,1},
- {28,18,2}
- };
- radiogroup_t mcomtypeg=
- { &mcomtype[0],3,&minfo.comtype,15,1 };
- #endif
- //
- // Menu info
- //
- enum
- {
- #ifndef DOOM2
- MOD_EPISODE0, MOD_EPISODE1, MOD_EPISODE2,
- #endif
- MOD_SKILL1, MOD_SKILL2, MOD_SKILL3, MOD_SKILL4,
- MOD_DEATHNO, MOD_DEATHYES,
- MOD_COM1, MOD_COM2, MOD_COM3, MOD_COM4,
- MOD_CONN0, MOD_CONN1, MOD_CONN2,
- MOD_MAX
- };
- item_t cmodemitems[]=
- {
- #ifndef DOOM2
- {MOD_EPISODE0, 31,3,21, -1,-1},
- {MOD_EPISODE1, 31,4,21, -1,-1},
- {MOD_EPISODE2, 31,5,21, -1,-1},
- {MOD_SKILL1, 31,7,20, -1,-1},
- {MOD_SKILL2, 31,8,20, -1,-1},
- {MOD_SKILL3, 31,9,20, -1,-1},
- {MOD_SKILL4, 31,10,20, -1,-1},
- {MOD_DEATHNO, 31,12,20,-1,-1},
- {MOD_DEATHYES, 31,13,20,-1,-1},
- {MOD_COM1, 31,15,4, -1, MOD_COM3},
- {MOD_COM2, 31,16,4, -1, MOD_COM4,0,MOD_CONN0},
- {MOD_COM3, 45,15,4,MOD_COM1, -1,MOD_DEATHYES},
- {MOD_COM4, 45,16,4,MOD_COM2, -1},
- {MOD_CONN0, 31,18,20, -1,-1,MOD_COM2},
- {MOD_CONN1, 31,19,20, -1,-1},
- {MOD_CONN2, 31,20,7, -1,-1}
- #else
- {MOD_SKILL1, 31,5,20, -1,-1},
- {MOD_SKILL2, 31,6,20, -1,-1},
- {MOD_SKILL3, 31,7,20, -1,-1},
- {MOD_SKILL4, 31,8,20, -1,-1},
- {MOD_DEATHNO, 31,10,20,-1,-1},
- {MOD_DEATHYES, 31,11,20,-1,-1},
- {MOD_COM1, 31,13,4, -1, MOD_COM3},
- {MOD_COM2, 31,14,4, -1, MOD_COM4,0,MOD_CONN0},
- {MOD_COM3, 45,13,4,MOD_COM1, -1,MOD_DEATHYES},
- {MOD_COM4, 45,14,4,MOD_COM2, -1},
- {MOD_CONN0, 31,16,20, -1,-1,MOD_COM2},
- {MOD_CONN1, 31,17,20, -1,-1},
- {MOD_CONN2, 31,18,7, -1,-1}
- #endif
- };
- menu_t cmodemmenu=
- {
- &cmodemitems[0],
- #ifndef DOOM2
- MOD_EPISODE0,
- #else
- MOD_SKILL1,
- #endif
- MOD_MAX,
- 0x7f
- };
- int ModemConfig(void)
- {
- short field;
- short key;
- int rval = 0;
- char *args[MAXARGS];
- int argcount;
- char string[MAXARGS*2][12];
- int i;
- int level;
- #ifndef DOOM2
- item_t phonenum = {2,39,20,13,-1,-1};
- #else
- item_t phonenum = {2,39,18,13,-1,-1};
- #endif
- char tempstring[16];
- minfo = modeminfo; // save copy of modeminfo
- SaveScreen();
- DrawPup(&cmodem);
- //
- // Set defaults
- //
- minfo.skillLevel = 3;
- DrawRadios(&mskillg);
- minfo.episode = 1;
- #ifndef DOOM2
- DrawRadios(&mepig);
- #endif
- minfo.deathMatch = 1;
- DrawRadios(&mdeathg);
- minfo.comport = comport;
- DrawRadios(&mcomportg);
- minfo.comtype = 1;
- DrawRadios(&mcomtypeg);
- strcpy(minfo.phonenum,"");
- while(1)
- {
- SetupMenu(&cmodemmenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- rval = -1;
- goto func_exit;
- case KEY_F2:
- if (ChooseOpponentInList())
- {
- strcpy(minfo.phonenum,chosenPhoneNum);
- textcolor(15);
- textbackground(0);
- Clear(&phonenum);
- Pos(&phonenum);
- cprintf("%s",minfo.phonenum);
- minfo.comtype = 2;
- DrawRadios(&mcomtypeg);
- gotoxy(1,25);
- }
- break;
- //
- // WARP
- //
- case KEY_F1:
- {
- level = WarpTime();
- if (!level)
- continue;
- modeminfo = minfo;
- M_SaveDefaults();
- RestoreScreen();
- argcount = 1;
- args[0] = "sersetup.exe ";
- if (cdrom)
- args[argcount++] = "-cdrom";
- args[argcount++] = "-skill";
- sprintf(string[argcount],"%d",modeminfo.skillLevel);
- args[argcount] = string[argcount];
- argcount++;
- if (!level)
- {
- #ifndef DOOM2
- args[argcount++] = "-episode";
- sprintf(string[argcount],"%d",modeminfo.episode);
- args[argcount] = string[argcount];
- argcount++;
- #endif
- }
- else
- {
- args[argcount++] = "-warp";
- #ifdef DOOM2
- sprintf(string[argcount],"%d",level);
- args[argcount] = string[argcount];
- argcount++;
- #else
- sprintf(string[argcount],"%d",level>>8);
- args[argcount] = string[argcount];
- argcount++;
- sprintf(string[argcount],"%d",level&0x0f);
- args[argcount] = string[argcount];
- argcount++;
- #endif
- }
- if (modeminfo.deathMatch)
- args[argcount++] = "-deathmatch";
-
- if (nomonsters)
- args[argcount++] = "-nomonsters";
- if (respawn)
- args[argcount++] = "-respawn";
- if (deathmatch2 && modeminfo.deathMatch)
- args[argcount++] = "-altdeath";
- sprintf(string[argcount],"-com%d",modeminfo.comport);
- args[argcount] = string[argcount];
- argcount++;
- //
- // IF # IS ENTERED, CALL #
- //
- if (minfo.phonenum[0])
- modeminfo.comtype = 2;
- switch(modeminfo.comtype)
- {
- case 0: // no parameter if already connected!
- break;
- case 1:
- args[argcount++] = "-answer";
- break;
- case 2:
- args[argcount++] = "-dial";
- sprintf(string[argcount],"%s",minfo.phonenum);
- args[argcount] = string[argcount];
- argcount++;
- break;
- }
- for (i = 1;i < myargc; i++)
- args[argcount++] = myargv[i];
- args[argcount] = NULL;
- textbackground(0);
- textcolor(7);
- clrscr();
- execv("sersetup.exe",args);
- //
- // ERROR EXECing!
- //
- printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
- exit(1);
- }
- break;
- exitandsave:
- case KEY_F10:
- modeminfo = minfo;
- M_SaveDefaults();
- RestoreScreen();
- argcount = 1;
- args[0] = "sersetup.exe ";
- if (cdrom)
- args[argcount++] = "-cdrom";
- args[argcount++] = "-skill";
- sprintf(string[argcount],"%d",modeminfo.skillLevel);
- args[argcount] = string[argcount];
- argcount++;
- if (modeminfo.deathMatch)
- args[argcount++] = "-deathmatch";
- #ifndef DOOM2
- args[argcount++] = "-episode";
- sprintf(string[argcount],"%d",modeminfo.episode);
- args[argcount] = string[argcount];
- argcount++;
- #endif
- sprintf(string[argcount],"-com%d",modeminfo.comport);
- args[argcount] = string[argcount];
- argcount++;
- //
- // IF # IS ENTERED, CALL #
- //
- if (minfo.phonenum[0])
- modeminfo.comtype = 2;
- switch(modeminfo.comtype)
- {
- case 0: // no parameter if already connected!
- break;
- case 1:
- args[argcount++] = "-answer";
- break;
- case 2:
- args[argcount++] = "-dial";
- sprintf(string[argcount],"%s",minfo.phonenum);
- args[argcount] = string[argcount];
- argcount++;
- break;
- }
- for (i = 1;i < myargc; i++)
- args[argcount++] = myargv[i];
- args[argcount] = NULL;
- textbackground(0);
- textcolor(7);
- clrscr();
- execv("sersetup.exe",args);
- //
- // ERROR EXECing!
- //
- printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
- exit(1);
- case KEY_ENTER:
- switch ( field )
- {
- #ifndef DOOM2
- //
- // Episode
- //
- case MOD_EPISODE0:
- case MOD_EPISODE1:
- case MOD_EPISODE2:
- minfo.episode = field - MOD_EPISODE0 + 1;
- break;
- #endif
- //
- // Skill level
- //
- case MOD_SKILL1:
- case MOD_SKILL2:
- case MOD_SKILL3:
- case MOD_SKILL4:
- minfo.skillLevel = field - MOD_SKILL1 + 2;
- break;
- //
- // Deathmatch
- //
- case MOD_DEATHNO:
- case MOD_DEATHYES:
- minfo.deathMatch = field - MOD_DEATHNO;
- break;
- //
- // COM port
- //
- case MOD_COM1:
- case MOD_COM2:
- case MOD_COM3:
- case MOD_COM4:
- comport = minfo.comport = field - MOD_COM1 + 1;
- break;
- //
- // Connection type
- //
- case MOD_CONN0:
- case MOD_CONN1:
- minfo.comtype = field - MOD_CONN0;
- break;
- case MOD_CONN2:
- minfo.comtype = 2;
- key = EditLine(&phonenum,tempstring,12);
- if (key == KEY_ENTER)
- strcpy(minfo.phonenum,tempstring);
- gotoxy(1,25);
- break;
- default:
- break;
- }
- #ifndef DOOM2
- DrawRadios(&mepig);
- #endif
- DrawRadios(&mskillg);
- DrawRadios(&mdeathg);
- DrawRadios(&mcomportg);
- DrawRadios(&mcomtypeg);
- break;
- }
- }
- func_exit:
- RestoreScreen();
- return ( rval );
- }
|