# [OT]Aiuto x progetto ambizioso

## Luc@s

Avrei bisogno di 2/3 persone che si uniscano al mio team(formato da me e un altro) per creare un nuovo editor.

Il progetto si chiama Teck Edit e questo è il suo manifesto:

 *Quote:*   

> 							Manifesto sviluppoTeck Edit 
> 
> Planing:
> 
> --------------------------------------------------------------------------------------------------------------------------------------
> ...

 

Il lavoro è molto e le persone poche.

Devo anche studiarmi come fare una architettura a plugin.

Il motore è in C++ Standard x la portabilità: al momento è in dll ma vorrei poterlo compilare su *NIX (essendo Standard) come libreria condivisa(usabile da terzi).

La GUI Win32 è gia pronta, fatta in Borland C++ Builder.

Chiunque voglia aiutarmi mi contatti via PVT!!!

Vi ringrazio x l'attenzione & tnk in anticipo a chi ci aiuterà

----------

## shev

Ciao, posso fare il curioso?

Perchè proprio un editor? Ci sono motivi profondi alla base o è solo perchè vi piaceva tale idea? Non credete che ci sia già uno sterminato numero di editor liberi e non? Pensate di inserirvi in un ambito particolarmente di nicchia ( ? ) o scoperto ( ? ), oppure lo fate tanto per divertirvi, senza nessuna ambizione particolare?

Non avete pensato a qualcosa che si andasse ad inserire in un contesto meno coperto dal software libero ( spero che vogliate sviluppare software opensource )?

Scusami per le mille domande, ma sono curioso  :Very Happy: 

----------

## Luc@s

GPL 4Ever!!!!

Lo facciamo per imparare a programmare e per, magari un dimani, poter dire che un editor con molte funzioni è nostro  :Very Happy: 

----------

## shev

Bhe, se lo scopo è quello di approfondire la conoscenza della programmazione perchè non prendete due piccioni con una fava e vi lanciate su un programma meno diffuso, qualcosa di più originale ( e perchè no, utile ) e che magari vi aiuti ad approfondire anche altri aspetti (database, suite tcp/ip, audio ecc...)?

Sia chiaro non voglio smontarvi, ci mancherebbe! Era solo un consiglio spassionato, visto che anch'io sto pensando da qualche mese ad una cosa del genere ( nel senso di programma che sia utile a qualcuno e a me per approfondire certi aspetti non solo di programmazione ).

L'unica difficoltà è trovare qualcosa che risponda al mio consiglio!  :Very Happy: 

----------

## Luc@s

ma tu nn avresti voglia di aiutarci?

----------

## shev

 *Luc@s wrote:*   

> ma tu nn avresti voglia di aiutarci?

 

Più che la voglia è il tempo che mi manca  :Sad:  ( morellik ne sa qualcosa, ancora sta aspettando la mia traduzione del framebuffer & boot etc howto  :Razz:  )

----------

## Luc@s

principalmente cerco:

-Programmatore GTK su linux (x GUI di questo OS)

-Programmatore C++ per il motore

----------

## AEn|gMa

Per quanto riguarda i plug-in cerca documentazione su dlopen() e le funzioni connesse.

Inoltre cerca su google "scintilla" che è un modulo per realizzare pannelli di editing con una marea di funzioni e completamente configurabile.

----------

## akiross

Sui plugin sto lavorando io in questi giorni.

Collaborando con il progetto OpenC6 sto proprio facendo il lavoro di sviluppare un sistema che utilizza dei plugin per questo client chat, volendo posso darti una mano io, almeno ti posso spiegare le basi.

Comunque, guarda qui, e' molto utile:

http://www-106.ibm.com/developerworks/linux/library/l-dll.html

qui

http://www-106.ibm.com/developerworks/library/l-shobj/

e qui

http://www.tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html

Se poi hai altre domande, chiedi a me. Se vuoi ti passo il sistema a plugin ceh sto facendo pr OpenC6 appena l'ho finito (pero' ho delle difficolta' riguardo alle pipe, e cose simili, che non conosco ancora bene ma ke mi servono).

Ah, perche' non fai una bella cosa sul tuo editor, che non ho mai visto su altri: la selezione multipla del testo.

Cioe', premi ctrl, e selezioni un testo, poi selezioni un altro pezzo e ancora un'altro. L'editor li copia in memoria concatenati l'uno con l'altro e poi incolli normalmente con il tasto centrale del mouse.

Piu' di una volta una finzionalita' del genere mi sarebbe servita  :Smile: 

ciao

----------

## Luc@s

ottima idea, tnk!

Si in effetti sulla teora del plugin avrei molte carenze...................mi puoi dare qualche base?

----------

## akiross

Hai letto le doc? li e' spiegato tutto bene bene, vabe... non proprio tutto

PREMETTO:

Il sistema che ho imparato io e' in C, non C++, va quindi compilato con GCC. Per esperienza personale ti assicuro che compilando in G++ da molti problemi (che non ho mai risolto), quindi compila sempre i plugin con GCC (probabilmente il main puo' andare anche con G++)

Inoltre, io ho studiato plugin specifii per le chat, non ho mai pensato di farne qualcuno per un programma tipo questo, pero' suppongo che i concetti siano validi anche per questo.

Comunque:

i plugin sono qualcosa di simile alle shared object, ma non esattamente uguali.

praticamente il plugin viene compilato da gcc con l'opzione -shared, questo consente di poterlo condividere e di renderlo indipendente.

In sostanza:

il sistema basilare che consente di gestire i plugin e' formato da un corpo principale main, dai plugin e da un'interfaccia che il programmatore fornisce ai plugin per lavorare.

Il main, che come l'ho studiato io usa le librerie dlcfn.h, non deve fare altro che aprire i plugin, gestire eventuali errori, verificare se hanno l'entry point stabilito e infine tenere una "tabella" dei plugin caricati.

L'interfaccia, e' in genere una serie di funzioni, elencate in un file .h che viene utilizzato dai plugin. Queste funzioni di interfaccia, sono delle funzioni "generalizzate" che permettono di controllare il tuo programma e di interfacciare il programma con il plugin.

Nel caso di una chat, queste funzioni servranno per:

- Leggere il testo scritto dagli altri utenti

- Scrivere il testo verso gli altri utenti

- Associare il plugin ad un comando (ad esempio il comando /saluta_tutti)

e magari altre cose, ma queste sono basilari

Queste funzioni di interfaccia, DEVONO utilizzare le callback, per poter fare quello che vuole l'utente.

Il plugin invece si presenta come un programma normale, che ha un'entry point fisso (ad esempio la funzione plugin_main) e utilizza le funzioni di interfaccia per dire al main che cosa da il plugin.

Il main, quando darica un plugin, vede se c'e' l'entry point, se c'e' lo esegue. In questo entry poin succedono determinate cose:

- al plugin viene assegnato un identificatore

- l'esecuzione delle funzioni di interfaccia, fa in modo che quello che deve fare il plugin venga registrato nella tabella del main.

So che non ci si capisce molto per ora, ma adesso faccio un esempio (ovviamente inventato e non funzionante  :Smile: 

IL MAIN

```

#include <dlfcn.h>

#include <stdio.h>

int main()

{

   caricamento_del_plugin();

   /*questa funzione chiede all'utente il come del plugin da caricare, e lo apre con le librerie dlfcn (e' un po lunga la cosa: guarda sui link che ho messo) in caso di errore, la funzione termina il programma con un msg di errore*/

   verifica_entry_point("plugin_main");

   /* anche qui un riassunto: si utilizza la funzione getsimbol (o simili) delle dlfcn per ferificare se c'e' l'entry point. In caso non ci fosse, questa funzione esce con un msg di errore*/

   

   esegui_entry_point(ID_Plugin); /* guarda link :)*/

   

   .. resto del programma (eventualmente si registra il plugin nella tabella, che devi inventarti tu, ma questo esempio usa un solo plugin...

}

```

PLUGIN

```

plug_handler *ph;

void funzione_saluta_tutti()

{

   // le funzioni plug_iface sono le funzioni di interfaccia fatte da te

   plug_iface_message("CIAO A TUTTI")

}

void funzione_away()

{

   plu_iface_set_me_away();

}

void plugin_main(plug_handler *Plug, )

{

   ph = Plug; /* Plug viene passato dal main all'entry poin con valore ID_Plugin... in fondo, questa e' una funzione :)*/

   plug_iface_associa_comando("/saluta_tutti", funzione_saluta_tutti);

   /* associo la funzione al comando /saluta_tutti*/

   plug_iface_associa_comando("/sono_away", funzione_away);

   return 0; // successo

}

```

spero si sia capito un po 

se ci sono probl, scrivi

ciao

----------

## Luc@s

+ o - ci sono!

Tnk 100000.

----------

## Luc@s

ap!

Ora il progetto è alla 0.0.3.1!

Potrete skarikarlo qui e potrete3 anche aiutarmi se volete (vi prego   :Laughing:  )

----------

