BOOL read_attr_cfg(scfg_t* cfg, char* error) { char* p; char str[256],fname[13]; long offset=0; FILE *instream; strcpy(fname,"attr.cfg"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d opening %s",errno,str); return(FALSE); } FREE_AND_NULL(cfg->color); if((cfg->color=malloc(MIN_COLORS))==NULL) { sprintf(error,"Error allocating memory (%u bytes) for colors" ,MIN_COLORS); return(FALSE); } memset(cfg->color,LIGHTGRAY|HIGH,MIN_COLORS); for(cfg->total_colors=0;!feof(instream) && !ferror(instream);cfg->total_colors++) { if(readline(&offset,str,4,instream)==NULL) break; if(cfg->total_colors>=MIN_COLORS) { if((p=realloc(cfg->color,cfg->total_colors+1))==NULL) break; cfg->color=p; } cfg->color[cfg->total_colors]=attrstr(str); } fclose(instream); if(cfg->total_colors<MIN_COLORS) cfg->total_colors=MIN_COLORS; return(TRUE); }
static void js_set_attr(JSContext* cx, sbbs_t* sbbs, jsval val) { int32 attr; if(JSVAL_IS_STRING(val)) attr=attrstr(js_ValueToStringBytes(cx,val,NULL)); else JS_ValueToInt32(cx, val, &attr); sbbs->attr(attr); }
void XULPersist::Persist(Element* aElement, int32_t aNameSpaceID, nsAtom* aAttribute) { if (!mDocument) { return; } // For non-chrome documents, persistance is simply broken if (!nsContentUtils::IsSystemPrincipal(mDocument->NodePrincipal())) { return; } if (!mLocalStore) { mLocalStore = do_GetService("@mozilla.org/xul/xulstore;1"); if (NS_WARN_IF(!mLocalStore)) { return; } } nsAutoString id; aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::id, id); nsAtomString attrstr(aAttribute); nsAutoString valuestr; aElement->GetAttr(kNameSpaceID_None, aAttribute, valuestr); nsAutoCString utf8uri; nsresult rv = mDocument->GetDocumentURI()->GetSpec(utf8uri); if (NS_WARN_IF(NS_FAILED(rv))) { return; } NS_ConvertUTF8toUTF16 uri(utf8uri); bool hasAttr; rv = mLocalStore->HasValue(uri, id, attrstr, &hasAttr); if (NS_WARN_IF(NS_FAILED(rv))) { return; } if (hasAttr && valuestr.IsEmpty()) { mLocalStore->RemoveValue(uri, id, attrstr); return; } // Persisting attributes to top level windows is handled by nsXULWindow. if (aElement->IsXULElement(nsGkAtoms::window)) { if (nsCOMPtr<nsIXULWindow> win = mDocument->GetXULWindowIfToplevelChrome()) { return; } } mLocalStore->SetValue(uri, id, attrstr, valuestr); }
static JSBool js_console_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { int32 val=0; jsint tiny; sbbs_t* sbbs; JSString* str; if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) return(JS_FALSE); tiny = JSVAL_TO_INT(id); if(JSVAL_IS_NUMBER(*vp) || JSVAL_IS_BOOLEAN(*vp)) JS_ValueToInt32(cx, *vp, &val); switch(tiny) { case CON_PROP_STATUS: sbbs->console=val; break; case CON_PROP_LNCNTR: sbbs->lncntr=val; break; case CON_PROP_ATTR: if(JSVAL_IS_STRING(*vp)) { if((str=JS_ValueToString(cx, *vp))==NULL) break; val=attrstr(JS_GetStringBytes(str)); } sbbs->attr(val); break; case CON_PROP_TOS: sbbs->tos=val; break; case CON_PROP_ROWS: sbbs->rows=val; break; case CON_PROP_COLUMNS: sbbs->cols=val; break; case CON_PROP_AUTOTERM: sbbs->autoterm=val; break; case CON_PROP_TERMINAL: if((str=JS_ValueToString(cx, *vp))==NULL) break; SAFECOPY(sbbs->terminal,JS_GetStringBytes(str)); break; case CON_PROP_TIMEOUT: sbbs->timeout=val; break; case CON_PROP_TIMELEFT_WARN: sbbs->timeleft_warn=val; break; case CON_PROP_ABORTED: if(val) sbbs->sys_status|=SS_ABORT; else sbbs->sys_status&=~SS_ABORT; break; case CON_PROP_ABORTABLE: sbbs->rio_abortable=val ? true:false; // This is a dumb bool conversion to make BC++ happy break; case CON_PROP_TELNET_MODE: sbbs->telnet_mode=val; break; case CON_PROP_GETSTR_OFFSET: sbbs->getstr_offset=val; break; case CON_PROP_QUESTION: if((str=JS_ValueToString(cx, *vp))==NULL) break; SAFECOPY(sbbs->question,JS_GetStringBytes(str)); break; case CON_PROP_CTRLKEY_PASSTHRU: if(JSVAL_IS_STRING(*vp)) { /* op can be 0 for replace, + for add, or - for remove */ int op=0; char *s; char ctrl; if((str=JS_ValueToString(cx, *vp))==NULL) break; val=sbbs->cfg.ctrlkey_passthru; for(s=JS_GetStringBytes(str); *s; s++) { if(*s=='+') op=1; else if(*s=='-') op=2; else { if(!op) { val=0; op=1; } ctrl=toupper(*s); ctrl&=0x1f; /* Ensure it fits */ switch(op) { case 1: /* Add to the set */ val |= 1<<ctrl; break; case 2: /* Remove from the set */ val &= ~(1<<ctrl); break; } } } } sbbs->cfg.ctrlkey_passthru=val; break; default: return(JS_TRUE); } return(JS_TRUE); }