warnings off 0 field: field-len field: field-maxlen 2field: field-tag 0 +field field-buffer constant field-struct : make-field ( c-addr u u2 "name" -- ) create 0 , , 2, ; s" Titel" 400 make-field titel s" Autor" 400 make-field autor s" Jahr" 400 make-field jahr s" Verlag" 400 make-field verlag s" Verlagsort" 400 make-field ort s" ISBN" 400 make-field isbn variable inventarnr 2variable art : clear-field ( field -- ) 0 swap field-len ! ; : next-book ( -- ) 1 inventarnr +! titel clear-field autor clear-field jahr clear-field verlag clear-field ort clear-field isbn clear-field ; : backspaces ( u -- ) 0 ?do .\" \b \b" loop ; : input-art ( -- ) cr s" Art (1=Buch; 2=Buch mit CD, 3=CD, 4=Dipl., 5=Diss., 6=Habil.)? " tuck type begin case key '1' of s" Buch" endof '2' of s" Buch mit CD" endof '3' of s" CD" endof '4' of s" Diplomarbeit" endof '5' of s" Dissertation" endof '6' of s" Habilitation" endof drop 0 0 endcase dup until 2dup art 2! rot 3 - backspaces ." : " type ; : input-field { f -- } cr f field-tag 2@ type ." : " f field-buffer f field-maxlen @ f field-len @ edit-line f field-len ! ; : input-book ( -- ) cr ." Inventarnr: " inventarnr ? input-art titel input-field autor input-field jahr input-field verlag input-field ort input-field isbn input-field ; : write-field { f -- } f field-buffer f field-len @ type '^' emit ; : write-book { -- } titel write-field autor write-field jahr write-field verlag write-field ort write-field isbn write-field inventarnr @ 0 .r ." ^^" art 2@ type ; : y/n? ( -- f ) begin key dup 'j' = over 'n' = or until dup emit 'j' = ; : main begin next-book begin input-book cr ." Eingabe ok (j/n)? " y/n? until cr write-book cr cr ." Zum Beenden Fenster schliessen" again ;