home *** CD-ROM | disk | FTP | other *** search
/ Toolkit for DOOM / DOOMTOOL.ISO / net_doom / ser4_src.zip / DOOMNET.C next >
C/C++ Source or Header  |  1994-03-19  |  4KB  |  178 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <process.h>
  5. #include <dos.h>
  6. #include <conio.h>
  7. #include "doomnet.h"
  8.  
  9. doomcom_t    doomcom;
  10. int            vectorishooked;
  11. void interrupt (*olddoomvect) (void);
  12.  
  13. extern int loadgame;
  14. extern char config [256+1];
  15. extern char devparm [256+1];
  16. extern int nomonsters;
  17. extern int respawn;
  18. extern int episode;
  19. extern int map;
  20. extern int skill;
  21. extern int deathmatch;
  22.  
  23.  
  24.  
  25. /*
  26. =================
  27. =
  28. = CheckParm
  29. =
  30. = Checks for the given parameter in the program's command line arguments
  31. =
  32. = Returns the argument number (1 to argc-1) or 0 if not present
  33. =
  34. =================
  35. */
  36.  
  37. #if 0  /****************************************/
  38.  
  39. int CheckParm (char *check)
  40. {
  41.     int             i;
  42.  
  43.     for (i = 1;i<_argc;i++)
  44.         if ( !stricmp(check,_argv[i]) )
  45.             return i;
  46.  
  47.     return 0;
  48. }
  49.  
  50. #endif  /****************************************/
  51.  
  52.  
  53. /*
  54. =============
  55. =
  56. = LaunchDOOM
  57. =
  58. These fields in doomcom should be filled in before calling:
  59.  
  60.     short    numnodes;        // console is allways node 0
  61.     short    ticdup;            // 1 = no duplication, 2-5 = dup for slow nets
  62.     short    extratics;        // 1 = send a backup tic in every packet
  63.  
  64.     short    consoleplayer;    // 0-3 = player number
  65.     short    numplayers;        // 1-4
  66.     short    angleoffset;    // 1 = left, 0 = center, -1 = right
  67.     short    drone;            // 1 = drone
  68. =============
  69. */
  70.  
  71. void LaunchDOOM (void)
  72. {
  73.     char    *newargs[99];
  74.     char    adrstring[10];
  75.     long      flatadr;
  76.     char epstr [2];
  77.     char mapstr [2];
  78.     char skstr [2];
  79.     char lostr [2];
  80.     int argnum = 0;
  81.     int i;
  82.     int prev;
  83.     char devstr [256+1];
  84.  
  85. // prepare for DOOM
  86.     olddoomvect = getvect (doomcom.intnum);
  87.     setvect (doomcom.intnum,NetISR);
  88.     vectorishooked = 1;
  89.  
  90. // build the argument list for DOOM, adding "-net" and the address of doomcom.
  91.  
  92.     /* Copy our program name first - isn't necessary, but doom relies on it */
  93.     newargs [argnum++] = _argv [0];
  94.  
  95.     if (deathmatch)
  96.         newargs [argnum++] = "-deathmatch";
  97.     if (nomonsters)
  98.         newargs [argnum++] = "-nomonsters";
  99.     if (respawn)
  100.         newargs [argnum++] = "-respawn";
  101.     if (map != -1)
  102.     {
  103.         if (devparm [0] == EOS)
  104.             newargs [argnum++] = "-devparm";
  105.         newargs [argnum++] = "-warp";
  106.         sprintf (epstr, "%d", episode == -1 ? 1 : episode);
  107.         newargs [argnum++] = epstr;
  108.         sprintf (mapstr, "%d", map);
  109.         newargs [argnum++] = mapstr;
  110.     }
  111.     else if (episode != -1)
  112.     {
  113.         newargs [argnum++] = "-episode";
  114.         sprintf (epstr, "%d", episode);
  115.         newargs [argnum++] = epstr;
  116.     }
  117.     if (skill != -1)
  118.     {
  119.         newargs [argnum++] = "-skill";
  120.         sprintf (skstr, "%d", skill);
  121.         newargs [argnum++] = skstr;
  122.     }
  123.     if (loadgame != -1)
  124.     {
  125.         newargs [argnum++] = "-loadgame";
  126.         sprintf (lostr, "%d", loadgame);
  127.         newargs [argnum++] = lostr;
  128.     }
  129.     if (config [0] != EOS)
  130.     {
  131.         newargs [argnum++] = "-config";
  132.         newargs [argnum++] = config;
  133.     }
  134.  
  135.     if (devparm [0] != EOS)
  136.     {
  137.         newargs [argnum++] = "-devparm";
  138.         /* Copy all devparm args */
  139.         strcpy (devstr, devparm);
  140.         prev = 0;
  141.         i = -1;
  142.         while (devstr [++i] != EOS)
  143.         {
  144.             if (devstr [i] == ' ')
  145.             {
  146.                 devstr [i] = EOS;
  147.                 newargs [argnum++] = &devstr [prev];
  148.                 prev = i+1;
  149.             }
  150.         }
  151.         newargs [argnum++] = &devstr [prev];
  152.     }
  153.  
  154.     newargs [argnum++] = "-net";
  155.  
  156.     /* Add address of doomcom structure */
  157.     flatadr = (long)_DS*16 + (unsigned)&doomcom;
  158.     sprintf (adrstring,"%lu",flatadr);
  159.     newargs [argnum++] = adrstring;
  160.  
  161.     newargs [argnum] = NULL;
  162.  
  163.     printf ("About to launch doom.exe -- Passing these arguments:\n");
  164.     for (i = 0; i < argnum; i++)
  165.         printf ("  arg %d = %s\n", i, newargs [i]);
  166.     printf ("  player = %d\n", doomcom.consoleplayer);
  167.     printf ("  extratics = %d\n", doomcom.extratics);
  168.     printf ("\nPress ESC to abort, or any other key to continue...");
  169.     if (getch () == ESC)
  170.     {
  171.         printf ("\n\n");
  172.         return;
  173.    }
  174.  
  175.     spawnv  (P_WAIT, "doom", newargs);
  176.     printf ("\nReturned from DOOM\n\n");
  177. }
  178.