home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / XINIT.C < prev   
C/C++ Source or Header  |  1993-05-06  |  11KB  |  400 lines

  1. #include "vars.h"
  2. #pragma hdrstop
  3. #include <dir.h>
  4. #include <math.h>
  5.  
  6. void far interrupt inlii();
  7. void far interrupt checkai();
  8. void far interrupt plai();
  9. void far interrupt outchri();
  10. void far interrupt outstri();
  11. void far interrupt nli();
  12. void far interrupt pli();
  13. void far interrupt emptyi();
  14. void far interrupt inkeyi();
  15. void far interrupt getkeyi();
  16. void far interrupt inputi();
  17. void far interrupt inputli();
  18. void far interrupt yni();
  19. void far interrupt nyi();
  20. void far interrupt ansici();
  21. void far interrupt oneki();
  22. void far interrupt prti();
  23. void far interrupt mpli();
  24.  
  25. void init()
  26. {
  27.   char s[161],*buf,ch,*ss;
  28.   int i,i1,i2,sm,cp,n,f;
  29.   long l;
  30.   union REGS r;
  31.   struct date today;
  32.   votingrec v;
  33.  
  34.   crttype=peekb(0x0040,0x0049);
  35.   if (crttype==7)
  36.     scrn=MK_FP(0xb000,0x0000);
  37.   else
  38.     scrn=MK_FP(0xb800,0x0000);
  39.   r.h.ah=15;
  40.   int86(0x10,&r,&r);
  41.   sm=r.h.al;
  42.   if (r.h.ah!=80) {
  43.     printf("\n\nYou must be in 80 column mode to run WWIV.\n\n");
  44.     end_bbs(noklevel);
  45.   }
  46.   if ((sm==4) || (sm==5) || (sm==6)) {
  47.     printf("\n\nYou must be in text mode to run WWIV.\n\n");
  48.     end_bbs(noklevel);
  49.   }
  50.   defscreenbottom=(int) peekb(0x0000,0x0484);
  51.   if (defscreenbottom<24)
  52.     defscreenbottom=24;
  53.   if (defscreenbottom>63)
  54.     defscreenbottom=24;
  55.   if ((defscreenbottom!=42) && (defscreenbottom!=49))
  56.     defscreenbottom=24;
  57.   screenbottom=defscreenbottom;
  58.   screenlen=160*(screenbottom+1);
  59.   if (!exist("restore.wwv")) {
  60.     for (i=0; i<screenbottom; i++)
  61.       printf("\n");
  62.     strcpy(s,VERSION_NUMBER);
  63.     strcat(s,", Copyright (c) 1988-1991 by Wayne Bell.\n\n");
  64.     printf(s);
  65.   }
  66.   strcpy(cdir,"X:\\");
  67.   cdir[0]='A'+getdisk();
  68.   getcurdir(0,&(cdir[3]));
  69.   userfile=-1;
  70.   configfile=-1;
  71.   statusfile=-1;
  72.   dlf=-1;
  73.   curlsub=-1;
  74.   curldir=-1;
  75.   setvect(INT_SAVE_21, getvect(0x21));
  76.   oldx=0;
  77.   oldy=0;
  78.   itimer();
  79.   r.h.ah=0x33;
  80.   r.h.al=0x01;
  81.   r.h.dl=0x00;
  82.   int86(0x21,&r,&r);
  83.   agemin=0;
  84.   agemax=255;
  85.   slmin=0;
  86.   slmax=255;
  87.   dslmin=0;
  88.   dslmax=255;
  89.   ressex=0;
  90.   daysmin=0;
  91.   daysmax=9999;
  92.   arres=0;
  93.   darres=0;
  94.   resres=0;
  95.   use_workspace=0;
  96.   input_extern=0;
  97.   chat_file=0;
  98.   do_event=0;
  99.   sysop_alert=0;
  100.   ncn=NULL;
  101.   num_ncn=0;
  102.   global_handle=0;
  103.  
  104.   for (i=0; i<25; i++)
  105.     funcs[i]=NULL;
  106.   funcs[0]=(void far *)inlii;
  107.   funcs[1]=(void far *)checkai;
  108.   funcs[2]=(void far *)plai;
  109.   funcs[3]=(void far *)outchri;
  110.   funcs[4]=(void far *)outstri;
  111.   funcs[5]=(void far *)nli;
  112.   funcs[8]=(void far *)pli;
  113.   funcs[9]=(void far *)emptyi;
  114.   funcs[10]=(void far *)inkeyi;
  115.   funcs[11]=(void far *)getkeyi;
  116.   funcs[12]=(void far *)inputi;
  117.   funcs[13]=(void far *)inputli;
  118.   funcs[14]=(void far *)yni;
  119.   funcs[15]=(void far *)nyi;
  120.   funcs[16]=(void far *)ansici;
  121.   funcs[17]=(void far *)oneki;
  122.   funcs[18]=(void far *)prti;
  123.   funcs[19]=(void far *)mpli;
  124.   setvect(INT_POINT_FUNCS, (void far interrupt (*) (void))funcs);
  125.  
  126.   strcpy(ver_no1,"BBS=");
  127.   strcat(ver_no1,VERSION_NUMBER);
  128.  
  129.   getdate(&today);
  130.   if (today.da_year<1988) {
  131.     printf("You need to set the date & time before running the BBS.\n");
  132.     end_bbs(noklevel);
  133.   }
  134.   configfile=open("CONFIG.DAT",O_RDWR | O_BINARY);
  135.   if (configfile<0) {
  136.     printf("CONFIG.DAT NOT FOUND.\n");
  137.     end_bbs(noklevel);
  138.   }
  139.   read(configfile,(void *) (&syscfg), sizeof(configrec));
  140.   close(configfile);
  141.  
  142.   /* update user info data */
  143.   syscfg.userreclen=sizeof(userrec);
  144.   syscfg.waitingoffset=FP_OFF(&(thisuser.waiting))-FP_OFF(thisuser.name);
  145.   syscfg.inactoffset=FP_OFF(&(thisuser.inact))-FP_OFF(thisuser.name);
  146.  
  147.   /* store the new config.dat file */
  148.   configfile=open("CONFIG.DAT",O_RDWR | O_BINARY);
  149.   write(configfile,(void *) (&syscfg), sizeof(configrec));
  150.   close(configfile);
  151.  
  152.   if (!syscfg.primaryport)
  153.     ok_modem_stuff=0;
  154.  
  155.   strcpy(s,syscfg.tempdir);
  156.   i=strlen(s);
  157.   if (s[0]==0)
  158.     i1=1;
  159.   else {
  160.     if ((s[i-1]=='\\') && (s[i-2]!=':'))
  161.       s[i-1]=0;
  162.     i1=chdir(s);
  163.   }
  164.   if (i1) {
  165.     printf("\nYour temporary directory isn't valid.\n");
  166.     printf("It is now set to: '%s'\n\n",syscfg.tempdir);
  167.     end_bbs(noklevel);
  168.   } else
  169.     cd_to(cdir);
  170.  
  171.   strcpy(s,syscfg.batchdir);
  172.   i=strlen(s);
  173.   if (s[0]==0)
  174.     i1=1;
  175.   else {
  176.     if ((s[i-1]=='\\') && (s[i-2]!=':'))
  177.       s[i-1]=0;
  178.     i1=chdir(s);
  179.   }
  180.   if (i1) {
  181.     printf("\nYour batchdirectory isn't valid.\n");
  182.     printf("It is now set to: '%s'\n\n",syscfg.batchdir);
  183.     end_bbs(noklevel);
  184.   } else
  185.     cd_to(cdir);
  186.  
  187.   sprintf(s,"%sSTATUS.DAT",syscfg.datadir);
  188.   statusfile=open(s,O_RDWR | O_BINARY);
  189.   if (statusfile<0) {
  190.     printf("%s NOT FOUND.\n",s);
  191.     end_bbs(noklevel);
  192.   }
  193.   read(statusfile,(void *)(&status), sizeof(statusrec));
  194.   close(statusfile);
  195.   strcpy(s,VERSION_NUMBER);
  196.   status.wwiv_version=(s[6]-'0')*100+(s[8]-'0')*10+(s[9]-'0');
  197.   gat=(short *) mallocx(2048 * sizeof(short));
  198.   smallist=(smalrec *) mallocx((long)syscfg.maxusers * (long)sizeof(smalrec));
  199.   gfilesec=(gfiledirrec *) mallocx((long) (32 * sizeof(gfiledirrec)));
  200.  
  201.   screensave.scrn1=(char *)mallocx(screenlen);
  202.  
  203.   read_in_file("MENUS.MSG",(menus),30);
  204.   read_in_file("HELP.MSG",(helps),50);
  205.   for (i=0; i<30; i++) {
  206.     menus1[i].stored_as=0L;
  207.     menus1[i].storage_type=255;
  208.     menus2[i].stored_as=0L;
  209.     menus2[i].storage_type=255;
  210.   }
  211.   sprintf(s,"%sMENUSANS.MSG",syscfg.gfilesdir);
  212.   if (exist(s))
  213.     read_in_file("MENUSANS.MSG",(menus1),30);
  214.   sprintf(s,"%sMENUS40.MSG",syscfg.gfilesdir);
  215.   if (exist(s))
  216.     read_in_file("MENUS40.MSG",(menus2),30);
  217.  
  218.   sprintf(s,"%sGFILE.DAT",syscfg.datadir);
  219.   i=open(s,O_RDWR | O_BINARY);
  220.   if (i<0)
  221.     num_sec=0;
  222.   else
  223.     num_sec=read(i,(void *)gfilesec,32*sizeof(gfiledirrec))/sizeof(gfiledirrec);
  224.   close(i);
  225.  
  226.   sprintf(s,"%sNAMES.LST",syscfg.datadir);
  227.   i=open(s,O_RDWR | O_BINARY);
  228.   if (i<0) {
  229.     printf("%s NOT FOUND.\n",s);
  230.     end_bbs(noklevel);
  231.   }
  232.   read(i,(void *) (smallist), (sizeof(smalrec) * status.users));
  233.   close(i);
  234.  
  235.   subboards=(subboardrec *) mallocx(MAX_SUBS*sizeof(subboardrec));
  236.   directories=(directoryrec *)mallocx(MAX_DIRS*sizeof(directoryrec));
  237.  
  238.   sprintf(s,"%sSUBS.DAT",syscfg.datadir);
  239.   i=open(s,O_RDWR | O_BINARY);
  240.   if (i<0) {
  241.     printf("%s NOT FOUND.\n",s);
  242.     end_bbs(noklevel);
  243.   }
  244.   num_subs=(read(i,subboards, (MAX_SUBS*sizeof(subboardrec))))/
  245.            sizeof(subboardrec);
  246.   close(i);
  247.  
  248.   sprintf(s,"%sDIRS.DAT",syscfg.datadir);
  249.   i=open(s,O_RDWR | O_BINARY);
  250.   if (i<0) {
  251.     printf("%s NOT FOUND.\n",s);
  252.     end_bbs(noklevel);
  253.   }
  254.   num_dirs=(read(i,directories, (MAX_DIRS*sizeof(directoryrec))))/
  255.            sizeof(directoryrec);
  256.   close(i);
  257.  
  258.   chains=(chainfilerec *) mallocx(50 * sizeof(chainfilerec));
  259.   numextrn=0;
  260.   numchain=0;
  261.   numed=0;
  262.   sprintf(s,"%sCHAINS.DAT",syscfg.datadir);
  263.   i=open(s,O_RDWR | O_BINARY);
  264.   if (i>0) {
  265.     numchain=(read(i,(void *)chains, 50*sizeof(chainfilerec)))/sizeof(chainfilerec);
  266.     numchain=numchain;
  267.     close(i);
  268.   }
  269.   sprintf(s,"%sMODEM.DAT",syscfg.datadir);
  270.   i=open(s,O_RDWR | O_BINARY);
  271.   if (i>0) {
  272.     l=filelength(i);
  273.     modem_i = mallocx(l);
  274.     read(i,modem_i, (unsigned) l);
  275.     close(i);
  276.   } else {
  277.     printf("\nRun INIT.EXE to convert modem data.\n\n");
  278.     end_bbs(noklevel);
  279.   }
  280.  
  281.   sprintf(s,"%sNEXTERN.DAT",syscfg.datadir);
  282.   i=open(s,O_RDWR | O_BINARY);
  283.   if (i>0) {
  284.     l=filelength(i);
  285.     if (l>15*sizeof(newexternalrec))
  286.       l=15*sizeof(newexternalrec);
  287.     externs=mallocx(l+10);
  288.     numextrn=(read(i,(void *)externs, (unsigned) l))/sizeof(newexternalrec);
  289.     close(i);
  290.   } else
  291.     numextrn=0;
  292.  
  293.  
  294.   sprintf(s,"%sEDITORS.DAT",syscfg.datadir);
  295.   i=open(s,O_RDWR | O_BINARY);
  296.   if (i>0) {
  297.     l=filelength(i);
  298.     if (l>10*sizeof(editorrec))
  299.       l=10*sizeof(editorrec);
  300.     editors=mallocx(l+10);
  301.     numed=(read(i,(void *)editors, (unsigned) l))/sizeof(editorrec);
  302.     numed=numed;
  303.     close(i);
  304.   }
  305.   batch=mallocx(MAX_BATCH * sizeof(batchrec));
  306.  
  307.   read_user(1,&thisuser);
  308.   if (thisuser.inact & inact_deleted)
  309.     fwaiting=0;
  310.   else
  311.     fwaiting=thisuser.waiting;
  312.   sl1(2,status.date1);
  313.   if (ok_modem_stuff) {
  314.     initport(syscfg.primaryport);
  315.     do_result(&(modem_i->defl));
  316.   }
  317.   if (syscfg.sysconfig & sysconfig_no_local)
  318.     topdata=0;
  319.   else
  320.     topdata=2;
  321.   ss=getenv("PROMPT");
  322.   strcpy(newprompt,"PROMPT=WWIV: ");
  323.   if (ss)
  324.     strcat(newprompt,ss);
  325.   else
  326.     strcat(newprompt,"$P$G");
  327.   sprintf(dszlog,"%s\\WWIVDSZ.LOG",cdir);
  328.   sprintf(s,"DSZLOG=%s",dszlog);
  329.   i=0;
  330.   while (environ[i]!=NULL) {
  331.     if (strncmp(environ[i],"PROMPT=",7)==0)
  332.       xenviron[i]=newprompt;
  333.     else
  334.       if (strncmp(environ[i],"DSZLOG=",7)==0)
  335.         xenviron[i]=strdup(s);
  336.       else
  337.         xenviron[i]=environ[i];
  338.     ++i;
  339.   }
  340.   if (!getenv("DSZLOG"))
  341.     xenviron[i++]=strdup(s);
  342.   if (!ss)
  343.     xenviron[i++]=newprompt;
  344.   xenviron[i++]=ver_no1;
  345.   xenviron[i]=NULL;
  346.   for (i=0; i<20; i++)
  347.     questused[i]=0;
  348.   sprintf(s,"%sVOTING.DAT",syscfg.datadir);
  349.   f=open(s,O_RDWR | O_BINARY);
  350.   if (f>0) {
  351.     n=(int) (filelength(f) / sizeof(votingrec)) -1;
  352.     for (i=0; i<n; i++) {
  353.       lseek(f,(long) i * sizeof(votingrec),SEEK_SET);
  354.       read(f,(void *)&v,sizeof(votingrec));
  355.       if (v.numanswers)
  356.         questused[i]=1;
  357.     }
  358.     close(f);
  359.   }
  360.   if (syscfg.sysconfig & sysconfig_high_speed)
  361.     high_speed=1;
  362.   else
  363.     high_speed=0;
  364.   if (syscfg.sysconfig & sysconfig_flow_control)
  365.     flow_control=1;
  366.   else
  367.     flow_control=0;
  368.   time_event=((double)syscfg.executetime)*60.0;
  369.   last_time=time_event-timer();
  370.   if (last_time<0.0)
  371.     last_time+=24.0*3600.0;
  372.   do_event=0;
  373.   if (status.callernum!=65535) {
  374.     status.callernum1=(long)status.callernum;
  375.     status.callernum=65535;
  376.     save_status();
  377.   }
  378.   msgs=(postrec *) mallocx((long)(255 * sizeof(postrec)));
  379.   read_bbs_list_index();
  380.   frequent_init();
  381.   read_contacts();
  382.   if (!restoring_shrink && !already_on) {
  383.     remove_from_temp("*.*", syscfg.tempdir, 1);
  384.     remove_from_temp("*.*", syscfg.batchdir, 1);
  385.     imodem(1);
  386.     cleanup_net();
  387.   }
  388.   lecho=ok_local();
  389.   daylight=0;
  390.  
  391.   status.resx[0]=8;/*grey*/
  392.   status.resx[1]=6;/*Brown*/
  393.   status.resx[2]=4;/*low intensity red(not flashing)*/
  394.   status.resx[3]=1;/*low intensity blue*/
  395.   status.resx[4]=12;/*high intensity red(not flashing)*/
  396.   status.resx[5]=3;/*low intensity cyan*/
  397.   status.resx[6]=10;/*High intensity green*/
  398.   status.resx[7]=13;/*high intensity purple*/
  399. }
  400.