123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- #include <stdio.h>
- #include <conio.h>
- #include <dos.h>
- #include <string.h>
- #include <bios.h>
- #include "main.h"
- //
- // Choose which type of modem to use
- //
- modem_t modems[MAXMODEMS];
- int numModems;
- //
- // Draw a bar of attributes
- //
- void AttriBar(int x,int y,int length, char attr)
- {
- int i;
- char far *screen;
- screen = MK_FP(0xb800, y*160 + x*2 + 1);
- for (i = 0;i < length;i++)
- {
- *screen = attr;
- screen += 2;
- }
- }
- //
- // Parse the MODOOM.STR file
- //
- int ParseMODOOM(void)
- {
- int i;
- int ok;
- FILE *fp;
- int rv;
- int found;
- fp = fopen("MODEM.STR","rt");
- if (fp == NULL)
- {
- gotoxy(2,25);
- cprintf("There's no MODEM.STR file! Press a key. ");
- gotoxy(1,25);
- sound(2500);
- delay(3);
- nosound();
- getch();
- return 0;
- }
- i = 0;
- ok = 1;
- do
- {
- rv = fscanf(fp,"%[^\n]",&modems[i].name);
- if (!rv || rv == EOF)
- ok = 0;
- rv = fscanf(fp,"\n");
- if (rv == EOF)
- ok = 0;
-
- rv = fscanf(fp,"%[^\n]",&modems[i].init);
- if (!rv || rv == EOF)
- ok = 0;
- rv = fscanf(fp,"\n");
- if (rv == EOF)
- ok = 0;
- rv = fscanf(fp,"%[^\n]",&modems[i].hangup);
- if (!rv || rv == EOF)
- ok = 0;
- rv = fscanf(fp,"\n");
- if (rv == EOF)
- ok = 0;
-
- rv = fscanf(fp,"%[^\n]",&modems[i].baud);
- if (!rv || rv == EOF)
- ok = 0;
- rv = fscanf(fp,"\n\n");
- if (rv == EOF)
- ok = 0;
-
-
- i++;
- } while(ok);
- numModems = i;
- fclose(fp);
- //
- // Quick little shell sort
- //
- do
- {
- int j;
- found = 0;
- for (i = 0; i < numModems-1; i++)
- for (j = i+1; j < numModems; j++)
- if (strcmp(modems[j].name,modems[i].name)<0)
- {
- modem_t temp;
- temp = modems[j];
- modems[j] = modems[i];
- modems[i] = temp;
- found = 1;
- }
- } while(found);
- return 1;
- }
- //
- // Blit the modem names to the screen
- //
- void BlitModemNames(int start)
- {
- int i;
- int max;
- int y;
- int j;
- int len;
- max = start + 10;
- if (max > numModems)
- max = numModems;
- y = 8;
- textbackground(1);
- textcolor(11);
- for (i = start; i < max; i++)
- {
- gotoxy(27,y++);
- cprintf("%s",modems[i].name);
- len = 27 - strlen(modems[i].name);
- for (j = 0; j < len; j++)
- cprintf(" ");
- }
- gotoxy(1,25);
- }
- void ChooseModem(void)
- {
- int xit;
- int blitY;
- int hliteY;
- int lastHliteY;
- FILE *fp;
- if (!ParseMODOOM())
- return;
- SaveScreen();
- DrawPup(&modemchs);
- textbackground(7);
- textcolor(0);
- #ifndef FRENCH
- gotoxy(2,25);
- cprintf("Choose the type of modem you are going to use.");
- gotoxy(1,25);
- #endif
- xit = 0;
- blitY = 0;
- lastHliteY = hliteY = 0;
- do
- {
- int key;
- BlitModemNames(blitY);
- textbackground(7);
- textcolor(0);
- gotoxy(70,25);
- cprintf("%s ",modems[hliteY + blitY].baud);
- gotoxy(1,25);
- AttriBar(26,lastHliteY+7,27,0x1b);
- lastHliteY = hliteY;
- AttriBar(26,hliteY+7,27,0x7f);
- key = _bios_keybrd(_NKEYBRD_READ)>>8;
- switch(key)
- {
- case 0x1c: // ENTER
- gotoxy(2,25);
- cprintf("Writing %s to MODEM.CFG...",modems[blitY + hliteY].name);
- gotoxy(1,25);
- fp = fopen("MODEM.CFG","w+t");
- if (fp == NULL)
- {
- gotoxy(2,25);
- cprintf("Error writing to MODEM.CFG. Press a key.");
- gotoxy(1,25);
- getch();
- break;
- }
- fprintf(fp,"%s\n%s\n%s\n%s\n\n",
- modems[blitY + hliteY].init,
- modems[blitY + hliteY].hangup,
- modems[blitY + hliteY].baud,
- modems[blitY + hliteY].name);
- fclose(fp);
- xit = 1;
- break;
- case SC_ESC: // ESC
- xit = 1;
- break;
- case 0x48: // UP
- if (hliteY > 5)
- hliteY--;
- else
- if (hliteY > 0 && blitY > 0)
- blitY--;
- else
- if (!blitY && hliteY)
- hliteY--;
- else
- if (!hliteY && blitY)
- blitY--;
- break;
- case 0x50: // DOWN
- if (hliteY > 4 && blitY+10<numModems)
- blitY++;
- else
- if (hliteY < 9 &&
- ((blitY+10 == numModems) ||
- (hliteY < numModems - 1)))
- hliteY++;
- break;
- case 0x49: // PGUP
- blitY -= 9;
- if (blitY < 0)
- hliteY = blitY = 0;
- break;
- case 0x51: // PGDN
- blitY += 9;
- if (blitY+10 > numModems)
- {
- blitY = numModems - 10;
- hliteY = 9;
- }
- if (numModems < 10)
- {
- blitY = 0;
- hliteY = numModems - 1;
- }
- break;
- }
- } while(!xit);
-
- RestoreScreen();
- }
- //
- // Choose which type of netplay
- //
- enum {GT_IPX,GT_MODEM,GT_SERIAL,GT_CHOOSE,GT_MACROS,GT_MAX};
- item_t netplayitems[]=
- {
- {GT_IPX, 26,9,27, -1,-1},
- {GT_MODEM, 26,10,27, -1,-1},
- {GT_SERIAL, 26,11,27, -1,-1},
- {GT_CHOOSE, 26,13,27, -1,-1},
- {GT_MACROS, 26,14,27, -1,-1}
- };
- menu_t netplaymenu=
- {
- &netplayitems[0],
- GT_IPX,
- GT_MAX,
- 0x7f
- };
- void ChooseNetplay(void)
- {
- short key;
- short field;
- SaveScreen();
- DrawPup(&netplay);
- while(1)
- {
- SetupMenu(&netplaymenu);
- field = GetMenuInput();
- key = menukey;
- switch(key)
- {
- case KEY_ESC:
- RestoreScreen();
- return;
- case KEY_ENTER:
- if (field == GT_CHOOSE)
- {
- ChooseModem();
- continue;
- }
- switch(field)
- {
- case GT_IPX:
- // NetworkConfig();
- break;
- case GT_MODEM:
- ModemConfig();
- break;
- case GT_SERIAL:
- SerialConfig();
- break;
- case GT_MACROS:
- MacroConfig();
- break;
- }
- RestoreScreen();
- return;
- }
- }
- }
|