maclab@reed.UUCP (S.Gillespie/Mac Dev. Lab) (11/02/85)
Program Switch;
(*
Switch
Written By Scott Gillespie
With the Rascal Development System
Desk Accessory which switches the Finder name in low memory.
*)
Uses __ToolTraps, __QuickDraw, __OSTraps,
(*$U+*) uOSIntf ;
Link __NoSysCall, __OSTraps :;
Const
MenuID = -2001;
FNameLoc = $2E0L; (* Location of Finder Name in low memory *)
BootDrive = $210L;(* System Vref location in low memory *)
Type
Fptr = ^Byte[16];
Var
Menu: PtrL;
AppName: Byte[256];
Param: ParamBlockRec;
PROCEDURE getfinfo(ind,vref: integer; err: ^OSErr);
{
Param.IONamePtr := @AppName;
Param.IOVRefNum := vref;
Param.IOFDirIndex := ind;
Param.IOVersNum := 0;
err^ := PBGetFInfo(Param,False);
};
Proc Make(Name: Byte[16]); (* Put a new name in low mem *)
{
If Name[0]>15 Then Return; (* There's only room for 15 characters *)
Fptr(FNameLoc)^ := Name;
};
Proc SetUpMenu();
Var
Err,i: OSErr;
Appl: Longint;
{
Appl := PtrL(" APPL"+2)^;
Menu := NewMenu(MenuID,"Switch");
InsertMenu(Menu,0);
AppendMenu(Menu,"Finder");
Loop(,i:=1,++i,) { (* Get all of the applications on
the System disk *)
GetFInfo(i,Ptrw(BootDrive)^,@Err);
If Err Then Break; (* Assume the index is too high, so
no more files to check *)
If Appl = PtrL(@Param.ioFlFndrInfo.FDType)^ Then
AppendMenu(Menu,AppName);
};
DrawMenuBar();
};
Proc _Init();
{
MoveTo(0,2);
Writeln();
SetUpMenu();
DrawString(FnameLoc);
};
Proc _Halt();
{
DeleteMenu(MenuID);
DisposeMenu(Menu);
DrawMenuBar();
};
Proc _Menu(id,item: Integer);
Var P: Ptrl;
{
GetPort(@P);
SelectWindow(P);
GetItem(Menu,item,@AppName);
Make(AppName);
Writeln();
DrawString(FnameLoc);
ReqHalt();
HiliteMenu(0);
};