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.
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.
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; supporta inoltre wild cards
'*' e '?' multiple, sia in modalità Ms-Dos reale che sotto Windows 9x. 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:
Eseguire SRCMERGE senza parametri per ottenere un breve riassunto che illustra il suo utilizzo.
Requisiti:
Versioni |
Utility Dos/Windows 9x; prodotto freeware/GNU
General Public License 2.0.
Ultima versione: 1.2 / inglese.
Download |
Scarica SourceMerge (versione 1.2 per Dos/Windows 9x)
![]() |
Inizio pagina |