\ Record handling demonstration (c) 2005,2008 J.L Bezemer \ file handle file records \ define structure Address struct 64 chars +field Street 32 chars +field City end-struct /Address \ extend structure Address to Person /Address 32 chars +field Name 12 chars +field Age end-struct /Person \ define record 16 constant #Persons \ number of persons in array /Person #Persons [*] constant /Persons \ total size of array in bytes /Persons string Persons \ instanciate structure Persons constant 'Persons \ copy address \ make Persons addressable :this Persons does> swap /Person * + ; \ Show a field : ShowField type count type cr ; \ print contents of the record : ShowPerson ( --) >r cr r@ Persons -> Name s" Name : " ShowField r@ Persons -> Street s" Street : " ShowField r@ Persons -> City s" City : " ShowField r@ Persons -> Age s" Age : " ShowField cr r> drop ; \ open a file : OpenFile ( m --) s" records.dbf" rot open error? ( h f) abort" Cannot open file!" \ exit on error dup to records ( h h) use ( --) ; \ Initialize a field : InitField Persons + place ; \ initialize fields 0 >r \ save index s" Hans Bezemer" r@ Persons -> Name place s" Lagendijk 79" r@ Persons -> Street place s" Den Helder" r@ Persons -> City place s" 36" r@ Persons -> Age place r> 1+ >r \ increment index s" Linus Torvalds" r@ Persons -> Name place s" 201 Rodeo Drive" r@ Persons -> Street place s" San Diego" r@ Persons -> City place s" 36" r@ Persons -> Age place r> drop \ drop index 0 ShowPerson \ show the data 1 ShowPerson ." Writing file.." cr output OpenFile \ open the outputfile 'Persons /Persons type \ save data records close \ close file ." Erasing data.." cr 'Persons /Persons blank \ erase buffer ." Reading file.." cr input OpenFile \ open the inputfile 'Persons /Persons accept \ read data records close \ close file /Persons = \ if no IO errors if 0 ShowPerson \ show the data 1 ShowPerson else ." Reading error!" cr \ else message then