IBM, que significa Interface Between Macros, define um padrão de comunicação entre macros. Essa interface foi concebida originalmente para realizar a integração dos módulos do framework Modular. Porém desde então a ideia vem sendo aperfeiçoada para atender a necessidades do grupo Macrosoft.
Este documento é dividido em duas partes:
Logo depois de toda requisição é necessário adicionar o código padrão para requisição
A requisição a um provider é feita alterando o conteúdo da variável &ibm_request_ da seguinte forma. Se nome do arquivo do provedor é meuprovedor.txt, então para requisitar este arquivo basta alterar a variável para &ibm_request_="meuprovedor()";
Alternativamente é possível passar parâmetros da seguinte forma:
&ibm_request_="meuprovedor(parâmetro 1¬parâmetro 2¬hello world,7¬9)";
Nesta situação foram passados quatro parâmetros
parâmetro 1parâmetro 2hello world,79¬
Após a requisição, aguarda-se que o provider execute o seu código. O provedor pode retornar algum valor. Este valor estará disponível na variável &ibm_response_.
Após a requisição, a variável #ibm_success_ assume o valor 1 se a transação ocorreu com sucesso. Ou assume o valor 0 se a transação não ocorreu com sucesso, onde por exemplo a macro requisitada não existe.
Alternativamente é possível definir uma mensagem de sincronização SYN. Isso pode ser feito da seguinte forma.
&ibm_request_="meuprovedor:olá mundo(foo¬baz)";
Neste caso a mensagem de sincronização foi
olá mundoPara que uma macro ser torne um provedor é necessário que trechos de código sejam inseridos início e no fim da sua macro. Isso já é feito automaticamente pelo criador de plugs IBM da Macrosoft®.
Os parâmetros recebidos pelo requester ficam disponíveis nos arrays &inputs_[] e #inputs_[].
Para definir um retorno para o requester modifique o conteúdo da variável &ibm_return_. Mas isso precisa ser feito antes do código do provedor inserido no fim da sua macro.
Para definir uma mensagem de reconhecimento ACK modifique o conteúdo da variável &pim_ack_message_. Mas isso precisa ser feito antes do código do provedor inserido no início da sua macro.
O propósito deste protocolo é:
Em uma transação, a conexão será o primeiro passo realizado.
@&pim_0000000)PIMSYN:alguma mensagem. A mensagem é definida pelo conteúdo de &pim_syn_message_EXEC ou run. O 10º parâmetro é o nome do socket.#api_request_timeout_ até receber a mensagem de reconhecimento ACK da macro B. Se a macro B demorar demais a responder, o processo é finalizado e o status de sucesso da transação #ibm_success_ é definido como False.&inputs_[] e #inputs_[] e acessa o socket cujo nome foi recebido no décimo parâmetroPIMACK:alguma mensagem. A mensagem é definida pelo conteúdo de &pim_ack_message_PIMEND:alguma mensagem e finaliza a sua execução. A mensagem é definida pelo conteúdo de &ibm_return_&ibm_response_ ou #ibm_response_. O status de sucesso da transação #ibm_success_ é definido como True.Um plhgin IBM é um pacote de um ou mais serviços. Esses pacotes são construídos automaticamente pela aplicação de criação de plugs IBM da Macrosoft®.
Várias macros podem ser empacotadas em um único arquivo. Cada macro pode ser requisitada separadamente como um serviço. Basta requisitar o arquivo como um provider IBM e passar o nome do serviço através da mensagem de sincronização SYN.
O serviço comum entre todos os plugs IBM é o info. Este serviço retorna uma string contendo o nome do criador do plug e os serviços contidos naquele plug, cada um destes elementos sepadados por ,.
Os retornos comuns entre todos os plugs IBM são
empty que indica que a mensagem de sincronização SYN foi passada como uma string vazianot_found que indica que o serviço requisitado não existe naquele plug