MODREST.BAK 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. //
  2. // Enter modem savegame info
  3. //
  4. #include <string.h>
  5. #include <process.h>
  6. #include <stdio.h>
  7. #include <dos.h>
  8. #include <conio.h>
  9. #include <mem.h>
  10. #include <stdlib.h>
  11. #include <fcntl.h>
  12. #include <io.h>
  13. #include "main.h"
  14. #include "default.h"
  15. enum {MODS_0,MODS_1,MODS_2,MODS_3,MODS_4,MODS_5,
  16. MODS_DEATHNO,MODS_DEATHYES,
  17. MODS_COM1,MODS_COM2,MODS_COM3,MODS_COM4,
  18. MODS_CONN1,MODS_CONN2,MODS_CONN3,
  19. MODS_MAX};
  20. item_t modsaveitems[]=
  21. {
  22. {MODS_0, 29,4,24, -1,-1},
  23. {MODS_1, 29,5,24, -1,-1},
  24. {MODS_2, 29,6,24, -1,-1},
  25. {MODS_3, 29,7,24, -1,-1},
  26. {MODS_4, 29,8,24, -1,-1},
  27. {MODS_5, 29,9,24, -1,-1},
  28. {MODS_DEATHNO, 29,11,24, -1,-1},
  29. {MODS_DEATHYES,29,12,24, -1,-1},
  30. {MODS_COM1, 29,14,4, -1,MODS_COM3},
  31. {MODS_COM2, 29,15,4, -1,MODS_COM4,0,MODS_CONN1},
  32. {MODS_COM3, 46,14,4, MODS_COM1,-1,MODS_DEATHYES},
  33. {MODS_COM4, 46,15,4, MODS_COM2,-1},
  34. {MODS_CONN1, 29,17,20, -1,-1,MODS_COM2},
  35. {MODS_CONN2, 29,18,20, -1,-1},
  36. {MODS_CONN3, 29,19,7, -1,-1}
  37. };
  38. menu_t modsavemenu=
  39. {
  40. &modsaveitems[0],
  41. MODS_0,
  42. MODS_MAX,
  43. 0x7f
  44. };
  45. // SAVEGAME radio group
  46. radio_t modslots[]=
  47. {
  48. {26,4,0},
  49. {26,5,1},
  50. {26,6,2},
  51. {26,7,3},
  52. {26,8,4},
  53. {26,9,5}
  54. };
  55. radiogroup_t modslotsg= { &modslots[0],6,&saveslot,15,1 };
  56. // DEATHMATCH radio group
  57. radio_t modsdeath[]=
  58. {
  59. {26,11,0},
  60. {26,12,1}
  61. };
  62. radiogroup_t modsdeathg= { &modsdeath[0],2,&minfo.deathMatch,15,1 };
  63. // COMPORT radio group
  64. radio_t modscom[]=
  65. {
  66. {26,14,1},
  67. {26,15,2},
  68. {43,14,3},
  69. {43,15,4}
  70. };
  71. radiogroup_t modscomg= { &modscom[0],4,&minfo.comport,15,1 };
  72. // CONNECT TYPE radio group
  73. radio_t modsconn[]=
  74. {
  75. {26,17,0},
  76. {26,18,1},
  77. {26,19,2}
  78. };
  79. radiogroup_t modsconng= { &modsconn[0],3,&minfo.comtype,15,1 };
  80. int RestoreModem(void)
  81. {
  82. short field;
  83. short key;
  84. int rval = 0;
  85. char *args[MAXARGS];
  86. int argcount;
  87. char string[MAXARGS*2][16];
  88. int i;
  89. int numplayers[6];
  90. int handle;
  91. char name[32];
  92. char p1,p2,p3,p4;
  93. item_t phonenum = {2,37,19,13,-1,-1};
  94. char tempstring[16];
  95. minfo = modeminfo; // save copy of netinfo
  96. SaveScreen();
  97. DrawPup(&modsave);
  98. saveslot = -1;
  99. memset(savenames,0,6*24);
  100. //
  101. // Read in savegame strings
  102. //
  103. textbackground(1);
  104. textcolor(15);
  105. for (i = 0;i < 6;i++)
  106. {
  107. sprintf(name,SAVENAME,i);
  108. handle = open (name, O_BINARY | O_RDONLY);
  109. if (handle == -1)
  110. continue;
  111. read(handle,savenames[i],24);
  112. lseek(handle,27+16,SEEK_SET);
  113. read(handle,&p1,1);
  114. read(handle,&p2,1);
  115. read(handle,&p3,1);
  116. read(handle,&p4,1);
  117. numplayers[i] = p1+p2+p3+p4;
  118. close(handle);
  119. Clear(&modsaveitems[i]);
  120. Pos(&modsaveitems[i]);
  121. cprintf("%s",savenames[i]);
  122. }
  123. //
  124. // Set defaults
  125. //
  126. minfo.comtype = 1;
  127. DrawRadios(&modsconng);
  128. minfo.comport = comport;
  129. DrawRadios(&modscomg);
  130. minfo.deathMatch = 0;
  131. DrawRadios(&modsdeathg);
  132. strcpy(minfo.phonenum,"");
  133. while(1)
  134. {
  135. SetupMenu(&modsavemenu);
  136. field = GetMenuInput();
  137. key = menukey;
  138. switch ( key )
  139. {
  140. case KEY_ESC:
  141. rval = -1;
  142. goto func_exit;
  143. exitandsave:
  144. case KEY_F10:
  145. if (saveslot < 0)
  146. {
  147. ErrorWindow(&netserr);
  148. break;
  149. }
  150. modeminfo = minfo;
  151. M_SaveDefaults();
  152. RestoreScreen();
  153. argcount = 1;
  154. args[0] = "sersetup.exe ";
  155. if (cdrom)
  156. args[argcount++] = "-cdrom";
  157. args[argcount++] = "-nodes";
  158. sprintf(string[argcount],"%d",numplayers[saveslot]);
  159. args[argcount] = string[argcount];
  160. argcount++;
  161. if (modeminfo.deathMatch)
  162. args[argcount++] = "-deathmatch";
  163. sprintf(string[argcount],"-com%d",modeminfo.comport);
  164. args[argcount] = string[argcount];
  165. argcount++;
  166. switch(modeminfo.comtype)
  167. {
  168. case 0: // no parameter if already connected!
  169. break;
  170. case 1:
  171. args[argcount++] = "-answer";
  172. break;
  173. case 2:
  174. args[argcount++] = "-dial";
  175. sprintf(string[argcount],"%s",minfo.phonenum);
  176. args[argcount] = string[argcount];
  177. argcount++;
  178. break;
  179. }
  180. args[argcount++] = "-loadgame";
  181. sprintf(string[argcount],"%d",saveslot);
  182. args[argcount] = string[argcount];
  183. argcount++;
  184. for (i = 1;i < myargc; i++)
  185. args[argcount++] = myargv[i];
  186. args[argcount] = NULL;
  187. textbackground(0);
  188. textcolor(7);
  189. clrscr();
  190. execv("sersetup.exe",args);
  191. //
  192. // ERROR EXECing!
  193. //
  194. printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
  195. exit(0);
  196. case KEY_F2:
  197. if (ChooseOpponentInList())
  198. {
  199. strcpy(minfo.phonenum,chosenPhoneNum);
  200. textcolor(15);
  201. textbackground(0);
  202. Clear(&phonenum);
  203. Pos(&phonenum);
  204. cprintf("%s",minfo.phonenum);
  205. minfo.comtype = 2;
  206. DrawRadios(&modsconng);
  207. gotoxy(1,25);
  208. }
  209. break;
  210. case KEY_ENTER:
  211. switch ( field )
  212. {
  213. case MODS_COM1:
  214. case MODS_COM2:
  215. case MODS_COM3:
  216. case MODS_COM4:
  217. minfo.comport = field - MODS_COM1 + 1;
  218. DrawRadios(&modscomg);
  219. break;
  220. case MODS_CONN1:
  221. case MODS_CONN2:
  222. minfo.comtype = field - MODS_CONN1;
  223. DrawRadios(&modsconng);
  224. break;
  225. case MODS_CONN3:
  226. minfo.comtype = 2;
  227. DrawRadios(&modsconng);
  228. key = EditLine(&phonenum,tempstring,12);
  229. if (key == KEY_ENTER)
  230. strcpy(minfo.phonenum,tempstring);
  231. gotoxy(1,25);
  232. break;
  233. case MODS_0:
  234. case MODS_1:
  235. case MODS_2:
  236. case MODS_3:
  237. case MODS_4:
  238. case MODS_5:
  239. if (!savenames[field - MODS_0][0])
  240. {
  241. sound(1000);
  242. delay(12);
  243. nosound();
  244. break;
  245. }
  246. saveslot = field - MODS_0;
  247. DrawRadios(&modslotsg);
  248. break;
  249. //
  250. // Deathmatch
  251. //
  252. case MODS_DEATHNO:
  253. case MODS_DEATHYES:
  254. minfo.deathMatch = field - MODS_DEATHNO;
  255. DrawRadios(&modsdeathg);
  256. break;
  257. default:
  258. break;
  259. }
  260. break;
  261. }
  262. }
  263. func_exit:
  264. RestoreScreen();
  265. return ( rval );
  266. }