f

Forth package manager for theForthNet



\ Forth package manager version utils
\ (c)copyright 2016 by Gerald Wodni <gerald.wodni@gmail.com>

\ as Forth has no standardized way to interface with directories,
\ versions-numbers are stored in a version-file which contains
\ one entry per line. This avoids the need to read a directory

: open-or-create ( c-addr-path n-path -- fid ior )
    \ file exists and can be reopened
    2dup w/o open-file ?dup 0= if
        >r
        r@ file-size throw  \ get last byte
        r@ reposition-file  \ move file pointer there
        nip nip             \ remove path
        r> swap exit        \ return fid ior
    then
    \ otherwise create file
    2drop
    w/o create-file ;

\ open or create file and add line
: append-to-file ( c-addr-line n-line c-addr-path n-path -- ior )
    open-or-create throw
    >r r@ write-line throw
    r> close-file ;

\ s" 1.2.4" s" vers" append-to-file throw

256 constant max-line
max-line 2 + buffer: line-buffer

\ checking every line for a match
: scan-lines ( c-addr-line n-line fid -- f )
    >r
    begin
        line-buffer max-line r@ read-line throw
    while
        >r 2dup line-buffer r> compare 0=
        until
        2drop true
    else
        drop
        2drop false
    then rdrop ;

\ check if line is inside of file
: line-in-file ( c-addr-line n-line c-addr-path n-path -- f )
    r/o open-file if \ if file does not exist, return false
        false exit
    then
    >r r@ scan-lines
    r> close-file throw ;

by GeraldWodni

avatar of GeraldWodni

Versions

0.2.4, 0.2.2, 0.2.1, 0.2.0, 0.1.0

Download current as zip

Tags

gforth, theforth.net

Dependencies

None

Dependents

None