Olá Pessoal!
Baseando no modelo de drive EDI (Extensible Device Interface), estou planejando a interface ODMI, nela são incorporados elementos da EDI (Drivers como Objetos) e mais uma linguagem de criação de drivers (ODMI/OPL - Objected Program Language). Essa linguagem seria um interpretador de macros, que gerariam drivers em arquivos C/ko para a interface ODMI/EI (Extendend Interface). A linguagem está sendo projetada e será parecida com esse trecho de código:
include <stdio.h>
include_object kernel // #include <odmi/oo_kernel.h>
object Interrupt // Gera header oo_Interrupt.h
public function set_int(int num, intr_func_t func): int;
object_end
public function Interrupt::set_int(int num, intr_func_t func): int
{
printf("Interrupt: Interrupção %i atribuida!\n", num);
kernel@set_int(num, func);
}
Como podesse ver, ao invez dos simbolos kernel->set_int ou kernel.set_int usamos kernel@set_int para nao confundir com o código C, ja que eh uma linguagem macro e em algum locais o código C será totalmente aceito. O código C que será gerado será parecido com esse:
oo_interrupt.h:
odmi_object *oo_interrupt;
int oo_Interrupt_set_int(int num, intr_func_ptr_t func);
oo_interrupt.c:
#include "oo_interrupt.h"
#include <stdio.h>
#include <odmi/oo_kernel.h>
int oo_Interrupt_set_int(int num, intr_func_ptr_t func)
{
printf("Interrupt: Interrupção %i atribuida!\n", num);
oo_kernel_set_int(num, func); // Função nativa do kernel
}
Fora esses dois arquivos (oo_Interrupt.h, oo_Interrupt.c), também será gerado o arquivo oo_Interrupt.xml, para fazer o controle do dados do object e que funções/variáveis ele exporta. Sei que o projeto é um tanto ambicioso, mas nada impossível. E estou aqui para saber a opnião de todo mundo e o que podemos acrescentar ao novo padrão.
Padrão EDI:
http://www.jamesmolloy.co.uk/edi/index.htmlAbraços