MODREST.C 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  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. gotoxy(1,25);
  134. while(1)
  135. {
  136. SetupMenu(&modsavemenu);
  137. field = GetMenuInput();
  138. key = menukey;
  139. switch ( key )
  140. {
  141. case KEY_ESC:
  142. rval = -1;
  143. goto func_exit;
  144. exitandsave:
  145. case KEY_F10:
  146. if (saveslot < 0)
  147. {
  148. ErrorWindow(&netserr);
  149. break;
  150. }
  151. modeminfo = minfo;
  152. M_SaveDefaults();
  153. RestoreScreen();
  154. argcount = 1;
  155. args[0] = "sersetup.exe ";
  156. if (cdrom)
  157. args[argcount++] = "-cdrom";
  158. args[argcount++] = "-nodes";
  159. sprintf(string[argcount],"%d",numplayers[saveslot]);
  160. args[argcount] = string[argcount];
  161. argcount++;
  162. if (modeminfo.deathMatch)
  163. args[argcount++] = "-deathmatch";
  164. sprintf(string[argcount],"-com%d",modeminfo.comport);
  165. args[argcount] = string[argcount];
  166. argcount++;
  167. switch(modeminfo.comtype)
  168. {
  169. case 0: // no parameter if already connected!
  170. break;
  171. case 1:
  172. args[argcount++] = "-answer";
  173. break;
  174. case 2:
  175. args[argcount++] = "-dial";
  176. sprintf(string[argcount],"%s",minfo.phonenum);
  177. args[argcount] = string[argcount];
  178. argcount++;
  179. break;
  180. }
  181. args[argcount++] = "-loadgame";
  182. sprintf(string[argcount],"%d",saveslot);
  183. args[argcount] = string[argcount];
  184. argcount++;
  185. for (i = 1;i < myargc; i++)
  186. args[argcount++] = myargv[i];
  187. args[argcount] = NULL;
  188. textbackground(0);
  189. textcolor(7);
  190. clrscr();
  191. execv("sersetup.exe",args);
  192. //
  193. // ERROR EXECing!
  194. //
  195. printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
  196. exit(0);
  197. case KEY_F2:
  198. if (ChooseOpponentInList())
  199. {
  200. strcpy(minfo.phonenum,chosenPhoneNum);
  201. textcolor(15);
  202. textbackground(0);
  203. Clear(&phonenum);
  204. Pos(&phonenum);
  205. cprintf("%s",minfo.phonenum);
  206. minfo.comtype = 2;
  207. DrawRadios(&modsconng);
  208. gotoxy(1,25);
  209. }
  210. break;
  211. case KEY_ENTER:
  212. switch ( field )
  213. {
  214. case MODS_COM1:
  215. case MODS_COM2:
  216. case MODS_COM3:
  217. case MODS_COM4:
  218. minfo.comport = field - MODS_COM1 + 1;
  219. DrawRadios(&modscomg);
  220. break;
  221. case MODS_CONN1:
  222. case MODS_CONN2:
  223. minfo.comtype = field - MODS_CONN1;
  224. DrawRadios(&modsconng);
  225. break;
  226. case MODS_CONN3:
  227. minfo.comtype = 2;
  228. DrawRadios(&modsconng);
  229. key = EditLine(&phonenum,tempstring,12);
  230. if (key == KEY_ENTER)
  231. strcpy(minfo.phonenum,tempstring);
  232. gotoxy(1,25);
  233. break;
  234. case MODS_0:
  235. case MODS_1:
  236. case MODS_2:
  237. case MODS_3:
  238. case MODS_4:
  239. case MODS_5:
  240. if (!savenames[field - MODS_0][0])
  241. {
  242. sound(1000);
  243. delay(12);
  244. nosound();
  245. break;
  246. }
  247. saveslot = field - MODS_0;
  248. DrawRadios(&modslotsg);
  249. break;
  250. //
  251. // Deathmatch
  252. //
  253. case MODS_DEATHNO:
  254. case MODS_DEATHYES:
  255. minfo.deathMatch = field - MODS_DEATHNO;
  256. DrawRadios(&modsdeathg);
  257. break;
  258. default:
  259. break;
  260. }
  261. break;
  262. }
  263. }
  264. func_exit:
  265. RestoreScreen();
  266. return ( rval );
  267. }