home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / OP2DEV.ZIP / ADVENT.C < prev    next >
C/C++ Source or Header  |  1990-05-10  |  8KB  |  341 lines

  1.  
  2. /*    program ADVENT.C                    *\
  3. \*    WARNING: "advent.c" allocates GLOBAL storage space by    *\
  4. \*        including "advdef.h".                *\
  5. \*        All other modules use "advdec.h"        */
  6.  
  7.  
  8. #include    <stdio.h>
  9. #include    <string.h>
  10. #include <stdarg.h>
  11. #include    "advent.h"    /* #define preprocessor equates    */
  12. #include    "advword.h"    /* definition of "word" array    */
  13. #include    "advcave.h"    /* definition of "cave" array    */
  14. #include    "advtext.h"    /* definition of "text" arrays    */
  15. #include    "advdef.h"
  16.  
  17. #define INCL_DOS
  18. #define INCL_SUB
  19. #include <os2.h>
  20.  
  21. #include "bbsexpan.h"
  22.  
  23. #define     setmem(a,b,c)    memset(a,c,b)
  24.  
  25.  
  26. main(argc, argv)
  27. int    argc;
  28. char    **argv;
  29. {
  30.     int    rflag, rc;        /* user restore request option    */
  31.  
  32.    rc = UseChildAppInit(argv[1],argv[0],&anchor,&unhand,&semhand,&usernum,&instance);
  33.    if( rc != 0 ) {
  34.       printf("\nCould not initialize application (%d)\n",rc);
  35.       return(1);
  36.    }
  37.  
  38.     rflag = 0;
  39.     dbugflg = 0;
  40.     while (--argc > 0) {
  41.         ++argv;
  42.         if (**argv !=  '-')
  43.             break;
  44.         switch(tolower(argv[0][1])) {
  45.         case 'r':
  46.             ++rflag;
  47.             continue;
  48.         case 'd':
  49.             ++dbugflg;
  50.             continue;
  51.         default:
  52.             SerWritef(unhand,"unknown flag: %c\n", argv[0][1]);
  53.             continue;
  54.         }                /* switch    */
  55.     }                    /* while    */
  56.     if (dbugflg < 2)
  57.         dbugflg = 0;    /* must request three times    */
  58.     opentxt();
  59.     initplay();
  60.     if (rflag)
  61.         restore();
  62.     else if (yes(65, 1, 0))
  63.         limit = 1000;
  64.     else
  65.         limit = 330;
  66.     saveflg = 0;
  67.     srand(511);                /* seed random    */
  68.     while(!saveflg)
  69.         turn();
  70.     if (saveflg)
  71.         saveadv();
  72.     fclose(fd1);
  73.     fclose(fd2);
  74.     fclose(fd3);
  75.     fclose(fd4);
  76.  
  77.     exit(0);                /* exit = ok    */
  78. }                        /* main        */
  79.  
  80.  
  81.  
  82. /* ************************************************************    */
  83.  
  84. /*
  85.     Initialize integer arrays with sscanf
  86. */
  87. scanint(pi, str)
  88. int    *pi;
  89. char    *str;
  90. {
  91.  
  92.     while (*str) {
  93.         if  ((sscanf(str, "%d,", pi++)) < 1)
  94.             bug(41);    /* failed before EOS    */
  95.         while (*str++ != ',')    /* advance str pointer    */
  96.             ;
  97.     }
  98.     return(1);
  99. }
  100.  
  101. /*
  102.     Initialization of adventure play variables
  103. */
  104. initplay()
  105. {
  106.     turns = 0;
  107.  
  108.     /* initialize location status array */
  109.     setmem(cond, (sizeof(int))*MAXLOC, 0);
  110.     scanint(&cond[1], "5,1,5,5,1,1,5,17,1,1,");
  111.     scanint(&cond[13], "32,0,0,2,0,0,64,2,");
  112.     scanint(&cond[21], "2,2,0,6,0,2,");
  113.     scanint(&cond[31], "2,2,0,0,0,0,0,4,0,2,");
  114.     scanint(&cond[42], "128,128,128,128,136,136,136,128,128,");
  115.     scanint(&cond[51], "128,128,136,128,136,0,8,0,2,");
  116.     scanint(&cond[79], "2,128,128,136,0,0,8,136,128,0,2,2,");
  117.     scanint(&cond[95], "4,0,0,0,0,1,");
  118.     scanint(&cond[113], "4,0,1,1,");
  119.     scanint(&cond[122], "8,8,8,8,8,8,8,8,8,");
  120.  
  121.     /* initialize object locations */
  122.     setmem(place, (sizeof(int))*MAXOBJ, 0);
  123.     scanint(&place[1], "3,3,8,10,11,0,14,13,94,96,");
  124.     scanint(&place[11], "19,17,101,103,0,106,0,0,3,3,");
  125.     scanint(&place[23], "109,25,23,111,35,0,97,");
  126.     scanint(&place[31], "119,117,117,0,130,0,126,140,0,96,");
  127.     scanint(&place[50], "18,27,28,29,30,");
  128.     scanint(&place[56], "92,95,97,100,101,0,119,127,130,");
  129.  
  130.     /* initialize second (fixed) locations */
  131.     setmem(fixed, (sizeof(int))*MAXOBJ, 0);
  132.     scanint(&fixed[3], "9,0,0,0,15,0,-1,");
  133.     scanint(&fixed[11], "-1,27,-1,0,0,0,-1,");
  134.     scanint(&fixed[23], "-1,-1,67,-1,110,0,-1,-1,");
  135.     scanint(&fixed[31], "121,122,122,0,-1,-1,-1,-1,0,-1,");
  136.     scanint(&fixed[62], "121,-1,");
  137.  
  138.     /* initialize default verb messages */
  139.     scanint(actmsg, "0,24,29,0,33,0,33,38,38,42,14,");
  140.     scanint(&actmsg[11], "43,110,29,110,73,75,29,13,59,59,");
  141.     scanint(&actmsg[21], "174,109,67,13,147,155,195,146,110,13,13,");
  142.  
  143.     /* initialize various flags and other variables */
  144.     setmem(visited, (sizeof(int))*MAXLOC, 0);
  145.     setmem(prop, (sizeof(int))*MAXOBJ, 0);
  146.     setmem(&prop[50], (sizeof(int))*(MAXOBJ-50), 0xff);
  147.     wzdark = closed = closing = holding = detail = 0;
  148.     limit = 100;
  149.     tally = 15;
  150.     tally2 = 0;
  151.     newloc = 3;
  152.     loc = oldloc = oldloc2 = 1;
  153.     knfloc = 0;
  154.     chloc = 114;
  155.     chloc2 = 140;
  156. /*    dloc[DWARFMAX-1] = chloc                */
  157.     scanint(dloc, "0,19,27,33,44,64,114,");
  158.     scanint(odloc, "0,0,0,0,0,0,0,");
  159.     dkill = 0;
  160.     scanint(dseen, "0,0,0,0,0,0,0,");
  161.     clock1 = 30;
  162.     clock2 = 50;
  163.     panic = 0;
  164.     bonus = 0;
  165.     numdie = 0;
  166.     daltloc = 18;
  167.     lmwarn = 0;
  168.     foobar = 0;
  169.     dflag = 0;
  170.     gaveup = 0;
  171.     saveflg = 0;
  172.     return(1);
  173. }
  174.  
  175. /*
  176.     Open advent?.txt files
  177. */
  178. opentxt()
  179. {
  180.     fd1 = fopen("advent1.txt", "r");
  181.     if (!fd1) {
  182.         SerWritef(unhand,"Sorry, I can't open advent1.txt...\n\r");
  183.         exit();
  184.     }
  185.     fd2 = fopen("advent2.txt", "r");
  186.     if (!fd2) {
  187.         SerWritef(unhand,"Sorry, I can't open advent2.txt...\n\r");
  188.         exit();
  189.     }
  190.     fd3 = fopen("advent3.txt", "r");
  191.     if (!fd3) {
  192.         SerWritef(unhand,"Sorry, I can't open advent3.txt...\n\r");
  193.         exit();
  194.     }
  195.     fd4 = fopen("advent4.txt", "r");
  196.     if (!fd4) {
  197.         SerWritef(unhand,"Sorry, I can't open advent4.txt...\n\r");
  198.         exit();
  199.     }
  200. }
  201.  
  202. /*
  203.         save adventure game
  204. */
  205. saveadv()
  206. {
  207.     char    *sptr;
  208.     FILE    *savefd;
  209.     char    username[80];
  210.     int i;
  211.  
  212.      // first add the name of the personal directory, we don't know that yet
  213.      strncpy(username,PU->u_handle,8);
  214.      username[8] = '\0';
  215.     strcat(username, ".adv");
  216.     savefd = fopen(username, "wb");
  217.     if (savefd == NULL) {
  218.         SerWritef(unhand,"Sorry, I can't create the file...%s\n\r", \
  219.                username);
  220.         exit();
  221.     }
  222.  
  223.     putw(turns,savefd);    /* mh 30-Aug-1988 */
  224.     putw(loc,savefd);
  225.     putw(oldloc,savefd);
  226.     putw(oldloc2,savefd);
  227.     putw(newloc,savefd);
  228.     for(i=0;i<MAXLOC;i++) putw(cond[i],savefd);
  229.     for(i=0;i<MAXOBJ;i++) putw(place[i],savefd);
  230.     for(i=0;i<MAXOBJ;i++) putw(fixed[i],savefd);
  231.     for(i=0;i<MAXLOC;i++) putw(visited[i],savefd);
  232.     for(i=0;i<MAXOBJ;i++) putw(prop[i],savefd);
  233.     putw(tally,savefd);
  234.     putw(tally2,savefd);
  235.     putw(limit,savefd);
  236.     putw(lmwarn,savefd);
  237.     putw(wzdark,savefd);
  238.     putw(closing,savefd);
  239.     putw(closed,savefd);
  240.     putw(holding,savefd);
  241.     putw(detail,savefd);
  242.     putw(knfloc,savefd);
  243.     putw(clock1,savefd);
  244.     putw(clock2,savefd);
  245.     putw(panic,savefd);
  246.     for(i=0;i<DWARFMAX;i++) putw(dloc[i],savefd);
  247.     putw(dflag,savefd);
  248.     for(i=0;i<DWARFMAX;i++) putw(dseen[i],savefd);
  249.     for(i=0;i<DWARFMAX;i++) putw(odloc[i],savefd);
  250.     putw(daltloc,savefd);
  251.     putw(dkill,savefd);
  252.     putw(chloc,savefd);
  253.     putw(chloc2,savefd);
  254.     putw(bonus,savefd);
  255.     putw(numdie,savefd);
  256.     putw(object1,savefd);
  257.     putw(gaveup,savefd);
  258.     putw(foobar,savefd);
  259.     putw(saveflg,savefd);
  260.     putw(dbugflg,savefd);
  261.  
  262.     if (fclose(savefd)  ==  -1) {
  263.         SerWritef(unhand,"Sorry, I can't close the file...%s\n\r", \
  264.                username);
  265.         exit();
  266.     }
  267.     SerWritef(unhand,"\n\rYour Adventure session has been saved!\n\r");
  268. }
  269.  
  270. /*
  271.     restore saved game handler
  272. */
  273. restore()
  274. {
  275.     char    username[80];
  276.     FILE    *restfd;
  277.     int    i;
  278.     char    *sptr;
  279.  
  280.  
  281.      // first add the name of the personal directory, we don't know that yet
  282.      strncpy(username,PU->u_handle,8);
  283.      username[8] = '\0';
  284.     strcat(username, ".adv");
  285.  
  286.     restfd = fopen(username, "rb");
  287.     if (restfd == NULL) {
  288.         SerWritef(unhand,"Sorry, I can't open the file...%s\n\r", \
  289.                username);
  290.         exit();
  291.     }
  292.  
  293.     turns=getw(restfd);    /* mh 30-Aug-1988 */
  294.     loc=getw(restfd);
  295.     oldloc=getw(restfd);
  296.     oldloc2=getw(restfd);
  297.     newloc=getw(restfd);
  298.     for(i=0;i<MAXLOC;i++) cond[i]=getw(restfd);
  299.     for(i=0;i<MAXOBJ;i++) place[i]=getw(restfd);
  300.     for(i=0;i<MAXOBJ;i++) fixed[i]=getw(restfd);
  301.     for(i=0;i<MAXLOC;i++) visited[i]=getw(restfd);
  302.     for(i=0;i<MAXOBJ;i++) prop[i]=getw(restfd);
  303.     tally=getw(restfd);
  304.     tally2=getw(restfd);
  305.     limit=getw(restfd);
  306.     lmwarn=getw(restfd);
  307.     wzdark=getw(restfd);
  308.     closing=getw(restfd);
  309.     closed=getw(restfd);
  310.     holding=getw(restfd);
  311.     detail=getw(restfd);
  312.     knfloc=getw(restfd);
  313.     clock1=getw(restfd);
  314.     clock2=getw(restfd);
  315.     panic=getw(restfd);
  316.     for(i=0;i<DWARFMAX;i++) dloc[i]=getw(restfd);
  317.     dflag=getw(restfd);
  318.     for(i=0;i<DWARFMAX;i++) dseen[i]=getw(restfd);
  319.     for(i=0;i<DWARFMAX;i++) odloc[i]=getw(restfd);
  320.     daltloc=getw(restfd);
  321.     dkill=getw(restfd);
  322.     chloc=getw(restfd);
  323.     chloc2=getw(restfd);
  324.     bonus=getw(restfd);
  325.     numdie=getw(restfd);
  326.     object1=getw(restfd);
  327.     gaveup=getw(restfd);
  328.     foobar=getw(restfd);
  329.     saveflg=getw(restfd);
  330.     dbugflg=getw(restfd);
  331.  
  332.         if (fclose(restfd)    ==  -1) {
  333.         SerWritef(unhand,"Warning -- can't close save file...%s\n\r", \
  334.                username);
  335.     }
  336. }
  337.  
  338.  
  339.  
  340.  
  341.