SERREST.C 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. //
  2. // Enter serial-link 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 {SERS_0,SERS_1,SERS_2,SERS_3,SERS_4,SERS_5,
  16. SERS_DEATHNO,SERS_DEATHYES,
  17. SERS_COM1,SERS_COM2,SERS_COM3,SERS_COM4,
  18. SERS_MAX};
  19. item_t sersaveitems[]=
  20. {
  21. {SERS_0, 29,6,24, -1,-1},
  22. {SERS_1, 29,7,24, -1,-1},
  23. {SERS_2, 29,8,24, -1,-1},
  24. {SERS_3, 29,9,24, -1,-1},
  25. {SERS_4, 29,10,24, -1,-1},
  26. {SERS_5, 29,11,24, -1,-1},
  27. {SERS_DEATHNO, 29,13,24, -1,-1},
  28. {SERS_DEATHYES,29,14,24, -1,-1},
  29. {SERS_COM1, 29,16,4, -1,SERS_COM3},
  30. {SERS_COM2, 29,17,4, -1,SERS_COM4},
  31. {SERS_COM3, 46,16,4, SERS_COM1,-1,SERS_DEATHYES},
  32. {SERS_COM4, 46,17,4, SERS_COM2,-1}
  33. };
  34. menu_t sersavemenu=
  35. {
  36. &sersaveitems[0],
  37. SERS_0,
  38. SERS_MAX,
  39. 0x7f
  40. };
  41. // SAVEGAME radio group
  42. radio_t serslots[]=
  43. {
  44. {26,6,0},
  45. {26,7,1},
  46. {26,8,2},
  47. {26,9,3},
  48. {26,10,4},
  49. {26,11,5}
  50. };
  51. radiogroup_t serslotsg= { &serslots[0],6,&saveslot,15,1 };
  52. // DEATHMATCH radio group
  53. radio_t sersdeath[]=
  54. {
  55. {26,13,0},
  56. {26,14,1}
  57. };
  58. radiogroup_t sersdeathg= { &sersdeath[0],2,&sinfo.deathMatch,15,1 };
  59. // COMPORT radio group
  60. radio_t serscom[]=
  61. {
  62. {26,16,1},
  63. {26,17,2},
  64. {43,16,3},
  65. {43,17,4}
  66. };
  67. radiogroup_t serscomg= { &serscom[0],4,&sinfo.comport,15,1 };
  68. int RestoreSerial(void)
  69. {
  70. short field;
  71. short key;
  72. int rval = 0;
  73. char *args[MAXARGS];
  74. int argcount;
  75. char string[MAXARGS*2][16];
  76. int i;
  77. int numplayers[6];
  78. int saveslot;
  79. int handle;
  80. char name[32];
  81. char p1,p2,p3,p4;
  82. sinfo = serialinfo; // save copy of netinfo
  83. SaveScreen();
  84. DrawPup(&sersave);
  85. saveslot = -1;
  86. memset(savenames,0,6*24);
  87. //
  88. // Read in savegame strings
  89. //
  90. textbackground(1);
  91. textcolor(15);
  92. for (i = 0;i < 6;i++)
  93. {
  94. sprintf(name,SAVENAME,i);
  95. handle = open (name, O_BINARY | O_RDONLY);
  96. if (handle == -1)
  97. continue;
  98. read(handle,savenames[i],24);
  99. lseek(handle,27+16,SEEK_SET);
  100. read(handle,&p1,1);
  101. read(handle,&p2,1);
  102. read(handle,&p3,1);
  103. read(handle,&p4,1);
  104. numplayers[i] = p1+p2+p3+p4;
  105. close(handle);
  106. Clear(&sersaveitems[i]);
  107. Pos(&sersaveitems[i]);
  108. cprintf("%s",savenames[i]);
  109. }
  110. //
  111. // Set defaults
  112. //
  113. sinfo.comport = comport;
  114. DrawRadios(&serscomg);
  115. sinfo.deathMatch = 0;
  116. DrawRadios(&sersdeathg);
  117. gotoxy(1,25);
  118. while(1)
  119. {
  120. SetupMenu(&sersavemenu);
  121. field = GetMenuInput();
  122. key = menukey;
  123. switch ( key )
  124. {
  125. case KEY_ESC:
  126. rval = -1;
  127. goto func_exit;
  128. exitandsave:
  129. case KEY_F10:
  130. if (saveslot < 0)
  131. {
  132. ErrorWindow(&netserr);
  133. break;
  134. }
  135. serialinfo = sinfo;
  136. M_SaveDefaults();
  137. RestoreScreen();
  138. argcount = 1;
  139. args[0] = "sersetup.exe ";
  140. if (cdrom)
  141. args[argcount++] = "-cdrom";
  142. args[argcount++] = "-nodes";
  143. sprintf(string[argcount],"%d",numplayers[saveslot]);
  144. args[argcount] = string[argcount];
  145. argcount++;
  146. if (modeminfo.deathMatch)
  147. args[argcount++] = "-deathmatch";
  148. sprintf(string[argcount],"-com%d",serialinfo.comport);
  149. args[argcount] = string[argcount];
  150. argcount++;
  151. args[argcount++] = "-loadgame";
  152. sprintf(string[argcount],"%d",saveslot);
  153. args[argcount] = string[argcount];
  154. argcount++;
  155. for (i = 1;i < myargc; i++)
  156. args[argcount++] = myargv[i];
  157. args[argcount] = NULL;
  158. textbackground(0);
  159. textcolor(7);
  160. clrscr();
  161. execv("sersetup.exe",args);
  162. //
  163. // ERROR EXECing!
  164. //
  165. printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
  166. exit(0);
  167. case KEY_ENTER:
  168. switch ( field )
  169. {
  170. case SERS_COM1:
  171. case SERS_COM2:
  172. case SERS_COM3:
  173. case SERS_COM4:
  174. sinfo.comport = field - SERS_COM1 + 1;
  175. DrawRadios(&serscomg);
  176. break;
  177. case SERS_0:
  178. case SERS_1:
  179. case SERS_2:
  180. case SERS_3:
  181. case SERS_4:
  182. case SERS_5:
  183. if (!savenames[field - SERS_0][0])
  184. {
  185. Sound(1000,12);
  186. break;
  187. }
  188. saveslot = field - SERS_0;
  189. DrawRadios(&serslotsg);
  190. break;
  191. //
  192. // Deathmatch
  193. //
  194. case SERS_DEATHNO:
  195. case SERS_DEATHYES:
  196. sinfo.deathMatch = field - SERS_DEATHNO;
  197. DrawRadios(&sersdeathg);
  198. default:
  199. break;
  200. }
  201. break;
  202. }
  203. }
  204. func_exit:
  205. RestoreScreen();
  206. return ( rval );
  207. }
  208.