At 9:16 am -0500 20/03/01, Morbus Iff wrote:

>I can throw in a dummy window and run this script, however. Of course, the
>menus never work (why don't they work? sniff, sniff), and the error appears
>when I stop the script (as per END).
>
>What am I doing wrong?

I suspect the main reason is you have not got an "Editor" window up 
your MenuBar? I get the same error you do on running your script for 
that reason.

One of the difficulties with altering the MenuBar is that you can 
never be sure what Menus (particularly the external editor) are up on 
any particular machine. You really have to ask the machine. You might 
find the following script helpful:

     #!perl
     use Mac::Menus;

     for $m (128..65535) {
         $menuHandle = GetMenuHandle($m);
         if($menuHandle) {
             $str = getBits($menuHandle->enableFlags);
             push @list, join(' ', $m, $str, $menuHandle->menuData);
          }
     }

     sub getBits {
         my ($n) = @_;
         my $out;
         for (0..31) {
             $out .= ($n & 1);
             $n = $n >> 1;
         }
         $out
     }

     foreach (@list) {print "$_\n" }

With your script, after removing references to ID==133 and adjusting 
the order of the Menus to suit, it seems to work.

You need a 'pause' of some kind at the end to view the new MenuBar -- 
I have added a 'getc' just as a quick expedient.

HTH,

Alan Fry

-------------

  #!/usr/bin/perl
  use Mac::Menus;
  use strict;

  my $oldEdit = GetMenuHandle(130);
  my $oldFile = GetMenuHandle(129);
  #my $oldEditor = GetMenuHandle(133);   # absent?

  my $newMenu = new_menu();
  my $newEdit = $$newMenu[0]->{menu};
  my $newFile = $$newMenu[1]->{menu};
  #DeleteMenu(133);                     # assume not present
  DeleteMenu(130);
  DeleteMenu(129);
  InsertMenu $newEdit, 131;             # before 'Window' (was 133)
  InsertMenu $newFile, 2048;
  DrawMenuBar();
  DisableItem($newEdit, 1);
  DisableItem($newEdit, 2);
  DisableItem($newEdit, 3);
  DisableItem($newEdit, 4);

  sub new_menu {

    my $newFile = MacMenu->new ( 2049, 'newFile', ( # 'new' added for clarity
                                 ['Quit',   \&file_menu, 'Q'] ) );
    my $newEdit = MacMenu->new ( 2048, 'newEdit', ( # 'new added for clarity
                                 ['Cut',   \&edit_menu, 'X'],
                                                 ['Copy',  \&edit_menu, 'C'],
                                                 ['Paste', \&edit_menu, 'V'],
                                                 ['Clear', \&edit_menu,  ''],
                                               )
                                );

    return [$newEdit, $newFile];
  }

  sub edit_menu { my ($menu, $item) = @_; 1; }

  sub file_menu {
    my ($menu, $item) = @_;
    if ($menu == 2049 and $item == 1) { exit; }
  }

  sub restore_menu_bar {
    DeleteMenu(2048);
    DeleteMenu(2049);
    InsertMenu($oldEdit,   131);         #  before Window (was 133)
    InsertMenu($oldFile,   130);
   #InsertMenu($oldEditor, 134);         # omit
    DrawMenuBar();
  }
getc;     # pause to admire handiwork -- CR to end
  END { restore_menu_bar(); }

  __END__

Reply via email to