Make your own free website on Tripod.com
SourceMerge

 

[SourceMerge] SourceMerge è una utility che permette di mantenere differenti versioni dello stesso codice sorgente. Non è un sistema di controllo revisioni: è particolarmente utile per produrre programmi in lingue diverse. Poiché è altamente configurabile, può essere adottato per l'utilizzo con molti linguaggi di programmazione: C, C++, Html, Assembly, Clipper.

 

Tipo Versione Descrizione Requisiti Caratteristiche Download

 

Tipo

Utility Dos/Windows; prodotto freeware/GNU General Public License 2.0.

 

Versione

1.2 / inglese.

 

Descrizione

Questo programma può essere utilizzato per mantenere diverse versioni dello stesso codice sorgente; risulta particolarmente utile per produrre programmi in diverse lingue. Poiché è altamente configurabile, può essere adottato per l'uso con diversi linguaggi di programmazione, ad esempio C, C++, Html, Assembly, Clipper.
SourceMerge può operare su file di testo Dos/Windows, Macintosh e Unix, anche misti (cioè il file libreria in un formato, il file sorgente in un altro). I file di testo creati hanno sempre lo stesso formato del corrispondente file sorgente.

 

Requisiti

 

Caratteristiche

Come sempre, un esempio è il modo migliore di dimostrare l'utilizzo di SourceMerge.
La linea di comando del programma è la seguente:

SRCMERGE spec /Llib /Vver [/Sxy] [/Ddest] [/Brem_begin] [/Erem_end] [/X]

"spec" è la specifica dei file da processare, che può includere eventuali wild cards.
SourceMerge supporta i nomi di file lunghi sotto Windows 9x/ME/2000/XP; supporta inoltre wild cards '*' e '?' multiple, sia in modalità Ms-Dos reale che sotto Windows 9x/ME/2000/XP. Utilizzare il parametro /X per evitare il confronto con i nomi di file lunghi.

"lib" è il nome del file di libreria da utilizzare; il nome può avere qualunque estensione, sebbene io abbia utilizzato l'estensione ".LIB" in questi esempi.
Il file libreria è un file di testo formattato come i file .INI di Windows.
Ogni sezione inizia con:

[id:ver]

e termina con la prossima sezione o la fine del file.
I caratteri '[' e ']' che racchiudono id:ver possono essere cambiati utilizzando il parametro /Sxy - x è il prefisso ed y il suffisso (ciascuno lunghi un carattere): ciò può risultare utile se il testo da sostituire può contenere una linea simile all'inizio di sezione.

Per esempio, supponiamo che si abbia il seguente frammento di codice C che definisce due stringhe, contenuto nel file di testo SAMPLE.C:

#define WELCOME "Benvenuto"
#define BYE "Arrivederci"

Le stringhe sono in italiano; se si desidera produrre due versioni dello stesso programma, una in italiano ed un'altra in inglese, sostituire il testo con quanto segue:

/* SRCM:welc_bye. */
/* /SRCM:welc_bye. */

e creare il file libreria MYTEST.LIB con questo testo:

[welc_bye:italian]
#define WELCOME "Benvenuto"
#define BYE "Arrivederci"
[welc_bye:english]
#define WELCOME "Welcome"
#define BYE "Goodbye"

Ora, per creare una versione in una lingua o nell'altra utilizzare:

SRCMERGE sample.c /lmytest.lib /vitalian
SRCMERGE sample.c /lmytest.lib /venglish

Naturalmente, in questo caso sarebbe più semplice inserire tutte le definizioni nel codice sorgente e selezionare una versione o l'altra attraverso #ifdef; tuttavia, ci sono linguaggi in cui ciò è impossibile da realizzare, e casi più complessi nei quali la stessa operazione non è così semplice (ad esempio, quando è necessario aggiungere codice per versioni specifiche). Inoltre, il codice sorgente è più pulito e comprensibile da leggere utilizzando questo metodo.

Come avrete notato, ogni sezione nel codice sorgente è un blocco di testo che inizia con:

b SRCM:id. e

e termina con:

b /SRCM:id. e

Tra '.' e 'e' è possibile introdurre del testo opzionale, che viene semplicemente ignorato.

I caratteri 'b' ed 'e' sono stringhe di commento che possono essere specificate con i parametri /B e /E; se non specificate, sono dedotte dal programma sulla base dell'estensione del file sorgente, secondo questa tabella:

Estensione .C .H .CPP .HPP .HTM .PRG .CH .INI .SYS .BAT .MNU .ASM other
Stringa 'b' /* /* // // <!-- * * rem rem rem ; # #
Stringa 'e' */ */     -->                

Come si può vedere, le stringhe 'e' possono anche essere nulle, nel qual caso il contrassegno termina alla fine della riga:

printf("questo è un test\n"); // SRCM:id. <-- il contrassegno termina a fine riga

Ci deve essere esattamente uno spazio tra la stringa 'b' e "SRCM:".

I parametri /L e /V devono essere sempre indicati: il primo definisce il file libreria da utilizzare, il secondo la versione con la quale i file sorgenti saranno aggiornati.
Si tenga presente che sia i contrassegni di versione che gli identificatori di sezione sono sensibili alle maiuscole: italian e Italian sono due contrassegni di versione distinti, esattamente come welc_bye e Welc_Bye sono due identificatori di sezione differenti.

Sulla linea di comando, le stringhe di versione/commento e i caratteri da utilizzare come prefisso/suffisso di sezione (parametro /S) possono includere costanti C-like; per esempio, se avete un file HTML con estensione ".DOS" (che non è fra quelle riconosciute da SourceMerge) e volete utilizzare le stringhe di commento "<!--" per 'b' e "-->" per 'e', digitate:

SRCMERGE test.dos /Ltest.lib /Vtest /B\x3c!-- /E--\x3e

Ciò è necessario poiché i caratteri "<" e ">" sono preprocessati dall'interprete di comando del Dos e sono utilizzati per redirigere l'ingresso/l'uscita standard; le corrispondenti stringhe C-like sono:

Carattere Esadecimale Ottale Decimale Ascii
< \x3c \074 \d60 60
> \x3e \076 \d62 62

Allo stesso modo, se volete utilizzare i caratteri '|' come prefisso di sezione e '^' come suffisso, sulla linea di comando indicate:

/S\x7c^ /S\d124^ /S\174^ (il carattere '^' può apparire così com'è)

Le seguenti sequenze di escape sono supportate:

\a \b \f \n \r \t \v \\ \? \' \"

e le costanti ottali, esadecimali e decimali così specificate:

I caratteri ':' e '.' dovrebbero essere evitati nelle stringhe di versione; i caratteri Ascii sotto ' ' (32) andrebbero evitati sia nelle stringhe di commento che di versione.

Di default, SourceMerge modifica i file sorgenti 'localmente', cioé i file sono sovrascritti con la versione aggiornata. Se volete creare una nuova versione in una directory differente, utilizzate il parametro /D per impostare la destinazione; in questo caso, i file sorgenti non saranno toccati.
Si tenga presente che tutti i file esistenti nella directory destinazione sono sovrascritti senza alcun avvertimento.

Il livello di errore è impostato all'uscita a:

0 nessun errore
1 parametri mancanti o errati, file libreria vuoto
2 errore di lettura/scrittura/apertura
3 identificatore non trovato/errore di sintassi
4 stringa troppo lunga
5 memoria insufficiente

I file sorgenti (quando il parametro /D non è specificato) sono sovrascritti solo se l'aggiornamento ha avuto successo; se il parametro /D viene indicato e SourceMerge esce con un livello di errore superiore o uguale a 3, l'ultimo file creato nella directory destinazione sarà troncato al punto in cui l'errore si è verificato.

Se SourceMerge non trova alcuna sezione da aggiornare in un determinato file:

  1. non lo sovrascriverà (se /D non viene specificato);
  2. creerà una copia del file con la stessa data/ora dell'originale (se /D viene specificato).

Eseguire SRCMERGE senza parametri per ottenere un breve riassunto che illustra il suo utilizzo.

 

Download

Scarica SourceMerge (versione 1.2 per Dos/Windows)

 

Inizio pagina