[Date Prev][Date Next][Thread Prev][Thread Next] [Search] [Date Index] [Thread Index]

[MacPerl] FileMaker Pro module



I got FM Pro 4.0 in the mail today.  Ran my glue on it.  I never use FMP really, but I thought others out there might want to play with this.  You need the Mac::Glue module I put online already.

I made one manual change: the open() event originally said it took an AE object, but it made more sense to change that to TEXT, as that is what AppleScript sends (according to Capture AE).

Have fun.  This is very alpha.  I am most interested in your feedback, especially in regards to interface, discrepancies in this module from what reality, etc.

package Mac::Glue::FileMaker_Pro;
use strict;
use vars qw($VERSION $APP %EVENT %CLASS @ISA);
use Mac::Glue;
use Mac::AppleEvents;
use Carp;
@ISA = qw(Mac::Glue);
$VERSION = '0.01';
sub new {
    bless {
        'APP' => $APP, 'EVENT' => \%EVENT, 'CLASS' => \%CLASS, 'SWITCH' => 1
    }, shift
}

$APP = 'FMP3';

%EVENT = (
#	FileMaker Suite
    'find'   => {'class' => 'FMPR', 'event' => 'FIND', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
    'go_to'   => {'class' => 'FMPR', 'event' => 'GOTO', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
#	Required Suite
#	Subset of the Core, Table, and Database suites
    'begin_transaction'   => {'class' => 'misc', 'event' => 'begi', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'class_info'   => {'class' => 'core', 'event' => 'qobj', 'params' => [
                ['----', keyDirectObject(), 'type', 0, 0, 0, 0],
                ['in', 'wrcd', 'intl', 0, 0, 0],
                ]},
    'close'   => {'class' => 'core', 'event' => 'clos', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
    'copy'   => {'class' => 'misc', 'event' => 'copy', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'count'   => {'class' => 'core', 'event' => 'cnte', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 0],
                ['class', 'kocl', 'type', 1, 0, 0],
                ]},
    'create'   => {'class' => 'core', 'event' => 'crel', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ['at', 'insh', 'insl', 0, 0, 0],
                ['with_data', 'data', '****', 0, 0, 0],
                ['with_properties', 'prdt', 'reco', 0, 0, 0],
                ['new', 'kocl', 'type', 1, 0, 0],
                ]},
    'cut'   => {'class' => 'misc', 'event' => 'cut ', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'data_size'   => {'class' => 'core', 'event' => 'dsiz', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 0],
                ['as', 'rtyp', 'type', 0, 0, 0],
                ]},
    'delete'   => {'class' => 'core', 'event' => 'delo', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
    'do_menu'   => {'class' => 'misc', 'event' => 'menu', 'params' => [
                ['----', keyDirectObject(), '****', 1, 0, 0, 1],
                ['menu_named', 'menn', 'TEXT', 0, 0, 0],
                ]},
    'do_script'   => {'class' => 'misc', 'event' => 'dosc', 'params' => [
                ['----', keyDirectObject(), 'TEXT', 1, 0, 0, 1],
                ]},
    'duplicate'   => {'class' => 'core', 'event' => 'clon', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ['to', 'insh', 'insl', 0, 0, 0],
                ]},
    'end_transaction'   => {'class' => 'misc', 'event' => 'endt', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'event_info'   => {'class' => 'core', 'event' => 'gtei', 'params' => [
                ['----', keyDirectObject(), 'type', 1, 0, 0, 0],
                ['in', 'wrcd', 'intl', 0, 0, 0],
                ]},
    'exists'   => {'class' => 'core', 'event' => 'doex', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 0],
                ]},
    'get_data'   => {'class' => 'core', 'event' => 'getd', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 0],
                ['as', 'rtyp', 'type', 0, 1, 0],
                ]},
    'open'   => {'class' => 'aevt', 'event' => 'odoc', 'params' => [
                ['----', keyDirectObject(), 'TEXT', 1, 0, 0, 1],
                ['with_password', 'pPAS', 'TEXT', 0, 0, 0],
                ]},
    'paste'   => {'class' => 'misc', 'event' => 'past', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'print'   => {'class' => 'aevt', 'event' => 'pdoc', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 0],
                ]},
    'quit'   => {'class' => 'aevt', 'event' => 'quit', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'redo'   => {'class' => 'misc', 'event' => 'redo', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
    'save'   => {'class' => 'core', 'event' => 'save', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
    'set_data'   => {'class' => 'core', 'event' => 'setd', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ['to', 'data', '****', 1, 0, 0],
                ]},
    'show'   => {'class' => 'misc', 'event' => 'mvis', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ]},
    'sort'   => {'class' => 'DATA', 'event' => 'SORT', 'params' => [
                ['----', keyDirectObject(), 'obj ', 1, 0, 0, 1],
                ['in_order', 'SRTT', 'sort', 0, 0, 1],
                ['by', 'SRTE', 'obj ', 0, 0, 0],
                ]},
    'undo'   => {'class' => 'misc', 'event' => 'undo', 'params' => [
                ['----', keyDirectObject(), 'null', 0, 0, 0, 1],
                ]},
#	URL Suite
    'getURL'   => {'class' => 'GURL', 'event' => 'GURL', 'params' => [
                ['----', keyDirectObject(), 'TEXT', 1, 0, 0, 0],
                ]},
);

%CLASS = (
#	FileMaker Suite
    'menu'   => {'id' => 'cmnu', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 1],
                ['enabled', 'enbl', 'bool', 0, 0, 1],
                ['ID', 'ID  ', 'shor', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'cmnu' => ['indx', 'name'],
                'cmen' => ['indx', 'name'],
                }},
    'menu_item'   => {'id' => 'cmen', 'properties' => [
                ['item_number', 'itmn', 'shor', 0, 0, 0],
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 1],
                ['enabled', 'enbl', 'bool', 0, 0, 1],
                ['ID', 'ID  ', 'long', 0, 0, 1],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['notify_address', 'pADR', 'targ', 0, 0, 1],
                ['checked', 'pCHK', 'bool', 0, 0, 1],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'menu_items'   => {'id' => 'cmen', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'menus'   => {'id' => 'cmnu', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'request'   => {'id' => 'cRQT', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['ID', 'ID  ', 'doub', 0, 0, 0],
                ['omitted', 'pOMT', 'bool', 0, 0, 1],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'ccel' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                }},
    'requests'   => {'id' => 'cRQT', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
#	Required Suite
#	Subset of the Core, Table, and Database suites
    'FileMaker_script'   => {'id' => 'cSCP', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['ID', 'ID  ', 'doub', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'FileMaker_scripts'   => {'id' => 'cSCP', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'application'   => {'id' => 'capp', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['frontmost', 'pisf', 'bool', 0, 0, 0],
                ['version', 'vers', 'vers', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'cwin' => ['indx', 'name'],
                'cmnu' => ['name', 'indx'],
                'docu' => ['indx', 'name'],
                }},
    'applications'   => {'id' => 'capp', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'cell'   => {'id' => 'ccel', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'TEXT', 0, 0, 0],
                ['formula', 'pfor', 'TEXT', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['protection', 'ppro', 'prtn', 0, 1, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ['lock', 'pLCK', 'lock', 0, 1, 0],
                ['repeat_size', 'pRPS', 'long', 0, 0, 0],
                ['ID', 'ID  ', 'list', 0, 0, 0],
                ['cellValue', 'vlue', 'TEXT', 0, 0, 1],
                ['globalValue', 'pGLL', 'bool', 0, 0, 0],
                ['choices', 'pCHS', 'list', 0, 0, 0],
                ], 'elements' => {
                }},
    'cells'   => {'id' => 'ccel', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'database'   => {'id' => 'cDB ', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['current_layout', 'pCLY', 'obj ', 0, 0, 1],
                ['lock', 'pLCK', 'lock', 0, 1, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['multiuser', 'pMUr', 'bool', 0, 0, 1],
                ['access', 'pACS', 'accs', 0, 1, 0],
                ['current_record', 'pCRW', 'obj ', 0, 0, 1],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'cSCP' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'ctbl' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                }},
    'databases'   => {'id' => 'cDB ', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'document'   => {'id' => 'docu', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['modified', 'imod', 'bool', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'cSCP' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'cDB_' => ['name', 'indx'],
                'cwin' => ['indx', 'name'],
                }},
    'documents'   => {'id' => 'docu', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'field'   => {'id' => 'ccol', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'TEXT', 0, 0, 0],
                ['access', 'pACS', 'accs', 0, 1, 0],
                ['unique_value', 'pUNQ', 'bool', 0, 0, 0],
                ['repeats', 'pRPT', 'enum', 0, 0, 0],
                ['formula', 'pfor', 'TEXT', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['protection', 'ppro', 'prtn', 0, 1, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ['nulls_OK', 'pNLS', 'bool', 0, 0, 0],
                ['lock', 'pLCK', 'lock', 0, 1, 0],
                ['repeat_size', 'pRPS', 'long', 0, 0, 0],
                ['ID', 'ID  ', 'doub', 0, 0, 0],
                ['globalValue', 'pGLL', 'bool', 0, 0, 0],
                ['choices', 'pCHS', 'list', 0, 0, 0],
                ], 'elements' => {
                'ccel' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                }},
    'fields'   => {'id' => 'ccol', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'layout'   => {'id' => 'ctbl', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['lock', 'pLCK', 'lock', 0, 1, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['access', 'pACS', 'accs', 0, 1, 0],
                ['ID', 'ID  ', 'doub', 0, 0, 0],
                ['visible', 'pvis', 'bool', 0, 0, 0],
                ['kind', 'pKND', 'tblt', 0, 1, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['protection', 'ppro', 'prtn', 0, 1, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ], 'elements' => {
                'ccol' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'cRQT' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'crow' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'ccel' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                }},
    'layouts'   => {'id' => 'ctbl', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'record'   => {'id' => 'crow', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['access', 'pACS', 'accs', 0, 1, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['protection', 'ppro', 'prtn', 0, 1, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ['lock', 'pLCK', 'lock', 0, 1, 0],
                ['ID', 'ID  ', 'doub', 0, 0, 0],
                ], 'elements' => {
                'ccel' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                }},
    'records'   => {'id' => 'crow', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
    'window'   => {'id' => 'cwin', 'properties' => [
                ['best_type', 'pbst', 'type', 0, 0, 0],
                ['resizable', 'prsz', 'bool', 0, 0, 0],
                ['name', 'pnam', 'itxt', 0, 0, 0],
                ['has_title_bar', 'ptit', 'bool', 0, 0, 0],
                ['floating', 'isfl', 'bool', 0, 0, 0],
                ['class', 'pcls', 'type', 0, 0, 0],
                ['default_type', 'deft', 'type', 0, 0, 0],
                ['index', 'pidx', 'long', 0, 0, 0],
                ['zoomable', 'iszm', 'bool', 0, 0, 0],
                ['has_close_box', 'hclb', 'bool', 0, 0, 0],
                ['bounds', 'pbnd', 'qdrt', 0, 0, 1],
                ['modal', 'pmod', 'bool', 0, 0, 0],
                ['zoomed', 'pzum', 'bool', 0, 0, 1],
                ['visible', 'pvis', 'bool', 0, 0, 1],
                ], 'elements' => {
                'cDB_' => ['name', 'indx'],
                'cSCP' => ['name', 'indx', 'rele', 'rang', 'test', 'ID  '],
                'docu' => ['name', 'indx'],
                }},
    'windows'   => {'id' => 'cwin', 'properties' => [
                ['class_attributes', 'c@#!', 'type', 0, 0, 0],
                ], 'elements' => {
                }},
#	URL Suite
);

__END__


-- 
Chris Nandor          mailto:pudge@pobox.com         http://pudge.net/
%PGPKey = ('B76E72AD', [1024, '0824090B CE73CA10  1FF77F13 8180B6B6'])

***** Want to unsubscribe from this list?
***** Send mail with body "unsubscribe" to mac-perl-request@iis.ee.ethz.ch