#2476 Le 05/06/2011, à 00:04
- Кຼزດ
Re : /* Topic des codeurs couche-tard [4] */
Bon, c’est définitif, les autohells c’est le mal absolu. Tout comme le style Gnu, d’ailleurs.
(Nan mais sérieux, génère ton config.h, tu vas rigoler…
)
C’est facile, pourtant…
dou
Hors ligne
#2477 Le 05/06/2011, à 00:39
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Ouais, ben, lis-le ensuite pour voir à quel point il est moche* (déjà faut comprendre qu’il faut le générer). Ensuite, essaie de comprendre sa logique. Puis ensuite, essaie d’intégrer sa logique à la logique des fichiers sources du programme. Au bout d’un moment, t’as juste envie d’envoyer ça au diable.
Du, si quelqu’un peut me passer une tarball d’un helloworld utilisant Gettext (KISS, et sans autohells), je lui en serai fortement reconnaissant (ouais, je n’ai pas réussi à faire fonctionner Gettext, tout comme Readline, d’ailleurs… je dois avoir du mal avec l’école Gnu).
*. Sérieusement, le :
/* Define to the version of this package. */
#define PACKAGE_VERSION "2.4"
[ 8 lignes dont 2 seulement hors commentaires ]
/* Version number of package */
#define VERSION "2.4"
c’est juste mythique.
Bon, j’ai refait ma cible pour générer les tarballs. Qu’en pensez-vous ?
dist: mrproper
tar zcf $(TARBALL) . --exclude-backups --exclude-vcs --exclude='*/.*' --xform='s/\./$(EXEC)-$(VERSION)/'
Bah alors ? Pas de commentaires ?
Dernière modification par Pylade (Le 05/06/2011, à 02:46)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2478 Le 05/06/2011, à 02:03
- samυncle
Re : /* Topic des codeurs couche-tard [4] */
.
Hello world
Hors ligne
#2479 Le 05/06/2011, à 02:39
- cm-t
Re : /* Topic des codeurs couche-tard [4] */
'Nuit;
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#2480 Le 05/06/2011, à 06:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores totaux, depuis le début :
1) 3423 nesthib
2) 3060 samuncle
3) 2883 Pylade
4) 2172 Кຼزດ
5) 1697+5 grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
6) 1663 cm-t
7) 1292 na kraïou
8) 866 helly
9) 862 \\Ouranos//
10) 659 gnuuat
11) 584 tshirtman
12) 565 Lagierl
13) 428 Rolinh
14) 352 The Uploader
15) 348 nathéo
16) 263 Kanor
17) 196 Askelon
18) 166 :!pakman
19) 121 ǤƦƯƝƬ
20) 99 kamui57
21) 93 petifrancais
22) 78 edge_one
22) 78 pierguiard
24) 70 gulp
25) 42 sakul
26) 39 Le Rouge
27) 37 ilagas
28) 33 xapantu
29) 30 keny
30) 26 gustare
30) 26 d10g3n
32) 25 GentooUser
32) 25 Morgiver
34) 24 ไ୦บเઢ'
34) 24 Steap
36) 20 CROWD
37) 18 Ph3nix_
38) 16 kouskous
39) 15 timsy
40) 12 stratoboy
40) 12 sailing
42) 11 alexises
42) 11 Crocoii
44) 10 Toineo
44) 10 NutMotion
44) 10 pseudovingtcinqcaracteres
44) 10 pfriedZ
44) 10 CasseTaTele
44) 10 Zeibux
44) 10 THS`
51) 8 Mornagest
52) 7 Vista
53) 6 ubuntlin
53) 6 asma.geek
55) 5 tendances-tdct
55) 5 kinouchou
57) 4 danychou56
57) 4 Neros
57) 4 Biaise
57) 4 totoflute
57) 4 pinballyoda ㋛
57) 4 NLS le pingouin
57) 4 ceric
57) 4 Dice-Man
65) 3 Revan26914
65) 3 raspouillas
65) 3 sweetly
68) 2 SoJaS
69) 1 geenux
69) 1 ArzhurBZH
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2481 Le 05/06/2011, à 06:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores de la période en cours :
1) 40 Pylade
2) 26 cm-t
3) 20 Кຼزດ
4) 19 nesthib
5) 17 samuncle
6) 13 na kraïou
7) 11 tshirtman
8) 9 Rolinh
9) 4 \\Ouranos//
9) 4 The Uploader
9) 4 grim7reaper
9) 4 kamui57
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2482 Le 05/06/2011, à 09:51
#2483 Le 05/06/2011, à 10:17
- kamui57
Re : /* Topic des codeurs couche-tard [4] */
Merci beaucoup grim ! avec mode(-1) dans le script, c'est tout bon
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#2484 Le 05/06/2011, à 16:13
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Du, si quelqu’un peut me passer une tarball d’un helloworld utilisant Gettext (KISS, et sans autohells), je lui en serai fortement reconnaissant (ouais, je n’ai pas réussi à faire fonctionner Gettext, tout comme Readline, d’ailleurs… je dois avoir du mal avec l’école Gnu).
Heu, un truc comme ça ?
Hors ligne
#2485 Le 05/06/2011, à 20:07
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
\o/
Merci beaucoup !
En fait, j’étais con, je croyais que bindtextdomain prenait comme argument le répertoire où se trouve le *.mo…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2486 Le 05/06/2011, à 20:13
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Bah alors, on oublie de faire un ptit RTFM
man bindtextdomain
Sinon, y a ce tuto qui est pas mal (dans le sens où c'est du gettext en C et sans autohell, contrairement à beaucoup d'autres)
Dernière modification par grim7reaper (Le 05/06/2011, à 20:17)
Hors ligne
#2487 Le 05/06/2011, à 23:02
- Кຼزດ
Re : /* Topic des codeurs couche-tard [4] */
dou
Hors ligne
#2488 Le 05/06/2011, à 23:15
- tshirtman
Re : /* Topic des codeurs couche-tard [4] */
dodo…
Hors ligne
#2489 Le 05/06/2011, à 23:39
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Bah alors, on oublie de faire un ptit RTFM
man bindtextdomain
Arf, je n’avais pas remarqué que ces fonctions avaient leur page de manuel. En fait j’avais utilisé la doc d’un particulier, mais il n’était pas super clair.
Sinon, y a ce tuto qui est pas mal (dans le sens où c'est du gettext en C et sans autohell, contrairement à beaucoup d'autres)
Ouais, c’est pas mal.
Tiens, j’ai fait du makefile, pour la peine :
EXEC=clfb
.PHONY: all
all:
find -name '*.po' | while read po; \
do mkdir -p "locale/$${po%.po}/LC_MESSAGES"; \
msgfmt "$$po" -o "locale/$${po%.po}/LC_MESSAGES/$(EXEC).mo"; \
done
Et au niveau principal :
pot: $(EXEC).pot
$(EXEC).pot: clfb.c clfb.h
xgettext -k_ -o po/$(EXEC).pot -Esi $^ --package-name=$(EXEC) --package-version=$(VERSION) --from-code=utf-8
sed -i po/$(EXEC).pot \
-e 's/YEAR/2011/' \
-e 's/THE PACKAGE'"'"'S COPYRIGHT HOLDER/Paul (…)/' \
-e 's/PACKAGE/clfb/' \
-e 's/FIRST AUTHOR <EMAIL@ADDRESS>/Paul (…) <(…)>/'
Mais là, j’ai mis pot en .PHONY, et du coup c’est reconstruit à chaque fois. Il n’y a pas une cible spéciale plus appropriée, pour ça ?
J’ai aussi un petit souci, c’est que dans clfb.h, j’ai un define qui est utilisé dans clfb.c, mais qui n’apparaît pas dans le clfb.pot généré…
Dernière modification par Pylade (Le 05/06/2011, à 23:40)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2490 Le 06/06/2011, à 00:02
- nesthib
Re : /* Topic des codeurs couche-tard [4] */
plop
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#2491 Le 06/06/2011, à 00:08
- cm-t
Re : /* Topic des codeurs couche-tard [4] */
'Nuit;
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#2492 Le 06/06/2011, à 00:18
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Ah, et puis je signale qu’il est inutile de chercher à inclure locale.h lorsque l’on inclue libintl.h ; et que l’on va bientôt fermer…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2493 Le 06/06/2011, à 00:21
- :!pakman
Re : /* Topic des codeurs couche-tard [4] */
Ça consiste en quoi globalement le "Gnu coding style" ?
Très vite fait, c'est quoi les particularités de cette façon de coder ?
...
Hors ligne
#2494 Le 06/06/2011, à 00:24
- samυncle
Re : /* Topic des codeurs couche-tard [4] */
.
Hello world
Hors ligne
#2495 Le 06/06/2011, à 00:45
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Ça consiste en quoi globalement le "Gnu coding style" ?
Très vite fait, c'est quoi les particularités de cette façon de coder ?
C’est fait pour être très moche, illisible, et donner envie de ne pas se pencher sur le code du programme.
Plus sérieusement, il a y plein de trucs : ça va de l’indentation et espacement (il y a une espace entre le nom de la fonction et la parenthèse ouvrante) à l’organisation générale du code. Si tu veux te faire peur, regarde leur strlen ou leur helloworld.
Bon, en fait, je me demande si c’est une bonne idée de localiser la notice qui présente la licence.
Et puis vous ne m’avez pas répondu : quand un programme n’est pas scriptable, c’est bien inutile de préfixer les messages d’erreur, hein ?
Dernière modification par Pylade (Le 06/06/2011, à 03:02)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2496 Le 06/06/2011, à 01:05
- Кຼزດ
Re : /* Topic des codeurs couche-tard [4] */
:!pakman a écrit :Ça consiste en quoi globalement le "Gnu coding style" ?
Très vite fait, c'est quoi les particularités de cette façon de coder ?C’est fait pour être très moche, illisible, et donner envie de ne pas se pencher sur le code du programme.
Plus sérieusement, il a y plein de trucs ça va de l’indentation et l’espacement (il y a un espace entre le nom de la fonction et la parenthèse ouvrante) à l’organisation générale du code. Si tu veux te faire peur, regarde leur strlen ou leur helloworld.
Leur strlen reste quand même plus efficace.
(mais à part ça, oui, ça peut se résumer en un mot : le chaos)
dou
Hors ligne
#2497 Le 06/06/2011, à 01:36
- Elzen
Re : /* Topic des codeurs couche-tard [4] */
Tiens, python fait un truc bizarre au niveau du garbage collector…
Genre j'ajoutais dans un conteneur GTK un composant venu d'un autre module que j'avais juste récupéré directement (pas de variable dans le module qui faisait l'ajout), puis pour tester les options, je le virais et je le remettais, et le truc avait été détruit entre temps.
Du coup j'ai fait autrement, mais ç't'un peu bizarre quand même.
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#2498 Le 06/06/2011, à 06:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores totaux, depuis le début :
1) 3428 nesthib
2) 3065 samuncle
3) 2893 Pylade
4) 2178 Кຼزດ
5) 1698+5 grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
6) 1668 cm-t
7) 1292 na kraïou
8) 866 helly
9) 862 \\Ouranos//
10) 659 gnuuat
11) 588 tshirtman
12) 565 Lagierl
13) 428 Rolinh
14) 352 The Uploader
15) 348 nathéo
16) 263 Kanor
17) 196 Askelon
18) 171 :!pakman
19) 121 ǤƦƯƝƬ
20) 99 kamui57
21) 93 petifrancais
22) 78 edge_one
22) 78 pierguiard
24) 70 gulp
25) 42 sakul
26) 39 Le Rouge
27) 37 ilagas
28) 33 xapantu
29) 30 keny
30) 26 gustare
30) 26 d10g3n
32) 25 GentooUser
32) 25 Morgiver
34) 24 ไ୦บเઢ'
34) 24 Steap
36) 20 CROWD
37) 18 Ph3nix_
38) 16 kouskous
39) 15 timsy
40) 12 stratoboy
40) 12 sailing
42) 11 alexises
42) 11 Crocoii
44) 10 Toineo
44) 10 NutMotion
44) 10 pseudovingtcinqcaracteres
44) 10 pfriedZ
44) 10 CasseTaTele
44) 10 Zeibux
44) 10 THS`
51) 8 Mornagest
52) 7 Vista
53) 6 ubuntlin
53) 6 asma.geek
55) 5 tendances-tdct
55) 5 kinouchou
57) 4 danychou56
57) 4 Neros
57) 4 Biaise
57) 4 totoflute
57) 4 pinballyoda ㋛
57) 4 NLS le pingouin
57) 4 ceric
57) 4 Dice-Man
65) 3 Revan26914
65) 3 raspouillas
65) 3 sweetly
68) 2 SoJaS
69) 1 geenux
69) 1 ArzhurBZH
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2499 Le 06/06/2011, à 06:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores de la période en cours :
1) 50 Pylade
2) 31 cm-t
3) 26 Кຼزດ
4) 24 nesthib
5) 22 samuncle
6) 15 tshirtman
7) 13 na kraïou
8) 9 Rolinh
9) 5 grim7reaper
9) 5 :!pakman
11) 4 \\Ouranos//
11) 4 The Uploader
11) 4 kamui57
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2500 Le 06/06/2011, à 08:48
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Leur strlen reste quand même plus efficace.
Plus efficace que quoi?
Sinon, ouais, j'appuie Pylade: le GNU coding style saylemal.
D'ailleurs, au cas où tu ne connaissais pas ce célèbre passage du Linux Kernel coding style, deuxième paragraphe:
First off, I'd suggest printing out a copy of the GNU coding standards,
and NOT read it. Burn them, it's a great symbolic gesture.
Sinon, bah, je crois que l'exemple de strlen cité par Pylade parle de lui-même:
strlen GNU:
#include <string.h>
#include <stdlib.h>
#undef strlen
/* Return the length of the null-terminated string STR. Scan for
the null terminator quickly by testing four bytes at a time. */
size_t
strlen (str)
const char *str;
{
const char *char_ptr;
const unsigned long int *longword_ptr;
unsigned long int longword, himagic, lomagic;
/* Handle the first few characters by reading one character at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */
for (char_ptr = str; ((unsigned long int) char_ptr
& (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
/* All these elucidatory comments refer to 4-byte longwords,
but the theory applies equally well to 8-byte longwords. */
longword_ptr = (unsigned long int *) char_ptr;
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
the "holes." Note that there is a hole just to the left of
each byte, with an extra at the end:
bits: 01111110 11111110 11111110 11111111
bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
The 1-bits make sure that carries propagate to the next 0-bit.
The 0-bits provide holes for carries to fall into. */
himagic = 0x80808080L;
lomagic = 0x01010101L;
if (sizeof (longword) > 4)
{
/* 64-bit version of the magic. */
/* Do the shift in two steps to avoid a warning if long has 32 bits. */
himagic = ((himagic << 16) << 16) | himagic;
lomagic = ((lomagic << 16) << 16) | lomagic;
}
if (sizeof (longword) > 8)
abort ();
/* Instead of the traditional loop which tests each character,
we will test a longword at a time. The tricky part is testing
if *any of the four* bytes in the longword in question are zero. */
for (;;)
{
longword = *longword_ptr++;
if (((longword - lomagic) & ~longword & himagic) != 0)
{
/* Which of the bytes was the zero? If none of them were, it was
a misfire; continue the search. */
const char *cp = (const char *) (longword_ptr - 1);
if (cp[0] == 0)
return cp - str;
if (cp[1] == 0)
return cp - str + 1;
if (cp[2] == 0)
return cp - str + 2;
if (cp[3] == 0)
return cp - str + 3;
if (sizeof (longword) > 4)
{
if (cp[4] == 0)
return cp - str + 4;
if (cp[5] == 0)
return cp - str + 5;
if (cp[6] == 0)
return cp - str + 6;
if (cp[7] == 0)
return cp - str + 7;
}
}
}
}
libc_hidden_builtin_def (strlen)
strlen FreeBSD:
#include <sys/cdefs.h>
#include <string.h>
size_t
strlen(str)
const char *str;
{
register const char *s;
for (s = str; *s; ++s);
return(s - str);
}
Au passage, note le coding style affreux de GNU
EDIT: en fait, FreeBSD a fait une révision de son strlen l'année passée:
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/lib/libc/string/strlen.c,v 1.10 2010/03/13 00:15:06 delphij Exp $");
#include <sys/limits.h>
#include <sys/types.h>
#include <string.h>
/*
* Portable strlen() for 32-bit and 64-bit systems.
*
* Rationale: it is generally much more efficient to do word length
* operations and avoid branches on modern computer systems, as
* compared to byte-length operations with a lot of branches.
*
* The expression:
*
* ((x - 0x01....01) & ~x & 0x80....80)
*
* would evaluate to a non-zero value iff any of the bytes in the
* original word is zero.
*
* On multi-issue processors, we can divide the above expression into:
* a) (x - 0x01....01)
* b) (~x & 0x80....80)
* c) a & b
*
* Where, a) and b) can be partially computed in parallel.
*
* The algorithm above is found on "Hacker's Delight" by
* Henry S. Warren, Jr.
*/
/* Magic numbers for the algorithm */
#if LONG_BIT == 32
static const unsigned long mask01 = 0x01010101;
static const unsigned long mask80 = 0x80808080;
#elif LONG_BIT == 64
static const unsigned long mask01 = 0x0101010101010101;
static const unsigned long mask80 = 0x8080808080808080;
#else
#error Unsupported word size
#endif
#define LONGPTR_MASK (sizeof(long) - 1)
/*
* Helper macro to return string length if we caught the zero
* byte.
*/
#define testbyte(x) \
do { \
if (p[x] == '\0') \
return (p - str + x); \
} while (0)
size_t
strlen(const char *str)
{
const char *p;
const unsigned long *lp;
long va, vb;
/*
* Before trying the hard (unaligned byte-by-byte access) way
* to figure out whether there is a nul character, try to see
* if there is a nul character is within this accessible word
* first.
*
* p and (p & ~LONGPTR_MASK) must be equally accessible since
* they always fall in the same memory page, as long as page
* boundaries is integral multiple of word size.
*/
lp = (const unsigned long *)((uintptr_t)str & ~LONGPTR_MASK);
va = (*lp - mask01);
vb = ((~*lp) & mask80);
lp++;
if (va & vb)
/* Check if we have \0 in the first part */
for (p = str; p < (const char *)lp; p++)
if (*p == '\0')
return (p - str);
/* Scan the rest of the string using word sized operation */
for (; ; lp++) {
va = (*lp - mask01);
vb = ((~*lp) & mask80);
if (va & vb) {
p = (const char *)(lp);
testbyte(0);
testbyte(1);
testbyte(2);
testbyte(3);
#if (LONG_BIT >= 64)
testbyte(4);
testbyte(5);
testbyte(6);
testbyte(7);
#endif
}
}
/* NOTREACHED */
return (0);
}
EDIT: il faudrait lancer le 6e topic non?
Dernière modification par Rolinh (Le 06/06/2011, à 11:48)
Hors ligne