NETREST.C 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. //
  2. // Enter network savegame info
  3. //
  4. #include <process.h>
  5. #include <stdio.h>
  6. #include <dos.h>
  7. #include <conio.h>
  8. #include <mem.h>
  9. #include <stdlib.h>
  10. #include <fcntl.h>
  11. #include <io.h>
  12. #include "main.h"
  13. #include "default.h"
  14. char savenames[6][24];
  15. int saveslot;
  16. enum {NETS_0,NETS_1,NETS_2,NETS_3,NETS_4,NETS_5,
  17. NETS_DEATHNO,NETS_DEATHYES,
  18. NETS_SOCKET,NETS_MAX};
  19. item_t netsaveitems[]=
  20. {
  21. {NETS_0, 29,7,24, -1,-1},
  22. {NETS_1, 29,8,24, -1,-1},
  23. {NETS_2, 29,9,24, -1,-1},
  24. {NETS_3, 29,10,24, -1,-1},
  25. {NETS_4, 29,11,24, -1,-1},
  26. {NETS_5, 29,12,24, -1,-1},
  27. {NETS_DEATHNO, 29,14,24, -1,-1},
  28. {NETS_DEATHYES,29,15,24, -1,-1},
  29. {NETS_SOCKET, 26,17,16, -1,-1}
  30. };
  31. menu_t netsavemenu=
  32. {
  33. &netsaveitems[0],
  34. NETS_0,
  35. NETS_MAX,
  36. 0x7f
  37. };
  38. // SAVEGAME radio group
  39. radio_t netslots[]=
  40. {
  41. {26,7,0},
  42. {26,8,1},
  43. {26,9,2},
  44. {26,10,3},
  45. {26,11,4},
  46. {26,12,5}
  47. };
  48. radiogroup_t netslotsg= { &netslots[0],6,&saveslot,15,1 };
  49. // DEATHMATCH radio group
  50. radio_t netsdeath[]=
  51. {
  52. {26,14,0},
  53. {26,15,1}
  54. };
  55. radiogroup_t netsdeathg= { &netsdeath[0],2,&info.deathMatch,15,1 };
  56. int RestoreNetwork(void)
  57. {
  58. short field;
  59. short key;
  60. int rval = 0;
  61. char *args[MAXARGS];
  62. char string[MAXARGS*2][16];
  63. int argcount;
  64. int i;
  65. int numplayers[6];
  66. int handle;
  67. char name[32];
  68. char p1,p2,p3,p4;
  69. char tempstring[10];
  70. info = netinfo; // save copy of netinfo
  71. SaveScreen();
  72. DrawPup(&netsave);
  73. saveslot = -1;
  74. memset(savenames,0,6*24);
  75. //
  76. // Read in savegame strings
  77. //
  78. textbackground(1);
  79. textcolor(15);
  80. for (i = 0;i < 6;i++)
  81. {
  82. sprintf(name,SAVENAME,i);
  83. handle = open (name, O_BINARY | O_RDONLY);
  84. if (handle == -1)
  85. continue;
  86. read(handle,savenames[i],24);
  87. lseek(handle,27+16,SEEK_SET);
  88. read(handle,&p1,1);
  89. read(handle,&p2,1);
  90. read(handle,&p3,1);
  91. read(handle,&p4,1);
  92. numplayers[i] = p1+p2+p3+p4;
  93. close(handle);
  94. Clear(&netsaveitems[i]);
  95. Pos(&netsaveitems[i]);
  96. cprintf("%s",savenames[i]);
  97. }
  98. //
  99. // Set defaults
  100. //
  101. info.networkSocket = 0;
  102. Clear(&netsaveitems[NETS_SOCKET]);
  103. Pos(&netsaveitems[NETS_SOCKET]);
  104. cprintf("%u",info.networkSocket);
  105. gotoxy(1,25);
  106. info.deathMatch = 0;
  107. DrawRadios(&netsdeathg);
  108. while(1)
  109. {
  110. SetupMenu(&netsavemenu);
  111. field = GetMenuInput();
  112. key = menukey;
  113. switch ( key )
  114. {
  115. case KEY_ESC:
  116. rval = -1;
  117. goto func_exit;
  118. exitandsave:
  119. case KEY_F10:
  120. if (saveslot < 0)
  121. {
  122. ErrorWindow(&netserr);
  123. break;
  124. }
  125. #pragma warn -cln
  126. if (info.networkSocket > 64000)
  127. #pragma warn +cln
  128. {
  129. sound(100);
  130. delay(6);
  131. nosound();
  132. textbackground(7);
  133. textcolor(0);
  134. gotoxy(2,25);
  135. #ifndef FRENCH
  136. cprintf("Invalid port socket value! Re-enter it.");
  137. #endif
  138. gotoxy(1,25);
  139. netsavemenu.startitem = NETS_SOCKET;
  140. break;
  141. }
  142. netinfo = info;
  143. M_SaveDefaults();
  144. RestoreScreen();
  145. argcount = 1;
  146. args[0] = "ipxsetup.exe ";
  147. if (cdrom)
  148. args[argcount++] = "-cdrom";
  149. args[argcount++] = "-nodes";
  150. sprintf(string[argcount],"%d",numplayers[saveslot]);
  151. args[argcount] = string[argcount];
  152. argcount++;
  153. if (netinfo.networkSocket)
  154. {
  155. args[argcount++] = "-port";
  156. sprintf(string[argcount],"%u",netinfo.networkSocket);
  157. args[argcount] = string[argcount];
  158. argcount++;
  159. }
  160. if (netinfo.deathMatch)
  161. args[argcount++] = "-deathmatch";
  162. args[argcount++] = "-loadgame";
  163. sprintf(string[argcount],"%d",saveslot);
  164. args[argcount] = string[argcount];
  165. argcount++;
  166. for (i = 1;i < myargc; i++)
  167. args[argcount++] = myargv[i];
  168. args[argcount] = NULL;
  169. textbackground(0);
  170. textcolor(7);
  171. clrscr();
  172. execv("ipxsetup.exe",args);
  173. //
  174. // ERROR EXECing!
  175. //
  176. printf("Problem EXECing IPXSETUP for netplay. Need to be in same directory!");
  177. exit(0);
  178. case KEY_ENTER:
  179. switch ( field )
  180. {
  181. case NETS_0:
  182. case NETS_1:
  183. case NETS_2:
  184. case NETS_3:
  185. case NETS_4:
  186. case NETS_5:
  187. if (!savenames[field][0])
  188. {
  189. sound(1000);
  190. delay(12);
  191. nosound();
  192. break;
  193. }
  194. saveslot = field;
  195. break;
  196. //
  197. // Deathmatch
  198. //
  199. case NETS_DEATHNO: info.deathMatch = 0; break;
  200. case NETS_DEATHYES: info.deathMatch = 1; break;
  201. //
  202. // Network socket #
  203. //
  204. case NETS_SOCKET:
  205. ltoa(info.networkSocket,tempstring,10);
  206. key = EditLine(&netsaveitems[NETS_SOCKET],tempstring,8);
  207. if (key == KEY_ENTER)
  208. info.networkSocket = atoi(tempstring);
  209. textcolor(15);
  210. textbackground(1);
  211. Clear(&netsaveitems[NETS_SOCKET]);
  212. Pos(&netsaveitems[NETS_SOCKET]);
  213. cprintf("%u",info.networkSocket);
  214. gotoxy(1,25);
  215. break;
  216. default:
  217. break;
  218. }
  219. DrawRadios(&netslotsg);
  220. DrawRadios(&netsdeathg);
  221. break;
  222. }
  223. }
  224. func_exit:
  225. RestoreScreen();
  226. return ( rval );
  227. }
  228. //
  229. // Choose which type of netplay for SAVEGAME RESTORE
  230. //
  231. enum {NETCH_IPX,NETCH_MOD,NETCH_SER, NETCH_MAX};
  232. item_t netplay2items[]=
  233. {
  234. {NETCH_IPX, 27,11,26, -1,-1},
  235. {NETCH_MOD, 27,12,26, -1,-1},
  236. {NETCH_SER, 27,13,26, -1,-1}
  237. };
  238. menu_t netplay2menu=
  239. {
  240. &netplay2items[0],
  241. NETCH_IPX,
  242. NETCH_MAX,
  243. 0x7f
  244. };
  245. void ChooseNetrestore(void)
  246. {
  247. short key;
  248. short field;
  249. SaveScreen();
  250. DrawPup(&netplay2);
  251. while(1)
  252. {
  253. SetupMenu(&netplay2menu);
  254. field = GetMenuInput();
  255. key = menukey;
  256. switch(key)
  257. {
  258. case KEY_ESC:
  259. RestoreScreen();
  260. return;
  261. case KEY_ENTER:
  262. RestoreScreen();
  263. switch(field)
  264. {
  265. case NETCH_IPX:
  266. RestoreNetwork();
  267. break;
  268. case NETCH_MOD:
  269. RestoreModem();
  270. break;
  271. case NETCH_SER:
  272. RestoreSerial();
  273. break;
  274. }
  275. return;
  276. }
  277. }
  278. }