home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / sysext / init / bootswit.sit / Bootswitch.c next >
C/C++ Source or Header  |  1991-06-05  |  3KB  |  111 lines

  1. /* Written by Don Gillies (gillies@cs.uiuc.edu)
  2.  *
  3.  * bootswitch.c -- the boot switch program
  4.  * this INIT treats your CAPS LOCK keep like a boot-time switch on the macintosh.
  5.  * if the CAPS LOCK key is down when the machine boots, then the init takes
  6.  * a resource in the file "Finder Startup" and makes it accessible to the 
  7.  * finder so that it will run when the time comes.  if the CAPS LOCK key is 
  8.  * up, then the finder startup will be skipped.
  9.  */
  10.  
  11. /* DETAILED INFORMATION FOR USERS OF THIS INIT:
  12.  *
  13.  * Instructions: 
  14.  *
  15.  *        BASIC USE (turning a set of startup files on/off)
  16.  *
  17.  *    (1) Put this Init in your System Folder.
  18.  *    (2) Use the "Set Startup" menu in system 4.x, 5.x, or 6.x
  19.  *        to specify some startup file(s) in multifinder.
  20.  *    (3) Reboot macintosh.  Notice that the startup file(s) run.
  21.  *    (4) Depress caps-lock key, reboot macintosh.  Notice that
  22.  *        the startup file(s) DO NOT run.
  23.  *
  24.  *        ADVANCED USE (selecting between two startup sets)
  25.  *
  26.  *    (1) Put this INIT in your System Folder
  27.  *  (2) Use the "Set Startup" item in the "Special" menu in system
  28.  *        4.x, 5.x, or 6.x to specify SET 1 of startup file(s) in multifinder
  29.  *  (3) Depress caps-lock key, reboot the macintosh.  Now 
  30.  *        specify SET 2 by selecting the appropriate icons and
  31.  *        clicking on "Set Startup" in multifinder
  32.  *    (4) Now the system behaves as follows at boot time:
  33.  *            CAPS LOCK UP        - start SET 1
  34.  *            CAPS LOCK DEPRESSED - start SET 2
  35.  *    (5) To erase startup selections, drag the "Finder Startup"
  36.  *        file to the trash
  37.  */
  38.  
  39. #include <MacTypes.h>
  40. #include <OSUtil.h>
  41. #include <EventMgr.h>
  42. #include <SetUpA4.h>
  43. #define    NIL    0
  44.  
  45. Str255 fStartup = "\pFinder Startup";
  46. ResType rType = 0x666E6472;  /* "fndr" */
  47. int r0 = 0;
  48. int r1 = 1;
  49. int r2 = 2;
  50.  
  51. /* how it works.
  52.  *        R E S O U R C E   S H U F F L I N G
  53.  *        "Finder Startup" file, "fndr" resource
  54.  *
  55.  *     1 resource in file        2 resources in file
  56.  *    caps-lock 0 -> 2        caps-lock    0 -> 2
  57.  *                                        1 -> 0
  58.  *
  59.  *    no key    2 -> 0        no key        0 -> 1
  60.  *                                        2 -> 0
  61.  */
  62.  
  63. void main() 
  64. {    
  65.     char data[18];
  66.     int refNum, choices;    /* resource file reference number */
  67.     Handle handle0, handle1, handle2;
  68.  
  69.     RememberA0();
  70.     SetUpA4();
  71.  
  72.     if(Button()) SysBeep(10);    /*    Beep, if install was cancelled    */
  73.     else if ((refNum = OpenResFile(fStartup)) != -1) /* Ready to modify resource file */
  74.     {
  75.         GetKeys(&data);
  76.         
  77.         handle0 = GetResource(rType, r0);
  78.         handle1 = GetResource(rType, r1);
  79.         handle2 = GetResource(rType, r2);
  80.         
  81.         choices = (handle0 != NIL) + (handle1 != NIL) + (handle2 != NIL);
  82.         
  83.         if (refNum != 1 && (data[7] & 02) != NIL) {                    /* CAPS LOCK DOWN */
  84.             if (handle0 != NIL && handle1 != NIL) {                                            /* two startups */
  85.                 SetResInfo(handle0, r2, 0);
  86.                 SetResInfo(handle1, r0, 0);
  87.                 ChangedResource(handle0);
  88.                 ChangedResource(handle1);
  89.             }
  90.             else if (choices == 1 && handle0 != NIL) {                
  91.                 SetResInfo(handle0, r2, 0);
  92.                 ChangedResource(handle0);
  93.             }
  94.         }
  95.         else {                                                        /* CAPS LOCK UP */
  96.             if (handle0 != NIL && handle2 != NIL) {                    
  97.                 SetResInfo(handle0, r1, 0);                            /*  0 -> 1  */
  98.                 SetResInfo(handle2, r0, 0);                                
  99.                 ChangedResource(handle0);
  100.                 ChangedResource(handle2);
  101.             }
  102.             else if (choices == 1 && handle2 != NIL) {                /*  0 -> 2  */
  103.                 SetResInfo(handle2, r0, 0);
  104.                 ChangedResource(handle2);
  105.             }
  106.         }
  107.         CloseResFile(refNum);
  108.     }    
  109.     RestoreA4();
  110. }
  111.