summary refs log tree commit diff stats
path: root/lib/system/arithm.nim
Commit message (Collapse)AuthorAgeFilesLines
* styleCheck: make the compiler and large parts of the stdlib compatible with ↵Araq2019-07-101-32/+32
| | | | --styleCheck:error
* Fix corner case of checked div/mod on x86 (#10406)LemonBoy2019-01-221-15/+29
| | | Fixes #10377
* fixes #2909Araq2015-06-151-1/+1
|
* Merge pull request #2645 from def-/builtin_overflowAndreas Rumpf2015-06-071-54/+122
|\ | | | | Use builtin overflow functions of Clang and GCC (WIP, RFC)
| * Use -d:builtinOverflow for builtin overflow checksdef2015-05-081-141/+110
| | | | | | | | | | | | | | | | of recent Clang and GCC >= 5.0. Maybe it's better that it's optional after all. GCC's code with builtin overflow checks seems to be a bit slower actually, while Clang's is 3 times faster.
| * Use builtin overflow functions of Clang and GCC (WIP, RFC)def2015-05-031-0/+99
| | | | | | | | | | | | | | | | | | | | | | This only works with recent Clang and GCC 5.0. Currently it doesn't work because __has_builtin can't be defined. This is totally ugly. But we can't reliably detect whether we can use the builtins from Nim, especially with cross-compiling where the user may be using an older compiler version. Switching this on/off manually with a define seems weird as well, this should work automatically.
* | Move the noreturn pragma to sysFataldef2015-05-051-4/+4
|/ | | | | Now you can choose to implement sysFatal with --os:standalone so that it returns.
* Fix typosFederico Ceratto2015-02-151-1/+1
|
* system files use new identifiersAraq2014-08-231-5/+5
|
* the big renamefest: first stepsAraq2014-08-221-1/+1
|
* fixed #1491Charlie Barto2014-08-191-11/+17
|
* distinguish between 'defined' and 'declared'Araq2014-08-111-6/+6
|
* renamed noStackFrame to asmNoStackFrameAraq2014-02-181-6/+6
|
* --os:standalone works againAraq2013-06-301-5/+5
|
* Removes executable bit for text files.Grzegorz Adam Hankiewicz2013-03-161-0/+0
|
* allow 'mixin' in genericsAraq2012-10-121-1/+1
|
* bugfixes for closuresAraq2012-06-211-0/+3
|
* year 2012 for most copyright headersAraq2012-01-021-1/+1
|
* 'pure' is now 'noStackFrame' for procsAraq2011-08-191-6/+6
|
* fixed pango/pangoutils new wrappersAndreas Rumpf2010-02-261-0/+0
|
* continued work on html/xmlparserrumpf_a@web.de2010-02-141-0/+0
|
* floating point checksAndreas Rumpf2009-12-141-0/+18
|
* added tools and web dirsAndreas Rumpf2009-09-151-0/+0
|
* overload resolution for proc varsAndreas Rumpf2009-06-241-3/+3
|
* version0.7.10Andreas Rumpf2009-06-081-0/+316
>static char buf[256]; unsigned int len, olen; XGCValues gcv; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; XSetForeground(dpy, dc.gc, col[ColBG]); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); if(!text) return; w = 0; olen = len = strlen(text); if(len >= sizeof(buf)) len = sizeof(buf) - 1; memcpy(buf, text, len); buf[len] = 0; h = dc.font.ascent + dc.font.descent; y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; x = dc.x + (h / 2); /* shorten text if necessary */ while(len && (w = textnw(buf, len)) > dc.w - h) buf[--len] = 0; if(len < olen) { if(len > 1) buf[len - 1] = '.'; if(len > 2) buf[len - 2] = '.'; if(len > 3) buf[len - 3] = '.'; } if(w > dc.w) return; /* too long */ gcv.foreground = col[ColFG]; if(dc.font.set) { XChangeGC(dpy, dc.gc, GCForeground, &gcv); XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); } else { gcv.font = dc.font.xfont->fid; XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv); XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); } if(highlight) { r.x = dc.x + 2; r.y = dc.y + 2; r.width = r.height = 3; XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); } } /* extern */ void drawall() { Client *c; for(c = clients; c; c = getnext(c->next)) drawtitle(c); drawstatus(); } void drawstatus() { int i, x; dc.x = dc.y = 0; for(i = 0; i < ntags; i++) { dc.w = textw(tags[i]); if(seltag[i]) drawtext(tags[i], dc.sel, sel && sel->tags[i]); else drawtext(tags[i], dc.norm, sel && sel->tags[i]); dc.x += dc.w; } dc.w = bmw; drawtext(arrange == dotile ? TILESYMBOL : FLOATSYMBOL, dc.status, False); x = dc.x + dc.w; dc.w = textw(stext); dc.x = bx + bw - dc.w; if(dc.x < x) { dc.x = x; dc.w = bw - x; } drawtext(stext, dc.status, False); if((dc.w = dc.x - x) > bh) { dc.x = x; if(sel) drawtext(sel->name, dc.sel, False); else drawtext(NULL, dc.norm, False); } XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); XSync(dpy, False); } void drawtitle(Client *c) { if(c == sel && issel) { drawstatus(); XUnmapWindow(dpy, c->twin); XSetWindowBorder(dpy, c->win, dc.sel[ColBG]); return; } XSetWindowBorder(dpy, c->win, dc.norm[ColBG]); XMapWindow(dpy, c->twin); dc.x = dc.y = 0; dc.w = c->tw; drawtext(c->name, dc.norm, False); XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); XSync(dpy, False); } unsigned long getcolor(const char *colstr) { Colormap cmap = DefaultColormap(dpy, screen); XColor color; XAllocNamedColor(dpy, cmap, colstr, &color, &color); return color.pixel; } void setfont(const char *fontstr) { char **missing, *def; int i, n; missing = NULL; setlocale(LC_ALL, ""); if(dc.font.set) XFreeFontSet(dpy, dc.font.set); dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); if(missing) { while(n--) fprintf(stderr, "missing fontset: %s\n", missing[n]); XFreeStringList(missing); if(dc.font.set) { XFreeFontSet(dpy, dc.font.set); dc.font.set = NULL; } } if(dc.font.set) { XFontSetExtents *font_extents; XFontStruct **xfonts; char **font_names; dc.font.ascent = dc.font.descent = 0; font_extents = XExtentsOfFontSet(dc.font.set); n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) { if(dc.font.ascent < (*xfonts)->ascent) dc.font.ascent = (*xfonts)->ascent; if(dc.font.descent < (*xfonts)->descent) dc.font.descent = (*xfonts)->descent; xfonts++; } } else { if(dc.font.xfont) XFreeFont(dpy, dc.font.xfont); dc.font.xfont = NULL; dc.font.xfont = XLoadQueryFont(dpy, fontstr); if (!dc.font.xfont) dc.font.xfont = XLoadQueryFont(dpy, "fixed"); if (!dc.font.xfont) eprint("error, cannot init 'fixed' font\n"); dc.font.ascent = dc.font.xfont->ascent; dc.font.descent = dc.font.xfont->descent; } dc.font.height = dc.font.ascent + dc.font.descent; } unsigned int textw(const char *text) { return textnw(text, strlen(text)) + dc.font.height; }