home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 267.img / RESIDNTC.ZIP / DEMOS.ZIP / RES_HOLD.C < prev    next >
Text File  |  1990-03-07  |  4KB  |  201 lines

  1. /* RES_HOLD.C */
  2.   
  3. #include "stdlib.h"
  4. #include "tsr.h"
  5. #include "resproto.h"
  6. #include "stdio.h"
  7. #include "string.h"
  8. #include "conio.h"
  9. #include "isr.h"
  10. #include    "dos.h"
  11.   
  12.   
  13. #ifdef M_I86        /* Microsoft internal define , otherwise Turbo C */
  14. #define disable _disable
  15. #define enable _enable
  16. #define getvect _dos_getvect
  17. #define setvect _dos_setvect
  18. #define inportb inp
  19. #endif
  20.   
  21. /* scan code for H key used with CTRL here */
  22. #define SCAN_H 0x23
  23.   
  24. /* window save buffer declared globally */
  25. char  scrnbuf[4000];
  26. unsigned *share_vecs_ptr;
  27.   
  28. char default_drive[128] = "C:\\";
  29. char drive_str[80] = "Temporary Storage Drive = ";
  30. char err[40]=  "ERROR IN LOAD: ";
  31.   
  32. void resprog(void);
  33. int holdev(char *path, int mem, char *prg);
  34.   
  35. void main(int argc, char **argv)
  36. {
  37. int  rc;           /* return code variable */
  38.   
  39. /* declare function to execute when we get
  40.    control in TSR (when hotkey is hit)  */
  41.   
  42. /* unique signature function number for
  43.    identification in tsrloaded()  */
  44. unsigned int r_hello = 0x1261;
  45.   
  46. if(argc > 1)
  47.     {
  48.     if((argv[1][0] == 'U' || argv[1][0] == 'u') && argv[1][1] == '\0')
  49.         {
  50.         if (!tsrloaded(r_hello))
  51.             {
  52.             puts("Program Not Loaded!");
  53.             exit(1);
  54.             }
  55.         else
  56.             {
  57.             rc = tsrfree(r_hello,1);
  58.             if(rc == 0)
  59.                 {
  60.                 puts("Program Unloaded!");
  61.                 exit(0);
  62.                 }
  63.             else
  64.                 {
  65.                 puts("Error Unloading");
  66.                 exit(1);
  67.                 }
  68.             }
  69.         }else   /* reach here to change default drive */
  70.         {
  71.         strcpy(default_drive,argv[1]);
  72.         }
  73.     }
  74.   
  75.   
  76.   
  77. /* test if our TSR is already loaded */
  78. if (!tsrloaded(r_hello))
  79.     {
  80.   
  81.     save_ints_before();
  82.   
  83.     if ((rc = inittsr(RIGHT_SHIFT, SCAN_H, resprog,
  84.         20, r_hello, SIG, (void far *)&share_vecs_ptr)) != 0)
  85.         {
  86.         puts("Could Not Load. ");
  87.         exit(1);
  88.         }
  89.     }
  90. else
  91.     puts("Already Loaded!");
  92. }
  93.   
  94. /* this function gets control when popped up */
  95. void resprog()
  96. {
  97. int page;               /* video page */
  98. int mode;               /* video mode */
  99. int i;
  100. char retcodes[2];
  101. int *x;
  102. char buf[80];
  103. /* retrieve video mode and video page */
  104. getvmod(&mode,&page);
  105.   
  106. x = (int *) retcodes;
  107.   
  108. /* see if we are in 80 column text modes */
  109. if ( mode != 2 && mode != 3 && mode != 7 )
  110.     {
  111.     putch(7);    /* if yes, beep and exit */
  112.     return;
  113.     }
  114.   
  115. /* save screen */
  116. savwindo(0,0,24,79,scrnbuf);
  117. savcur();
  118.   
  119. save_ints_after();
  120.   
  121. menu:
  122.   
  123.         /*  clear a window in reverse video */
  124. scroll_vid(0,0,7,10,28,14,60,1);
  125.   
  126. loc_cur(11,31);   /* locate cursor in window */
  127. puts("      Hit Q to Quit       ");
  128. loc_cur(12,31);   /* locate cursor in window */
  129. puts("Enter command to execute: ");
  130. loc_cur(13,31);   /* locate cursor in window */
  131. puts("                          ");
  132. loc_cur(13,31);   /* locate cursor in window */
  133.   
  134. gets( buf );
  135.   
  136. if(buf[0] == '\0')
  137.     {
  138.     scroll_vid(0,7,0,0,0,24,79,0);  /* clear screen */
  139.     loc_cur(0,0);
  140.     puts("Loading a DOS SHELL - Type 'EXIT' to return");
  141.     }
  142.   
  143. if(buf[0] == 'q' || buf[0] =='Q')
  144.     {
  145.     if(buf[1] == '\0')
  146.         {
  147.         goto noholdev;
  148.         }
  149.     }
  150.   
  151. scroll_vid(0,7,0,0,0,24,79,0);  /* clear screen */
  152. loc_cur(0,0);
  153.   
  154. *x = holdev(default_drive,0, buf);
  155.   
  156. if(*x != 0)
  157.     {
  158.     putch(7);
  159.     scroll_vid(0,0,7,10,28,14,60,1);
  160.   
  161.     loc_cur(11,31);   /* locate cursor in window */
  162.     itoa(*x,buf,16);
  163.      i = strlen(err);
  164.      strcat(err,buf);
  165.     puts(err);
  166.      err[i] = '\0';     /* reset err length before number */
  167.     loc_cur(12,31);   /* locate cursor in window */
  168.     puts("Hit any key to resume");
  169.     getch();
  170.     goto menu;
  171.     }
  172.   
  173. noholdev:
  174.   
  175. restore_ints_after();
  176.   
  177.   
  178. rstwindo(0,0,24,79,scrnbuf);
  179. rstcur();
  180.   
  181. return;
  182. }
  183.   
  184. void tsrpre()
  185. {
  186.     scroll_vid(0,7,0,0,0,24,79,0);  /* clear screen */
  187.     loc_cur(0,0);
  188.     puts("Hold Everything! (tm) TSR Demonstration");
  189.     puts("");
  190.     puts("       by South Mountain Software");
  191.     puts("");
  192.     puts("Program Loaded - Hit RIGHT_SHIFT-H to pop it up");
  193.     puts("");
  194.      puts("Type \"RES_HOLD U\" to UNLOAD this TSR");
  195.     puts("");
  196.      strcat(drive_str,default_drive);
  197.     puts(drive_str);
  198. }
  199.   
  200.   
  201.