\ 4tH library - XLS writer - Copyright 2004,2009 J.L. Bezemer \ You can redistribute this file and/or modify it under \ the terms of the GNU General Public License \ Note: Only one XLS file can be open at the time. \ That is why no handle is returned. \ You HAVE to close the file using XLSclose! \ This format may not be supported by other \ spreadsheet applications (e.g. OOo). [UNDEFINED] XLStype [IF] \ private declarations variable XLSrow \ Excel row number (starts at zero) variable XLScol \ Excel column number (starts at zero) file XLS \ file descriptor for XLS file 255 constant 8bit \ 8 bit mask 65535 constant 16bit \ 16 bit mask 638 constant XLS_RK \ Excel code for RK number 516 constant XLS_STR \ Excel code for string \ this writes a 16bit unsigned number : .XLSshort dup 8bit and emit 8 rshift 8bit and emit ; : .XLSzero 0 dup emit emit ; \ this writes a 16bit zero \ this writes a BIFF record : .BIFF ( n1 n2 --) XLS use .XLSshort .XLSshort XLSrow @ .XLSshort XLScol @ .XLSshort .XLSzero 1 XLScol +! \ move to next column ; \ this writes a signed 30bit RK number : .RK ( n --) dup abs 2 lshift swap 0< if negate then 2 or dup 16bit and .XLSshort 16 rshift 16bit and .XLSshort ; \ break down RK number (little endian) \ XLS equivalents of CR, AT-XY, . and TYPE : XLScr 0 XLScol ! 1 XLSrow +! ; ( --) : XLSatxy XLScol ! XLSrow ! ; ( row col --) : XLS. 10 XLS_RK .BIFF .RK ; ( n --) : XLStype dup 8 + XLS_STR .BIFF dup .XLSshort type ; ( a n --) \ This opens a file as XLS file : XLSopen ( a n --) 2dup output open dup to XLS error? \ open file if \ if not successful drop stdout use ." Cannot open " type cr abort else \ else use it use 0 dup XLSrow ! XLScol ! \ init variables 2057 .XLSshort 8 .XLSshort .XLSzero 16 .XLSshort .XLSzero .XLSzero 2drop then ; \ This closes the XLS file : XLSclose ( --) XLS dup use \ use XLS and write footer 125 .XLSshort 11 .XLSshort 3 .XLSshort 4 .XLSshort 25600 .XLSshort .XLSzero .XLSzero 2560 .XLSshort .XLSzero 0 emit close \ close the file ; [DEFINED] 4TH# [IF] hide 8bit hide 16bit hide XLS_STR hide XLS_RK hide XLSrow hide XLScol hide XLS hide .XLSshort hide .XLSzero hide .RK hide .BIFF [THEN] [THEN]