SERIAL.C 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. //
  2. // Enter serial 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. enum
  14. {
  15. #ifndef DOOM2
  16. SER_EPISODE0, SER_EPISODE1, SER_EPISODE2,
  17. #endif
  18. SER_SKILL1, SER_SKILL2, SER_SKILL3, SER_SKILL4,
  19. SER_DEATHNO, SER_DEATHYES,
  20. SER_COM1, SER_COM2, SER_COM3, SER_COM4,
  21. SER_MAX
  22. };
  23. item_t cserialitems[]=
  24. {
  25. #ifndef DOOM2
  26. {SER_EPISODE0, 31,5,21, -1,-1},
  27. {SER_EPISODE1, 31,6,21, -1,-1},
  28. {SER_EPISODE2, 31,7,21, -1,-1},
  29. {SER_SKILL1, 31,9,21, -1,-1},
  30. {SER_SKILL2, 31,10,21, -1,-1},
  31. {SER_SKILL3, 31,11,21, -1,-1},
  32. {SER_SKILL4, 31,12,21, -1,-1},
  33. {SER_DEATHNO, 31,14,20, -1,-1},
  34. {SER_DEATHYES, 31,15,20, -1,-1},
  35. {SER_COM1, 31,17,4, -1, SER_COM3},
  36. {SER_COM2, 31,18,4, -1, SER_COM4},
  37. {SER_COM3, 45,17,4, SER_COM1,-1,SER_DEATHYES},
  38. {SER_COM4, 45,18,4, SER_COM2,-1}
  39. #else
  40. {SER_SKILL1, 31,7,20, -1,-1},
  41. {SER_SKILL2, 31,8,20, -1,-1},
  42. {SER_SKILL3, 31,9,20, -1,-1},
  43. {SER_SKILL4, 31,10,20, -1,-1},
  44. {SER_DEATHNO, 31,12,20, -1,-1},
  45. {SER_DEATHYES, 31,13,20, -1,-1},
  46. {SER_COM1, 31,15,4, -1, SER_COM3},
  47. {SER_COM2, 31,16,4, -1, SER_COM4},
  48. {SER_COM3, 45,15,4, SER_COM1,-1,SER_DEATHYES},
  49. {SER_COM4, 45,16,4, SER_COM2,-1}
  50. #endif
  51. };
  52. menu_t cserialmenu=
  53. {
  54. &cserialitems[0],
  55. #ifndef DOOM2
  56. SER_EPISODE0,
  57. #else
  58. SER_SKILL1,
  59. #endif
  60. SER_MAX,
  61. 0x7f
  62. };
  63. #ifndef DOOM2
  64. // EPISODE radio buttons
  65. radio_t sepi[]=
  66. {
  67. {28,5,1},
  68. {28,6,2},
  69. {28,7,3}
  70. };
  71. radiogroup_t sepig={&sepi[0],3,&sinfo.episode,15,1};
  72. // SKILL radio buttons
  73. radio_t sskill[]=
  74. {
  75. {28,9,2},
  76. {28,10,3},
  77. {28,11,4},
  78. {28,12,5}
  79. };
  80. radiogroup_t sskillg={&sskill[0],4,&sinfo.skillLevel,15,1};
  81. // DEATHMATCH radio buttons
  82. radio_t sdeath[]=
  83. {
  84. {28,14,0},
  85. {28,15,1}
  86. };
  87. radiogroup_t sdeathg={&sdeath[0],2,&sinfo.deathMatch,15,1};
  88. // COMPORT radio buttons
  89. radio_t scom[]=
  90. {
  91. {28,17,1},
  92. {28,18,2},
  93. {42,17,3},
  94. {42,18,4}
  95. };
  96. radiogroup_t scomg={&scom[0],4,&sinfo.comport,15,1};
  97. #else
  98. // SKILL radio buttons
  99. radio_t sskill[]=
  100. {
  101. {28,7,2},
  102. {28,8,3},
  103. {28,9,4},
  104. {28,10,5}
  105. };
  106. radiogroup_t sskillg={&sskill[0],4,&sinfo.skillLevel,15,1};
  107. // DEATHMATCH radio buttons
  108. radio_t sdeath[]=
  109. {
  110. {28,12,0},
  111. {28,13,1}
  112. };
  113. radiogroup_t sdeathg={&sdeath[0],2,&sinfo.deathMatch,15,1};
  114. // COMPORT radio buttons
  115. radio_t scom[]=
  116. {
  117. {28,15,1},
  118. {28,16,2},
  119. {42,15,3},
  120. {42,16,4}
  121. };
  122. radiogroup_t scomg={&scom[0],4,&sinfo.comport,15,1};
  123. #endif
  124. int SerialConfig(void)
  125. {
  126. short key;
  127. short field;
  128. int rval = 0;
  129. char *args[MAXARGS];
  130. int argcount;
  131. char string[MAXARGS*2][12];
  132. int i;
  133. int level;
  134. sinfo = serialinfo; // save copy of modeminfo
  135. SaveScreen();
  136. DrawPup(&cserial);
  137. //
  138. // Set defaults
  139. //
  140. sinfo.skillLevel = 3;
  141. DrawRadios(&sskillg);
  142. sinfo.episode = 1;
  143. #ifndef DOOM2
  144. DrawRadios(&sepig);
  145. #endif
  146. sinfo.deathMatch = 1;
  147. DrawRadios(&sdeathg);
  148. sinfo.comport = comport;
  149. DrawRadios(&scomg);
  150. while(1)
  151. {
  152. SetupMenu(&cserialmenu);
  153. field = GetMenuInput();
  154. key = menukey;
  155. switch ( key )
  156. {
  157. case KEY_ESC:
  158. rval = -1;
  159. goto func_exit;
  160. //
  161. // Secret WARP code: F5+warp
  162. //
  163. case KEY_F1:
  164. {
  165. level = WarpTime();
  166. if (!level)
  167. continue;
  168. serialinfo = sinfo;
  169. M_SaveDefaults();
  170. RestoreScreen();
  171. argcount = 1;
  172. args[0] = "sersetup.exe ";
  173. if (cdrom)
  174. args[argcount++] = "-cdrom";
  175. args[argcount++] = "-skill";
  176. sprintf(string[argcount],"%d",serialinfo.skillLevel);
  177. args[argcount] = string[argcount];
  178. argcount++;
  179. if (!level)
  180. {
  181. #ifndef DOOM2
  182. args[argcount++] = "-episode";
  183. sprintf(string[argcount],"%d",serialinfo.episode);
  184. args[argcount] = string[argcount];
  185. argcount++;
  186. #endif
  187. }
  188. else
  189. {
  190. args[argcount++] = "-warp";
  191. #ifdef DOOM2
  192. sprintf(string[argcount],"%d",level);
  193. args[argcount] = string[argcount];
  194. #else
  195. sprintf(string[argcount],"%d",level>>8);
  196. args[argcount] = string[argcount];
  197. argcount++;
  198. sprintf(string[argcount],"%d",level&0x0f);
  199. args[argcount] = string[argcount];
  200. #endif
  201. argcount++;
  202. }
  203. if (serialinfo.deathMatch)
  204. args[argcount++] = "-deathmatch";
  205. if (nomonsters)
  206. args[argcount++] = "-nomonsters";
  207. if (respawn)
  208. args[argcount++] = "-respawn";
  209. if (deathmatch2 && serialinfo.deathMatch)
  210. args[argcount++] = "-altdeath";
  211. sprintf(string[argcount],"-com%d",serialinfo.comport);
  212. args[argcount] = string[argcount];
  213. argcount++;
  214. for (i = 1;i < myargc; i++)
  215. args[argcount++] = myargv[i];
  216. args[argcount] = NULL;
  217. textbackground(0);
  218. textcolor(7);
  219. clrscr();
  220. execv("sersetup.exe",args);
  221. //
  222. // ERROR EXECing!
  223. //
  224. printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
  225. exit(1);
  226. }
  227. break;
  228. exitandsave:
  229. case KEY_F10:
  230. serialinfo = sinfo;
  231. M_SaveDefaults();
  232. RestoreScreen();
  233. argcount = 1;
  234. args[0] = "sersetup.exe ";
  235. if (cdrom)
  236. args[argcount++] = "-cdrom";
  237. args[argcount++] = "-skill";
  238. sprintf(string[argcount],"%d",serialinfo.skillLevel);
  239. args[argcount] = string[argcount];
  240. argcount++;
  241. if (serialinfo.deathMatch)
  242. args[argcount++] = "-deathmatch";
  243. #ifndef DOOM2
  244. args[argcount++] = "-episode";
  245. sprintf(string[argcount],"%d",serialinfo.episode);
  246. args[argcount] = string[argcount];
  247. argcount++;
  248. #endif
  249. sprintf(string[argcount],"-com%d",serialinfo.comport);
  250. args[argcount] = string[argcount];
  251. argcount++;
  252. for (i = 1;i < myargc; i++)
  253. args[argcount++] = myargv[i];
  254. args[argcount] = NULL;
  255. textbackground(0);
  256. textcolor(7);
  257. clrscr();
  258. execv("sersetup.exe",args);
  259. //
  260. // ERROR EXECing!
  261. //
  262. printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
  263. exit(1);
  264. case KEY_ENTER:
  265. case 32:
  266. switch ( field )
  267. {
  268. #ifndef DOOM2
  269. //
  270. // Episode
  271. //
  272. case SER_EPISODE0:
  273. case SER_EPISODE1:
  274. case SER_EPISODE2:
  275. sinfo.episode = field - SER_EPISODE0 + 1;
  276. DrawRadios(&sepig);
  277. break;
  278. #endif
  279. //
  280. // Skill level
  281. //
  282. case SER_SKILL1:
  283. case SER_SKILL2:
  284. case SER_SKILL3:
  285. case SER_SKILL4:
  286. sinfo.skillLevel = field - SER_SKILL1 + 2; break;
  287. //
  288. // Deathmatch
  289. //
  290. case SER_DEATHNO:
  291. case SER_DEATHYES:
  292. sinfo.deathMatch = field - SER_DEATHNO;
  293. break;
  294. //
  295. // COM port
  296. //
  297. case SER_COM1:
  298. case SER_COM2:
  299. case SER_COM3:
  300. case SER_COM4:
  301. comport = sinfo.comport = field - SER_COM1 + 1;
  302. break;
  303. default:
  304. break;
  305. }
  306. DrawRadios(&sskillg);
  307. DrawRadios(&sdeathg);
  308. DrawRadios(&scomg);
  309. break;
  310. }
  311. }
  312. func_exit:
  313. RestoreScreen();
  314. return ( rval );
  315. }