NETPLAY.BAK 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <dos.h>
  4. #include <string.h>
  5. #include <bios.h>
  6. #include "main.h"
  7. //
  8. // Choose which type of modem to use
  9. //
  10. modem_t modems[MAXMODEMS];
  11. int numModems;
  12. //
  13. // Draw a bar of attributes
  14. //
  15. void AttriBar(int x,int y,int length, char attr)
  16. {
  17. int i;
  18. char far *screen;
  19. screen = MK_FP(0xb800, y*160 + x*2 + 1);
  20. for (i = 0;i < length;i++)
  21. {
  22. *screen = attr;
  23. screen += 2;
  24. }
  25. }
  26. //
  27. // Parse the MODOOM.STR file
  28. //
  29. int ParseMODOOM(void)
  30. {
  31. int i;
  32. int ok;
  33. FILE *fp;
  34. int rv;
  35. int found;
  36. fp = fopen("MODEM.STR","rt");
  37. if (fp == NULL)
  38. {
  39. gotoxy(2,25);
  40. cprintf("There's no MODEM.STR file! Press a key. ");
  41. gotoxy(1,25);
  42. sound(2500);
  43. delay(3);
  44. nosound();
  45. getch();
  46. return 0;
  47. }
  48. i = 0;
  49. ok = 1;
  50. do
  51. {
  52. rv = fscanf(fp,"%[^\n]",&modems[i].name);
  53. if (!rv || rv == EOF)
  54. ok = 0;
  55. rv = fscanf(fp,"\n");
  56. if (rv == EOF)
  57. ok = 0;
  58. rv = fscanf(fp,"%[^\n]",&modems[i].init);
  59. if (!rv || rv == EOF)
  60. ok = 0;
  61. rv = fscanf(fp,"\n");
  62. if (rv == EOF)
  63. ok = 0;
  64. rv = fscanf(fp,"%[^\n]",&modems[i].hangup);
  65. if (!rv || rv == EOF)
  66. ok = 0;
  67. rv = fscanf(fp,"\n");
  68. if (rv == EOF)
  69. ok = 0;
  70. rv = fscanf(fp,"%[^\n]",&modems[i].baud);
  71. if (!rv || rv == EOF)
  72. ok = 0;
  73. rv = fscanf(fp,"\n\n");
  74. if (rv == EOF)
  75. ok = 0;
  76. i++;
  77. } while(ok);
  78. numModems = i;
  79. fclose(fp);
  80. //
  81. // Quick little shell sort
  82. //
  83. do
  84. {
  85. int j;
  86. found = 0;
  87. for (i = 0; i < numModems-1; i++)
  88. for (j = i+1; j < numModems; j++)
  89. if (strcmp(modems[j].name,modems[i].name)<0)
  90. {
  91. modem_t temp;
  92. temp = modems[j];
  93. modems[j] = modems[i];
  94. modems[i] = temp;
  95. found = 1;
  96. }
  97. } while(found);
  98. return 1;
  99. }
  100. //
  101. // Blit the modem names to the screen
  102. //
  103. void BlitModemNames(int start)
  104. {
  105. int i;
  106. int max;
  107. int y;
  108. int j;
  109. int len;
  110. max = start + 10;
  111. if (max > numModems)
  112. max = numModems;
  113. y = 8;
  114. textbackground(1);
  115. textcolor(11);
  116. for (i = start; i < max; i++)
  117. {
  118. gotoxy(27,y++);
  119. cprintf("%s",modems[i].name);
  120. len = 27 - strlen(modems[i].name);
  121. for (j = 0; j < len; j++)
  122. cprintf(" ");
  123. }
  124. gotoxy(1,25);
  125. }
  126. void ChooseModem(void)
  127. {
  128. int xit;
  129. int blitY;
  130. int hliteY;
  131. int lastHliteY;
  132. FILE *fp;
  133. if (!ParseMODOOM())
  134. return;
  135. SaveScreen();
  136. DrawPup(&modemchs);
  137. textbackground(7);
  138. textcolor(0);
  139. #ifndef FRENCH
  140. gotoxy(2,25);
  141. cprintf("Choose the type of modem you are going to use.");
  142. gotoxy(1,25);
  143. #endif
  144. xit = 0;
  145. blitY = 0;
  146. lastHliteY = hliteY = 0;
  147. do
  148. {
  149. int key;
  150. BlitModemNames(blitY);
  151. textbackground(7);
  152. textcolor(0);
  153. gotoxy(70,25);
  154. cprintf("%s ",modems[hliteY + blitY].baud);
  155. gotoxy(1,25);
  156. AttriBar(26,lastHliteY+7,27,0x1b);
  157. lastHliteY = hliteY;
  158. AttriBar(26,hliteY+7,27,0x7f);
  159. key = _bios_keybrd(_NKEYBRD_READ)>>8;
  160. switch(key)
  161. {
  162. case 0x1c: // ENTER
  163. gotoxy(2,25);
  164. cprintf("Writing %s to MODEM.CFG...",modems[blitY + hliteY].name);
  165. gotoxy(1,25);
  166. fp = fopen("MODEM.CFG","w+t");
  167. if (fp == NULL)
  168. {
  169. gotoxy(2,25);
  170. cprintf("Error writing to MODEM.CFG. Press a key.");
  171. gotoxy(1,25);
  172. getch();
  173. break;
  174. }
  175. fprintf(fp,"%s\n%s\n%s\n%s\n\n",
  176. modems[blitY + hliteY].init,
  177. modems[blitY + hliteY].hangup,
  178. modems[blitY + hliteY].baud,
  179. modems[blitY + hliteY].name);
  180. fclose(fp);
  181. xit = 1;
  182. break;
  183. case SC_ESC: // ESC
  184. xit = 1;
  185. break;
  186. case 0x48: // UP
  187. if (hliteY > 5)
  188. hliteY--;
  189. else
  190. if (hliteY > 0 && blitY > 0)
  191. blitY--;
  192. else
  193. if (!blitY && hliteY)
  194. hliteY--;
  195. else
  196. if (!hliteY && blitY)
  197. blitY--;
  198. break;
  199. case 0x50: // DOWN
  200. if (hliteY > 4 && blitY+10<numModems)
  201. blitY++;
  202. else
  203. if (hliteY < 9 &&
  204. ((blitY+10 == numModems) ||
  205. (hliteY < numModems - 1)))
  206. hliteY++;
  207. break;
  208. case 0x49: // PGUP
  209. blitY -= 9;
  210. if (blitY < 0)
  211. hliteY = blitY = 0;
  212. break;
  213. case 0x51: // PGDN
  214. blitY += 9;
  215. if (blitY+10 > numModems)
  216. {
  217. blitY = numModems - 10;
  218. hliteY = 9;
  219. }
  220. if (numModems < 10)
  221. {
  222. blitY = 0;
  223. hliteY = numModems - 1;
  224. }
  225. break;
  226. }
  227. } while(!xit);
  228. RestoreScreen();
  229. }
  230. //
  231. // Choose which type of netplay
  232. //
  233. enum {GT_IPX,GT_MODEM,GT_SERIAL,GT_CHOOSE,GT_MACROS,GT_MAX};
  234. item_t netplayitems[]=
  235. {
  236. {GT_IPX, 26,9,27, -1,-1},
  237. {GT_MODEM, 26,10,27, -1,-1},
  238. {GT_SERIAL, 26,11,27, -1,-1},
  239. {GT_CHOOSE, 26,13,27, -1,-1},
  240. {GT_MACROS, 26,14,27, -1,-1}
  241. };
  242. menu_t netplaymenu=
  243. {
  244. &netplayitems[0],
  245. GT_IPX,
  246. GT_MAX,
  247. 0x7f
  248. };
  249. void ChooseNetplay(void)
  250. {
  251. short key;
  252. short field;
  253. SaveScreen();
  254. DrawPup(&netplay);
  255. while(1)
  256. {
  257. SetupMenu(&netplaymenu);
  258. field = GetMenuInput();
  259. key = menukey;
  260. switch(key)
  261. {
  262. case KEY_ESC:
  263. RestoreScreen();
  264. return;
  265. case KEY_ENTER:
  266. if (field == GT_CHOOSE)
  267. {
  268. ChooseModem();
  269. continue;
  270. }
  271. switch(field)
  272. {
  273. case GT_IPX:
  274. // NetworkConfig();
  275. break;
  276. case GT_MODEM:
  277. ModemConfig();
  278. break;
  279. case GT_SERIAL:
  280. SerialConfig();
  281. break;
  282. case GT_MACROS:
  283. MacroConfig();
  284. break;
  285. }
  286. RestoreScreen();
  287. return;
  288. }
  289. }
  290. }