-- Copyright 1993-1997, by the Cecil Project -- Department of Computer Science and Engineering, University of Washington -- See the LICENSE file for license information. prim c_++: " extern \"C++\" { #include \"file.h\" #include \"objectIO.h\" } #include "; method write_object_to_file_name(obj:any, f_name:string):void { write_object_to_file_name(obj, f_name, &(:int){ error("Error writing object to " || f_name); }); } method write_object_to_file_name(obj:any, f_name:string, if_error:&(int):void):void { let f:unix_file := open_file(f_name, create_for_writing, &(e:int){ eval(if_error, e); ^ }); write_object_to_file(obj, f, if_error); close(f); } method write_object_to_file(x:any, f@:unix_file, use_bs@:bool):void { write_object_to_file(x, f, use_bs, &(:int){ error("Error writing object to file"); }); } method write_object_to_file(x:any, f@:unix_file, if_error@closure:&(int):void):void { -- default to using backspaces to erase characters write_object_to_file(x, f, true, if_error) } method write_object_to_file(x:any, f@:unix_file, use_bs@:bool, if_error:&(int):void):void { write_object_to_file(x, f, use_bs.as_integer, if_error); } private method write_object_to_file(x:any, f@:unix_file, use_bs@:int, if_error:&(int):void):void (** sends(eval([if_error],[int])), return_type(void) **) { prim c_++: " CecilFileObject* fl = f->asFile(); fl->clear_err(); writeObjectToFile(fl->getFileStruct(), x, use_bs->asInt()); if (fl->had_error()) { OOP pr_t1; SEND(pr_t1, eval, 0, 2, (if_error, asTaggedInt(errno))); } SET_RESULT(BASE(void)); " } method read_object_from_file_name(f_name@:string, use_bs:bool):dynamic { read_object_from_file_name(f_name, use_bs, &(:int){ error("Error reading object from " || f_name) }) } method read_object_from_file_name(f_name@:string, use_bs:bool, if_error:&(int):dynamic):dynamic { let error := &(e:int){ ^ eval(if_error, e) }; let f:unix_file := open_file(f_name, open_for_reading, error); let result:dynamic := read_object_from_file(f, use_bs, error); close(f); result } method read_object_from_file(f@:unix_file, use_bs@:bool):dynamic { read_object_from_file(f, use_bs, &(:int){ error("Error reading object from file") }) } method read_object_from_file(f@:unix_file, if_error@closure:&(int):dynamic):dynamic { -- default to using backspaces to erase characters read_object_from_file(f, true, if_error) } method read_object_from_file(f@:unix_file, use_bs:bool, if_error:&(int):dynamic):dynamic { read_object_from_file(f, use_bs.as_integer, if_error) } private method read_object_from_file(f@:unix_file, use_bs@:int, if_error:&(int):dynamic):dynamic (** sends(r1 = eval([if_error],[int])), return_type(r1, unknown) **) { prim c_++: " CecilFileObject* fl = f->asFile(); fl->clear_err(); OOP objRead = readObjectFromFile(fl->getFileStruct(), use_bs->asInt()); if (fl->had_error()) { OOP pr_t1; SEND(pr_t1, eval, 0, 2, (if_error, asTaggedInt(errno))); SET_RESULT(pr_t1); } else { SET_RESULT(objRead); } " }