home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / code / ras_swit.sit < prev    next >
Text File  |  1988-06-20  |  2KB  |  111 lines

  1. 18-Jun-88 14:45:45-MDT,2362;000000000000
  2. Return-Path: <u-lchoqu%sunset@cs.utah.edu>
  3. Received: from cs.utah.edu by SIMTEL20.ARPA with TCP; Sat, 18 Jun 88 14:45:41 MDT
  4. Received: by cs.utah.edu (5.54/utah-2.0-cs)
  5.     id AA22675; Sat, 18 Jun 88 14:45:41 MDT
  6. Received: by sunset.utah.edu (5.54/utah-2.0-leaf)
  7.     id AA24815; Sat, 18 Jun 88 14:45:39 MDT
  8. Date: Sat, 18 Jun 88 14:45:39 MDT
  9. From: u-lchoqu%sunset@cs.utah.edu (Lee Choquette)
  10. Message-Id: <8806182045.AA24815@sunset.utah.edu>
  11. To: rthum@simtel20.arpa
  12. Subject: Switch.ras
  13.  
  14. Program Switch;
  15.  
  16. (*
  17.   Switch
  18.    Written By Scott Gillespie
  19.     With the Rascal Development System
  20.  
  21.   Desk Accessory which switches the Finder name in low memory.
  22. *)
  23.  
  24. Uses __ToolTraps, __QuickDraw, __OSTraps,
  25. (*$U+*) uOSIntf ;
  26.  
  27. Link __NoSysCall, __OSTraps :;
  28.  
  29. Const
  30.   MenuID = -2001;
  31.   FNameLoc = $2E0L; (* Location of Finder Name in low memory *)
  32.   BootDrive = $210L;(* System Vref location in low memory *)
  33.  
  34. Type
  35.   Fptr = ^Byte[16];
  36.  
  37. Var
  38.   Menu: PtrL;
  39.   AppName: Byte[256];
  40.   Param: ParamBlockRec;
  41.  
  42. PROCEDURE getfinfo(ind,vref: integer; err: ^OSErr);
  43. {
  44.       Param.IONamePtr := @AppName;
  45.       Param.IOVRefNum := vref;
  46.       Param.IOFDirIndex := ind;
  47.       Param.IOVersNum := 0;
  48.       err^ := PBGetFInfo(Param,False);
  49. };
  50.  
  51. Proc Make(Name: Byte[16]);  (* Put a new name in low mem *)
  52. {
  53.   If Name[0]>15 Then Return; (* There's only room for 15 characters *)
  54.   Fptr(FNameLoc)^ := Name;
  55. };
  56.  
  57. Proc SetUpMenu();
  58. Var
  59.  Err,i: OSErr;
  60.  Appl: Longint;
  61. {
  62.   Appl := PtrL(" APPL"+2)^;
  63.   Menu := NewMenu(MenuID,"Switch");
  64.   InsertMenu(Menu,0);
  65.   AppendMenu(Menu,"Finder");
  66.   Loop(,i:=1,++i,) {            (* Get all of the applications on
  67.                        the System disk *)
  68.     GetFInfo(i,Ptrw(BootDrive)^,@Err);
  69.     If Err Then Break;                  (* Assume the index is too high, so
  70.                        no more files to check *)
  71.     If Appl = PtrL(@Param.ioFlFndrInfo.FDType)^ Then
  72.       AppendMenu(Menu,AppName);
  73.     };
  74.  
  75.   DrawMenuBar();
  76. };
  77.  
  78. Proc _Init();
  79. {
  80.   MoveTo(0,2);
  81.   Writeln();
  82.  
  83.   SetUpMenu();
  84.  
  85.   DrawString(FnameLoc);
  86. };
  87.  
  88. Proc _Halt();
  89. {
  90.   DeleteMenu(MenuID);
  91.   DisposeMenu(Menu);
  92.   DrawMenuBar();
  93. };
  94.  
  95. Proc _Menu(id,item: Integer);
  96. Var P: Ptrl;
  97. {
  98.   GetPort(@P);
  99.   SelectWindow(P);
  100.  
  101.   GetItem(Menu,item,@AppName);
  102.   Make(AppName);
  103.  
  104.   Writeln();
  105.   DrawString(FnameLoc);
  106.  
  107.   ReqHalt();
  108.   HiliteMenu(0);
  109. };
  110.  
  111.