FrObject *string_to_Frame(const char *&input, const char *) { FrFrame *frame ; FrSymbol *name ; input++ ; // consume the initial left bracket name = string_to_Symbol(input) ; // read frame name if (name && name->symbolp()) // the name must be a symbol { frame = find_vframe_inline(name) ; if (!frame) frame = (read_as_VFrame && FramepaC_new_VFrame) ? FramepaC_new_VFrame(name) : new FrFrame(name) ; while (FrSkipWhitespace(input) == '[') string_to_Slot(input,frame) ; if (*input == ']') input++ ; else FrWarning(errmsg_frame_malformed) ; return frame ; } else { FrWarning(errmsg_frame_name) ; return 0 ; } }
bool FrSymbol::isLocked() const { FrFrame *fr = find_vframe_inline(this) ; if (fr) return fr->isLocked() ; else if (VFrame_Info) return VFrame_Info->isLocked(this) ; else return false ; }
FrFrame *FrSymbol::lockFrame() { FrFrame *fr = find_vframe_inline(this) ; if (fr && !fr->isLocked() && VFrame_Info) { if (VFrame_Info->lockFrame(this)) fr->setLock(true) ; else { FrWarningVA("unable to lock frame %s",symbolName()) ; return 0 ; } } return fr ; }
static FrObject *read_Frame(istream &input, const char *) { input.get() ; // consume the initial left bracket FrSymbol *name ; name = read_Symbol(input) ; // read frame name if (!name || !name->symbolp()) // the name must be a symbol { FrWarning(errmsg_frame_name) ; free_object(name) ; return 0 ; } FrFrame *frame = find_vframe_inline(name) ; if (!frame) frame = (read_as_VFrame && FramepaC_new_VFrame) ? FramepaC_new_VFrame(name) : new FrFrame(name) ; while (FrSkipWhitespace(input) == '[') read_Slot(input,frame) ; if (input.get() != ']') // next non-whitespace char may be EOF FrWarning(errmsg_frame_malformed) ; return frame ; }