Guest User

Test new READ-LINE

a guest
Nov 5th, 2021
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. empty
  2.  
  3. 0 value ifid
  4. 0 value ofid
  5.  
  6. : readtext0 ( a u1 -- a u2 flag ) over swap ifid read-line throw ;
  7.  
  8. \ EOL string
  9. here 2 c, 13 c, 10 c, count 2constant (cr) ( -- a u )
  10. \ here 1 c, 10 c, count 2constant (cr) ( -- a u )
  11. \ here 1 c, 13 c, count 2constant (cr) ( -- a u )
  12.  
  13. \ EOL scanner
  14. : /EOL ( a u -- u' offs )
  15. over swap begin dup while
  16. over c@ dup $0D - while $0A - while 1 /string
  17. repeat \ got LF
  18. drop swap - dup 1+ exit
  19. then \ got CR
  20. 2drop tuck swap - swap 1+ c@ $0A <> over + 2 + exit
  21. then \ neither
  22. drop swap - dup ;
  23.  
  24. \ READ-LINE alternate spec
  25. \ buffer size at least u chars and a minimum of one
  26. \ n3: 0 = EOF, -1 = EOL received, 1 = EOL not received
  27. : READ-LINE ( a u1 fid -- u2 n3 ior )
  28. >r 2dup r@ read-file
  29. dup if r> drop nip exit then \ ior
  30. over 0= if r> drop 2swap 2drop 0 exit then \ EOF
  31. drop >r tuck 1- r@ min /eol r> - s>d
  32. r@ file-position drop d+ r> reposition-file drop
  33. tuck 1+ = 2* 1+ 0 ;
  34.  
  35. : writedata ( a u -- ) ofid write-file throw ;
  36. : readtext ( a u1 -- a u2 flag ) over swap ifid read-line throw ;
  37.  
  38. : open ( a u -- ) r/o open-file throw to ifid ;
  39. : make ( a u -- ) r/w create-file throw to ofid ;
  40. : closein ( -- ) ifid close-file drop ;
  41. : closeout ( -- ) ofid close-file drop ;
  42.  
  43. : ?cr ( flag -- ) if (cr) writedata then ;
  44.  
  45. 5 value bufsize
  46.  
  47. : read&write ( a u a2 u2 -- )
  48. 2swap 2dup open
  49. cr ." Reading: " type ." using READ-LINE u1 = " bufsize . cr
  50. cr ." Writing: " 2dup type ." u2 chars using WRITE-FILE;"
  51. cr ." also EOL sequence when flag = 1" cr
  52. make
  53. 0 begin
  54. ?cr pad bufsize readtext dup while \ not done
  55. ( a u2 flag) >r writedata r> 1+
  56. repeat drop drop drop
  57. closein closeout ;
  58.  
  59. : make-test ( a u -- )
  60. cr ." Making text file: " 2dup type cr make
  61. s" 123456789"
  62. 2dup 8 - writedata (cr) writedata
  63. 2dup 7 - writedata (cr) writedata
  64. 2dup 6 - writedata (cr) writedata
  65. 2dup 5 - writedata (cr) writedata
  66. 2dup 4 - writedata (cr) writedata
  67. 2dup 3 - writedata (cr) writedata
  68. 2dup 2 - writedata (cr) writedata
  69. 2dup 1 - writedata (cr) writedata
  70. writedata (cr) writedata
  71. closeout ;
  72.  
  73. : show ( a u -- )
  74. cr ." Showing: " 2dup type open
  75. cr begin pad 100 readtext0 while type cr repeat 2drop
  76. closein ;
  77.  
  78. : foobar
  79. page
  80. s" FOO" make-test s" FOO" show
  81. s" FOO" s" BAR" read&write s" BAR" show ;
  82.  
  83. foobar
  84.  
Add Comment
Please, Sign In to add comment