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

  1. #include "vars.h"
  2. #pragma hdrstop
  3. #include <process.h>
  4. #include <dir.h>
  5. #define READ(x) read(f,&(x),sizeof(x))
  6. #define WRITE(x) write(f,&(x),sizeof(x))
  7.  
  8. int restore_data(char *s)
  9. {
  10.   int f,stat;
  11.  
  12.   f=open(s,O_RDONLY | O_BINARY);
  13.   if (f<0)
  14.     return(-1);
  15.   READ(stat);
  16.   READ(oklevel);
  17.   READ(noklevel);
  18.   READ(ooneuser);
  19.   READ(no_hangup);
  20.   READ(ok_modem_stuff);
  21.   READ(topdata);
  22.   READ(last_time_c);
  23.   READ(sysop_alert);
  24.   READ(do_event);
  25.   if (stat) {
  26.     READ(andwith);
  27.     READ(usernum);
  28.     READ(chatcall);
  29.     READ(chatreason);
  30.     READ(timeon);
  31.     READ(extratimecall);
  32.     READ(curspeed);
  33.     READ(modem_speed);
  34.     READ(com_speed);
  35.     READ(modem_flag);
  36.     READ(cursub);
  37.     READ(curdir);
  38.     READ(curdloads);
  39.     READ(msgreadlogon);
  40.     READ(nscandate);
  41.     READ(mailcheck);
  42.     READ(smwcheck);
  43.     READ(use_workspace);
  44.     READ(using_modem);
  45.     READ(last_time);
  46.     READ(fsenttoday);
  47.     READ(global_xx);
  48.     READ(xtime);
  49.     READ(xdate);
  50.     READ(incom);
  51.     READ(outcom);
  52.     READ(global_handle);
  53.     READ(actsl);
  54.     if (global_handle) {
  55.       global_handle=0;
  56.       set_global_handle(1);
  57.     }
  58.     read_user(usernum,&thisuser);
  59.     useron=1;
  60.     changedsl();
  61.     topscreen();
  62.     set_baud(com_speed);
  63.     if (modem_flag & flag_fc)
  64.       flow_control = 1;
  65.   }
  66.   close(f);
  67.   unlink(s);
  68.   unlink("stat.wwv");
  69.   return(stat);
  70. }
  71.  
  72. void save_state(char *s, int state,int ctc)
  73. {
  74.   int f;
  75.  
  76.   save_status();
  77.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  78.   if (f<0)
  79.     return;
  80.   WRITE(state);
  81.   WRITE(oklevel);
  82.   WRITE(noklevel);
  83.   WRITE(ooneuser);
  84.   WRITE(no_hangup);
  85.   WRITE(ok_modem_stuff);
  86.   WRITE(topdata);
  87.   WRITE(last_time_c);
  88.   WRITE(sysop_alert);
  89.   WRITE(do_event);
  90.   WRITE(andwith);
  91.   WRITE(usernum);
  92.   WRITE(chatcall);
  93.   WRITE(chatreason);
  94.   WRITE(timeon);
  95.   WRITE(extratimecall);
  96.   WRITE(curspeed);
  97.   WRITE(modem_speed);
  98.   WRITE(com_speed);
  99.   WRITE(modem_flag);
  100.   WRITE(cursub);
  101.   WRITE(curdir);
  102.   WRITE(curdloads);
  103.   WRITE(msgreadlogon);
  104.   WRITE(nscandate);
  105.   WRITE(mailcheck);
  106.   WRITE(smwcheck);
  107.   WRITE(use_workspace);
  108.   WRITE(using_modem);
  109.   WRITE(last_time);
  110.   WRITE(fsenttoday);
  111.   WRITE(global_xx);
  112.   WRITE(xtime);
  113.   WRITE(xdate);
  114.   WRITE(incom);
  115.   WRITE(outcom);
  116.   WRITE(global_handle);
  117.   WRITE(actsl);
  118.   set_global_handle(0);
  119.   close(f);
  120.   f=open("stat.wwv",O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  121.   if (f<0)
  122.     return;
  123.   WRITE(incom);
  124.   WRITE(outcom);
  125.   WRITE(thisuser);
  126.   WRITE(flow_control);
  127.   WRITE(async_irq);
  128.   WRITE(com_speed);
  129.   WRITE(base);
  130.   WRITE(andwith);
  131.   WRITE(ctc);
  132.   WRITE(defscreenbottom);
  133.   WRITE(ok_modem_stuff);
  134.   close(f);
  135. }
  136.  
  137. void do_it_1(char *cl)
  138. {
  139.   int i,i1,l;
  140.   char *ss,*ss1;
  141.   char t[81];
  142.  
  143.   sl1(1,"");
  144.   ss=cl;
  145.   while ((*ss) && (*ss!=' '))
  146.     ++ss;
  147.   if (*ss==' ') {
  148.     *ss=0;
  149.     ss++;
  150.   }
  151.   ss1=(char far *) getvect(INT_SHRINK);
  152.   if (ok_modem_stuff)
  153.     closeport();
  154.   close_user();
  155.   *ss1=1;
  156.   ss1++;
  157.   strcpy(ss1,searchpath(cl));
  158.   ss1=MK_FP(FP_SEG(ss1),0x0080);
  159.   strcpy(t," ");
  160.   strcat(t,ss);
  161.   strcat(t,"\r");
  162.   *ss1=strlen(t)-1;
  163.   ++ss1;
  164.   strcpy(ss1,t);
  165.   exit(0);
  166. }
  167.  
  168. void shrink_out(char *command, int state, int intercept,int ctc,int ccc)
  169. {
  170.   char s[81],s1[10],*ss1;
  171.   int ok_shrink;
  172.  
  173.   ok_shrink=1;
  174.   ss1=(char far *) getvect(INT_SHRINK);
  175.   if (*ss1) {
  176.     ok_shrink=0;
  177.     nl();
  178.     pl("Can't shrink: No BBS.COM");
  179.     nl();
  180.   }
  181.   if (!searchpath("RETURN.EXE")) {
  182.     ok_shrink=0;
  183.     nl();
  184.     pl("Can't shrink: No RETURN.EXE");
  185.     nl();
  186.   }
  187.   if (ok_shrink) {
  188.     if (state) {
  189.       write_user(usernum,&thisuser);
  190.       if (state>1)
  191.         thisuser.sysstatus &= ~sysstatus_pause_on_page;
  192.     }
  193.     save_state("restore.wwv",state,ctc);
  194.     sprintf(s,"RETURN.EXE %d %d %s",intercept,ccc,command);
  195.     set_protect(0);
  196.     do_it_1(s);
  197.   } else {
  198.     if (intercept)
  199.       full_external(command,ctc,ccc);
  200.     else
  201.       do_remote(command,ccc);
  202.   }
  203. }
  204.