NET.C 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. //
  2. // Enter network config info
  3. //
  4. #include <process.h>
  5. #include <dos.h>
  6. #include <string.h>
  7. #include <stdio.h>
  8. #include <conio.h>
  9. #include <stdlib.h>
  10. #include <bios.h>
  11. #include "main.h"
  12. #include "default.h"
  13. #ifndef DOOM2
  14. #define NET_EPY 3 // Y-coord for Episode group
  15. #define NET_NPY 7 // Number of players
  16. #define NET_SKY 11 // Skill level
  17. #define NET_DMY 17 // Deathmatch
  18. #define NET_STY 20 // Socket value
  19. #else
  20. #define NET_NPY 5
  21. #define NET_SKY 9
  22. #define NET_DMY 15
  23. #define NET_STY 18
  24. #endif
  25. #ifndef DOOM2
  26. // # of players radio group
  27. radio_t netepi[]=
  28. {
  29. {28,NET_EPY,1},
  30. {28,NET_EPY+1,2},
  31. {28,NET_EPY+2,3}
  32. };
  33. radiogroup_t netepig={&netepi[0],3,&info.episode,15,1};
  34. #endif
  35. // # of players radio group
  36. radio_t netp[]=
  37. {
  38. {28,NET_NPY,2},
  39. {28,NET_NPY+1,3},
  40. {28,NET_NPY+2,4}
  41. };
  42. radiogroup_t netpg={&netp[0],3,&info.numberOfPlayers,15,1};
  43. // SKILL radio group
  44. radio_t netskill[]=
  45. {
  46. {28,NET_SKY,1},
  47. {28,NET_SKY+1,2},
  48. {28,NET_SKY+2,3},
  49. {28,NET_SKY+3,4},
  50. {28,NET_SKY+4,5}
  51. };
  52. radiogroup_t netskillg={&netskill[0],5,&info.skillLevel,15,1};
  53. // DEATHMATCH radio group
  54. radio_t netdeath[]=
  55. {
  56. {28,NET_DMY,0},
  57. {28,NET_DMY+1,1}
  58. };
  59. radiogroup_t netdeathg={&netdeath[0],2,&info.deathMatch,15,1};
  60. enum
  61. {
  62. #ifndef DOOM2
  63. NET_EPISODE0, NET_EPISODE1, NET_EPISODE2,
  64. #endif
  65. NET_P2, NET_P3, NET_P4,
  66. NET_SKILL1, NET_SKILL2, NET_SKILL3, NET_SKILL4, NET_SKILL5,
  67. NET_DEATHNO, NET_DEATHYES,
  68. NET_SOCKET,
  69. NET_MAX
  70. };
  71. item_t netwkitems[]=
  72. {
  73. #ifndef DOOM2
  74. {NET_EPISODE0, 31,NET_EPY,21, -1,-1},
  75. {NET_EPISODE1, 31,NET_EPY+1,21, -1,-1},
  76. {NET_EPISODE2, 31,NET_EPY+2,21, -1,-1},
  77. #endif
  78. {NET_P2, 31,NET_NPY,21, -1,-1},
  79. {NET_P3, 31,NET_NPY+1,21, -1,-1},
  80. {NET_P4, 31,NET_NPY+2,21, -1,-1},
  81. {NET_SKILL1, 31,NET_SKY,21, -1,-1},
  82. {NET_SKILL2, 31,NET_SKY+1,21, -1,-1},
  83. {NET_SKILL3, 31,NET_SKY+2,21, -1,-1},
  84. {NET_SKILL4, 31,NET_SKY+3,21, -1,-1},
  85. {NET_SKILL5, 31,NET_SKY+4,21, -1,-1},
  86. {NET_DEATHNO, 31,NET_DMY,20, -1,-1},
  87. {NET_DEATHYES, 31,NET_DMY+1,20, -1,-1},
  88. {NET_SOCKET, 28,NET_STY,12, -1,-1},
  89. };
  90. menu_t netwkmenu=
  91. {
  92. &netwkitems[0],
  93. #ifndef DOOM2
  94. NET_EPISODE0,
  95. #else
  96. NET_P2,
  97. #endif
  98. NET_MAX,
  99. 0x7f
  100. };
  101. int NetworkConfig(void)
  102. {
  103. short key;
  104. short field;
  105. int rval = 0;
  106. char *args[MAXARGS];
  107. int argcount;
  108. char string[MAXARGS*2][12];
  109. int i;
  110. int level;
  111. char tempstring[10];
  112. info = netinfo; // save copy of netinfo
  113. SaveScreen();
  114. DrawPup(&netwk2);
  115. //
  116. // Set defaults
  117. //
  118. info.networkSocket = 0;
  119. textbackground(1);
  120. textcolor(15);
  121. Clear(&netwkitems[NET_SOCKET]);
  122. Pos(&netwkitems[NET_SOCKET]);
  123. cprintf("%u",info.networkSocket);
  124. gotoxy(1,25);
  125. info.numberOfPlayers = 2;
  126. DrawRadios(&netpg);
  127. info.skillLevel = 3;
  128. DrawRadios(&netskillg);
  129. info.episode = 1;
  130. #ifndef DOOM2
  131. DrawRadios(&netepig);
  132. #endif
  133. info.deathMatch = 0;
  134. DrawRadios(&netdeathg);
  135. while(1)
  136. {
  137. SetupMenu(&netwkmenu);
  138. field = GetMenuInput();
  139. key = menukey;
  140. switch ( key )
  141. {
  142. case KEY_ESC:
  143. rval = -1;
  144. goto func_exit;
  145. //
  146. // WARP
  147. //
  148. case KEY_F1:
  149. {
  150. level = WarpTime();
  151. if (!level)
  152. continue;
  153. #pragma warn -cln
  154. if (info.networkSocket > 64000)
  155. #pragma warn +cln
  156. {
  157. sound(100);
  158. delay(3);
  159. nosound();
  160. textcolor(0);
  161. textbackground(7);
  162. gotoxy(2,25);
  163. cprintf("Invalid port socket value! Re-enter it.");
  164. netwkmenu.startitem = NET_SOCKET;
  165. gotoxy(1,25);
  166. goto func_exit;
  167. }
  168. netinfo = info;
  169. M_SaveDefaults();
  170. RestoreScreen();
  171. argcount = 1;
  172. args[0] = "ipxsetup.exe";
  173. if (cdrom)
  174. args[argcount++] = "-cdrom";
  175. args[argcount++] = "-nodes";
  176. sprintf(string[argcount],"%d",netinfo.numberOfPlayers);
  177. args[argcount] = string[argcount];
  178. argcount++;
  179. args[argcount++] = "-skill";
  180. sprintf(string[argcount],"%d",netinfo.skillLevel);
  181. args[argcount] = string[argcount];
  182. argcount++;
  183. if (!level)
  184. {
  185. #ifndef DOOM2
  186. args[argcount++] = "-episode";
  187. sprintf(string[argcount],"%d",netinfo.episode);
  188. args[argcount] = string[argcount];
  189. argcount++;
  190. #endif
  191. }
  192. else
  193. {
  194. args[argcount++] = "-warp";
  195. #ifdef DOOM2
  196. sprintf(string[argcount],"%d",level);
  197. args[argcount] = string[argcount];
  198. #else
  199. sprintf(string[argcount],"%d",level>>8);
  200. args[argcount] = string[argcount];
  201. argcount++;
  202. sprintf(string[argcount],"%d",level&0x0f);
  203. args[argcount] = string[argcount];
  204. #endif
  205. argcount++;
  206. }
  207. if (netinfo.networkSocket)
  208. {
  209. args[argcount++] = "-port";
  210. sprintf(string[argcount],"%u",netinfo.networkSocket);
  211. args[argcount] = string[argcount];
  212. argcount++;
  213. }
  214. if (netinfo.deathMatch)
  215. args[argcount++] = "-deathmatch";
  216. if (nomonsters)
  217. args[argcount++] = "-nomonsters";
  218. if (respawn)
  219. args[argcount++] = "-respawn";
  220. if (deathmatch2)
  221. args[argcount++] = "-altdeath";
  222. for (i = 1;i < myargc; i++)
  223. args[argcount++] = myargv[i];
  224. args[argcount] = NULL;
  225. textbackground(0);
  226. textcolor(7);
  227. clrscr();
  228. execv("ipxsetup.exe",args);
  229. //
  230. // ERROR EXECing!
  231. //
  232. printf("Problem EXECing IPXSETUP for netplay. Need to be in same directory!");
  233. exit(0);
  234. }
  235. break;
  236. exitandsave:
  237. case KEY_F10:
  238. #pragma warn -cln
  239. if (info.networkSocket > 64000)
  240. #pragma warn +cln
  241. {
  242. sound(100);
  243. delay(3);
  244. nosound();
  245. textcolor(0);
  246. textbackground(7);
  247. gotoxy(2,25);
  248. cprintf("Invalid port socket value! Re-enter it.");
  249. gotoxy(1,25);
  250. netwkmenu.startitem = NET_SOCKET;
  251. break;
  252. }
  253. netinfo = info;
  254. M_SaveDefaults();
  255. RestoreScreen();
  256. argcount = 1;
  257. args[0] = "ipxsetup.exe";
  258. if (cdrom)
  259. args[argcount++] = "-cdrom";
  260. args[argcount++] = "-nodes";
  261. sprintf(string[argcount],"%d",netinfo.numberOfPlayers);
  262. args[argcount] = string[argcount];
  263. argcount++;
  264. args[argcount++] = "-skill";
  265. sprintf(string[argcount],"%d",netinfo.skillLevel);
  266. args[argcount] = string[argcount];
  267. argcount++;
  268. if (netinfo.networkSocket)
  269. {
  270. args[argcount++] = "-port";
  271. sprintf(string[argcount],"%u",netinfo.networkSocket);
  272. args[argcount] = string[argcount];
  273. argcount++;
  274. }
  275. if (netinfo.deathMatch)
  276. args[argcount++] = "-deathmatch";
  277. #ifndef DOOM2
  278. args[argcount++] = "-episode";
  279. sprintf(string[argcount],"%d",netinfo.episode);
  280. args[argcount] = string[argcount];
  281. argcount++;
  282. #endif
  283. for (i = 1;i < myargc; i++)
  284. args[argcount++] = myargv[i];
  285. args[argcount] = NULL;
  286. textbackground(0);
  287. textcolor(7);
  288. clrscr();
  289. execv("ipxsetup.exe",args);
  290. //
  291. // ERROR EXECing!
  292. //
  293. printf("Problem EXECing IPXSETUP for netplay. Need to be in same directory!");
  294. exit(0);
  295. case KEY_ENTER:
  296. switch ( field )
  297. {
  298. #ifndef DOOM2
  299. //
  300. // Episode
  301. //
  302. case NET_EPISODE0:
  303. case NET_EPISODE1:
  304. case NET_EPISODE2:
  305. info.episode = field - NET_EPISODE0 + 1;
  306. break;
  307. #endif
  308. //
  309. // Number of players
  310. //
  311. case NET_P2:
  312. case NET_P3:
  313. case NET_P4:
  314. info.numberOfPlayers = field - NET_P2 + 2;
  315. break;
  316. //
  317. // Skill level
  318. //
  319. case NET_SKILL1:
  320. case NET_SKILL2:
  321. case NET_SKILL3:
  322. case NET_SKILL4:
  323. case NET_SKILL5:
  324. info.skillLevel = field - NET_SKILL1 + 1; break;
  325. //
  326. // Deathmatch
  327. //
  328. case NET_DEATHNO:
  329. case NET_DEATHYES:
  330. info.deathMatch = field - NET_DEATHNO; break;
  331. //
  332. // Network socket #
  333. //
  334. case NET_SOCKET:
  335. ltoa(info.networkSocket,tempstring,10);
  336. key = EditLine(&netwkitems[NET_SOCKET],tempstring,8);
  337. if (key == KEY_ENTER)
  338. info.networkSocket = atoi(tempstring);
  339. textcolor(15);
  340. textbackground(1);
  341. Clear(&netwkitems[NET_SOCKET]);
  342. Pos(&netwkitems[NET_SOCKET]);
  343. cprintf("%u",info.networkSocket);
  344. gotoxy(1,25);
  345. break;
  346. default:
  347. break;
  348. }
  349. #ifndef DOOM2
  350. DrawRadios(&netepig);
  351. #endif
  352. DrawRadios(&netpg);
  353. DrawRadios(&netskillg);
  354. DrawRadios(&netdeathg);
  355. break;
  356. }
  357. }
  358. func_exit:
  359. RestoreScreen();
  360. return ( rval );
  361. }