Existe-t-il un utilitaire comme dspcat sous Linux?

9

J'utilise la dspcatcommande suivante sur AIX et je peux vider les catalogues de messages créés avec la gencatcommande:

dspcat –g  /u/is/bin/I18N/l/lib/libca/libcalifornia.117.cat >> /tmp/message.smc

J'ai passé une bonne heure solide à chercher des conseils sur la façon de vider l'un de ces catalogues sous Linux, mais cette commande ne semble pas être disponible. Toute aide serait appréciée.

ojblass
la source
Je ne vois pas grand-chose non plus. La stringscommande serait-elle suffisante pour obtenir ce dont vous avez besoin? Peut-être avec un peu de post-traitement?
Sean Perry
les chaînes sont probablement encodées ... je ne suis pas tout à fait sûr si une chaîne shiftjis tomberait correctement d'un fichier de catalogue à chaînes ... Je peux essayer quelques tests.
ojblass
Le format n'est probablement pas trop difficile à rétroconcevoir si le contenu est précieux.
Sean Perry

Réponses:

3

J'ai trouvé le code source de dspcat.c: http://www.smart.net/~rlhamil/ . Plus précisément dans cette archive tar . J'ai essayé de le compiler et il me manquait une variable:

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:23: error: ‘NL_TEXTMAX’ undeclared (first use in this function)
    static char result[NL_TEXTMAX*2+1];
                       ^
dspcat.c:11:23: note: each undeclared identifier is reported only once for each function it appears in
dspcat.c: In function ‘print_file’:
dspcat.c:240:23: error: ‘NL_SETMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                       ^
dspcat.c:240:49: error: ‘NL_MSGMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                                                 ^
dspcat.c: In function ‘main’:
dspcat.c:338:30: error: ‘NL_MSGMAX’ undeclared (first use in this function)
       if (msg_nr<1 || msg_nr>NL_MSGMAX) {
                              ^
dspcat.c:353:32: error: ‘NL_SETMAX’ undeclared (first use in this function)
       if (msg_set<1 || msg_set>NL_SETMAX) {
                                ^
make: *** [dspcat] Error 1

La variable NL_SETMAXne semble pas être définie sur mon système. J'ai localisé ce fichier d'en-tête, bits/xopen_lim.hqui avait cette variable, donc je l'ai ajouté à la liste des en-têtes sur un coup de tête.

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:33: warning: integer overflow in expression [-Woverflow]
    static char result[NL_TEXTMAX*2+1];
                                 ^
dspcat.c:11:16: error: size of array ‘result’ is negative
    static char result[NL_TEXTMAX*2+1];
                ^
dspcat.c:11:16: error: storage size of ‘result’ isn’t constant
dspcat.c:15:29: warning: integer overflow in expression [-Woverflow]
    for (x=0; x < (NL_TEXTMAX*2) && *s != '\0'; s++)
                             ^
make: *** [dspcat] Error 1

Si j'ai plus de temps, je jouerai avec cela, mais je crois que si vous définissez statiquement cette variable dans le code directement, vous pourrez peut-être la compiler vous-même.

slm
la source
Je peux travailler avec ça merci beaucoup +50
ojblass