/* isexported -- is a variable exported? */ static Boolean isexported(const char *name) { if (specialvar(name)) return FALSE; if (noexport == NULL) return TRUE; return dictget(noexport, name) == NULL; }
extern void varpush(Push *push, char *name, List *defn) { Var *var; validatevar(name); push->name = name; push->nameroot.next = rootlist; push->nameroot.p = (void **) &push->name; rootlist = &push->nameroot; if (isexported(name)) isdirty = TRUE; defn = callsettor(name, defn); var = dictget(vars, push->name); if (var == NULL) { push->defn = NULL; push->flags = 0; var = mkvar(defn); vars = dictput(vars, push->name, var); } else { push->defn = var->defn; push->flags = var->flags; var->defn = defn; var->env = NULL; var->flags = hasbindings(defn) ? var_hasbindings : 0; } push->next = pushlist; pushlist = push; push->defnroot.next = rootlist; push->defnroot.p = (void **) &push->defn; rootlist = &push->defnroot; }
extern void varpop(Push *push) { Var *var; assert(pushlist == push); assert(rootlist == &push->defnroot); assert(rootlist->next == &push->nameroot); if (isexported(push->name)) isdirty = TRUE; push->defn = callsettor(push->name, push->defn); var = dictget(vars, push->name); if (var != NULL) if (push->defn != NULL) { var->defn = push->defn; var->flags = push->flags; var->env = NULL; } else vars = dictput(vars, push->name, NULL); else if (push->defn != NULL) { var = mkvar(NULL); var->defn = push->defn; var->flags = push->flags; vars = dictput(vars, push->name, var); } pushlist = pushlist->next; rootlist = rootlist->next->next; }
extern void vardef(char *name, Binding *binding, List *defn) { Var *var; validatevar(name); for (; binding != NULL; binding = binding->next) if (streq(name, binding->name)) { binding->defn = defn; rebound = TRUE; return; } RefAdd(name); defn = callsettor(name, defn); if (isexported(name)) isdirty = TRUE; var = dictget(vars, name); if (var != NULL) if (defn != NULL) { var->defn = defn; var->env = NULL; var->flags = hasbindings(defn) ? var_hasbindings : 0; } else vars = dictput(vars, name, NULL); else if (defn != NULL) { var = mkvar(defn); vars = dictput(vars, name, var); } RefRemove(name); }
extern List *prim(char *s, List *list, Binding *binding, int evalflags) { List *(*p)(List *, Binding *, int); p = (List *(*)(List *, Binding *, int)) dictget(prims, s); if (p == NULL) fail("es:prim", "unknown primitive: %s", s); return (*p)(list, binding, evalflags); }
int main() { dict_t valeur = dictcreate(); dict_t* dico = &valeur; dictdump(dico); dico = dictadd(dico, "Lamantin", "Sympathique animal marin"); dico = dictadd(dico, "Loutre", "Rongeur de rivieres"); dico = dictadd(dico, "Pelican", "Oiseau au grand bec"); dico = dictadd(dico, "Stupide", "Definition inutile!!!!!"); dico = dictadd(dico, "Crocodile", "Dangereux saurien"); dico = dictup(dico, "Loutre", "Rongeur de rivieres au pelage soyeux"); dico = dictrm(dico, "Stupide"); dictdump(dico); char buf[200]; dictget(dico, "Loutre", buf); printf("La definition de Loutre est %s\n", buf); printf("Le dictionnaire fait presentement %d taille %d maxtaille\n", (*dico).size, (*dico).maxsize); dictdestroy(dico); }
/* varlookup -- lookup a variable in the current context */ extern List *varlookup(const char *name, Binding *bp) { Var *var; if (iscounting(name)) { Term *term = nth(varlookup("*", bp), strtol(name, NULL, 10)); if (term == NULL) return NULL; return mklist(term, NULL); } validatevar(name); for (; bp != NULL; bp = bp->next) if (streq(name, bp->name)) return bp->defn; var = dictget(vars, name); if (var == NULL) return NULL; return var->defn; }
bool macosxAppendAvailableScreenResolutions(QList<QSize> &resolutions, QSize minSize, QPoint screenPoint) { CGDirectDisplayID display = displayAtPoint(screenPoint); if (display == kCGNullDirectDisplay) { return false; } #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 bool modern = (CGDisplayCopyAllDisplayModes != NULL); // where 'modern' means >= 10.6 #endif CFArrayRef displayModes; #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 if (modern) { displayModes = CGDisplayCopyAllDisplayModes(display, NULL); } else #endif { displayModes = CGDisplayAvailableModes(display); } #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 CFStringRef currentPixelEncoding = NULL; #endif double currentRefreshRate; int curBPP, curBPS, curSPP; #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 if (modern) { CGDisplayModeRef currentDisplayMode = CGDisplayCopyDisplayMode(display); currentRefreshRate = CGDisplayModeGetRefreshRate(currentDisplayMode); currentPixelEncoding = CGDisplayModeCopyPixelEncoding(currentDisplayMode); CFRelease(currentDisplayMode); } else #endif { CFDictionaryRef currentDisplayMode = CGDisplayCurrentMode(display); dictget(currentDisplayMode, Double, kCGDisplayRefreshRate, ¤tRefreshRate); dictget(currentDisplayMode, Int, kCGDisplayBitsPerPixel, &curBPP); dictget(currentDisplayMode, Int, kCGDisplayBitsPerSample, &curBPS); dictget(currentDisplayMode, Int, kCGDisplaySamplesPerPixel, &curSPP); } for (CFIndex j = 0, c = CFArrayGetCount(displayModes); j < c; j++) { int width, height; double refreshRate; bool pixelEncodingsEqual; #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 if (modern) { CGDisplayModeRef displayMode = (CGDisplayModeRef)CFArrayGetValueAtIndex(displayModes, j); width = (int)CGDisplayModeGetWidth(displayMode); height = (int)CGDisplayModeGetHeight(displayMode); refreshRate = CGDisplayModeGetRefreshRate(displayMode); CFStringRef pixelEncoding = CGDisplayModeCopyPixelEncoding(displayMode); pixelEncodingsEqual = (CFStringCompare(pixelEncoding, currentPixelEncoding, 0) == kCFCompareEqualTo); CFRelease(pixelEncoding); } else #endif { CFDictionaryRef displayMode = (CFDictionaryRef)CFArrayGetValueAtIndex(displayModes, j); dictget(displayMode, Int, kCGDisplayWidth, &width); dictget(displayMode, Int, kCGDisplayHeight, &height); dictget(displayMode, Double, kCGDisplayRefreshRate, &refreshRate); int bpp, bps, spp; dictget(displayMode, Int, kCGDisplayBitsPerPixel, &bpp); dictget(displayMode, Int, kCGDisplayBitsPerSample, &bps); dictget(displayMode, Int, kCGDisplaySamplesPerPixel, &spp); pixelEncodingsEqual = (bpp == curBPP && bps == curBPS && spp == curSPP); } QSize res(width, height); if (!resolutions.contains(res) && width >= minSize.width() && height >= minSize.height() && refreshRate == currentRefreshRate && pixelEncodingsEqual) { resolutions += res; } } #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 if (modern) { CFRelease(currentPixelEncoding); CFRelease(displayModes); } #endif return true; }
bool macosxSetScreenResolution(QSize resolution, QPoint screenPoint) { CGDirectDisplayID display = displayAtPoint(screenPoint); if (display == kCGNullDirectDisplay) { return false; } #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 if (CGDisplayCopyAllDisplayModes != NULL) { bool ok = false; CGDisplayModeRef currentMainDisplayMode = CGDisplayCopyDisplayMode(display); CFStringRef currentPixelEncoding = CGDisplayModeCopyPixelEncoding(currentMainDisplayMode); CFArrayRef displayModes = CGDisplayCopyAllDisplayModes(display, NULL); for (CFIndex i = 0, c = CFArrayGetCount(displayModes); i < c; i++) { bool isEqual = false; CGDisplayModeRef mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(displayModes, i); CFStringRef pixelEncoding = CGDisplayModeCopyPixelEncoding(mode); if (CFStringCompare(pixelEncoding, currentPixelEncoding, 0) == kCFCompareEqualTo && CGDisplayModeGetWidth(mode) == (size_t)resolution.width() && CGDisplayModeGetHeight(mode) == (size_t)resolution.height()) { isEqual = true; } CFRelease(pixelEncoding); if (isEqual) { CGDisplaySetDisplayMode(display, mode, NULL); ok = true; break; } } CFRelease(currentPixelEncoding); CFRelease(displayModes); return ok; } else #endif { CFDictionaryRef currentMainDisplayMode = CGDisplayCurrentMode(display); int bpp; dictget(currentMainDisplayMode, Int, kCGDisplayBitsPerPixel, &bpp); boolean_t exactMatch = false; CFDictionaryRef bestMode = CGDisplayBestModeForParameters(display, bpp, resolution.width(), resolution.height(), &exactMatch); if (bestMode != NULL) { if (!exactMatch) { qWarning("No optimal display mode for requested parameters."); } CGDisplaySwitchToMode(display, bestMode); return true; } else { qWarning("Bad resolution change: Invalid display."); return false; } } }