scr2txt
Description of the page content
Forth program to convert a Forth screens file into normal text file.
There are many programs to do this task, translating a Forth screens file into an ordinary text file. Here you are mine.
It has an interesting feature: it can create a normal text file also from a TAP file created with Abersoft Forth, a Forth system for the Sinclair ZX Spectrum, when used under a ZX Spectrum emulator.
Source code
\ --------------------------------------------------------
cr .( scr2txt )
\ Tool for converting a Forth screens file (or an Abersofth
\ Forth screens file saved in a TAP file with a ZX Spectrum
\ emulator) into a normal text.
\ Copyright (C) 2005,2009,2010,2012 Marcos Cruz (programandala.net)
\ License: http://programandala.net/license
\ Program written in ANS Forth.
\ Tested with Gforth.
\ --------------------------------------------------------
\ History
\ 2005-05-28 First working version.
\ 2005-10-24 The words are renamed into Engligh.
\ 2009-05-23 All words renamed. Some factoring. New word tap>txt .
\ 2010-01-30 Two bugs fixed. One little change.
\ 2012-05-03 Typos fixed.
\ --------------------------------------------------------
64 constant lenght \ screen file line lenght
variable line lenght chars allot \ screen file line buffer
variable screen_file \ file id
variable text_file \ file id
: is_screen_file ( a u -- )
\ a u = screen file name
r/o open-file abort" open screen file error"
screen_file !
;
: is_text_file ( a u -- )
\ a u = text file name
w/o create-file abort" create text file error"
text_file !
;
: close_files ( -- )
screen_file @ close-file abort" close screen file error"
text_file @ close-file abort" close text file error"
;
: open_files ( a1 u1 a2 u2 -- )
\ a1 u1 = screen file name
\ a2 u2 = tetx file name
\ 2009-05-23 Factored from scr>txt .
is_text_file is_screen_file
;
: (scr>txt) ( -- )
\ 2009-05-23 Factored from scr>txt .
\ 2010-01-30 cr moved before type .
begin
line lenght screen_file @ read-file
0= over 0<> and \ No I/O error and some bytes read?
while
line swap -trailing 2dup cr type
text_file @ write-line abort" line write error"
repeat
;
: scr>txt ( a1 u1 a2 u2 -- )
\ a1 u1 = screen file name
\ a2 u2 = text file name
\ 2009-05-23 Factored out with (scr>txt) .
open_files (scr>txt) close_files
;
: skip_tap_header ( -- )
\ 2009-05-23 First version.
\ 2010-01-30 Bug fixed: The bytes count has to be a double number!
\ 2010-01-30 Bug fixed: The error code returned
\ by 'repositon-file' was left on the stack!
24 s>d screen_file @ reposition-file abort" reposition-file error"
;
: tap>txt ( a1 u1 a2 u2 -- )
\ a1 u1 = TAP file name from Abersoft Forth (Sinclair ZX Spectrum)
\ a2 u2 = text file name
\ 2009-05-23 First version.
open_files skip_tap_header (scr>txt) close_files
;
.( scr2txt ok!) cr
cr .( Usage: )
cr .( s" program.fb" s" program.fs" scr>txt)
cr .( s" program.tap" s" program.fs" tap>txt)