Salut,

Question de geek pour furieux,
je me suis amusé cette nuit avec un petit code forth dont le but est une simple copie de fichier texte (copie brute (enfin j'espèrais)).

Pour ça j'utiliser un buffer de type chainé
comme celui là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
256 Constant max-line
Create line-buffer  max-line 2 + allot
et je le copie par cette procédure simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
: copy-file ( -- )
  begin
      line-buffer max-line fd-in read-line throw
  while
      line-buffer swap fd-out write-file throw
  repeat ;
seulement voilà ça ne copie pas le caractère fin de ligne...
J'ai pas trouvé pourquoi

le texte d'entrée (je le donne juste parce que ça en fera sourire certains)
Que les puces d'un millier de chiens galleux
infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre année 2007 et que les
bras lui soient trop court pour qu'il puisse se le gratter.
j'obtiens dans la copie tout ça sur une seule ligne.


bref si il existe un furieux qui code en forth ansi ou gforth, une aide serait apprécié pour comprendre cette erreur.

Merci

PS: le code presque complet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
#! /usr/bin/gforth
 
0 Value fd-in
0 Value fd-out
 
 
s" fic.in"  r/o open-file throw Value fd-in
s" fic.out" w/o create-file throw Value fd-out
 
s" fic.in" open-input
s" ffic.out" open-output
 
 
256 Constant max-line
Create line-buffer  max-line 2 + allot
 
( traitement )
 
: copy-file ( -- )
  begin
      line-buffer max-line fd-in read-line throw
  while
      line-buffer swap fd-out write-file throw
  repeat ;
 
copy-file
fd-in close-file throw
fd-out close-file throw
bye