diff options
| author | Simon <simon@hardwired.org.uk> | 2011-01-31 16:54:13 (GMT) |
|---|---|---|
| committer | Simon <simon@hardwired.org.uk> | 2011-01-31 16:54:13 (GMT) |
| commit | 8363a21f23152cb2273b1240b8a2627d0a46d12d (patch) | |
| tree | dcb2b3e93706eecd61dbbfc16d0325a4e8eb706f /src | |
| parent | 61292f5355bb85b3e6e293c5c5b0a2de10d0cd2d (diff) | |
| download | powder-8363a21f23152cb2273b1240b8a2627d0a46d12d.zip powder-8363a21f23152cb2273b1240b8a2627d0a46d12d.tar.gz | |
ALL GLORY TO THE SAVASK
Diffstat (limited to 'src')
| -rw-r--r-- | src/graphics.c | 19 | ||||
| -rw-r--r-- | src/interface.c | 19 | ||||
| -rw-r--r-- | src/main.c | 29 | ||||
| -rw-r--r-- | src/misc.c | 13 |
4 files changed, 77 insertions, 3 deletions
diff --git a/src/graphics.c b/src/graphics.c index b18a659..786bdca 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -2885,10 +2885,10 @@ void draw_parts(pixel *vid) void render_signs(pixel *vid_buf) { int i, j, x, y, w, h, dx, dy,mx,my,b=1,bq; - char buff[30]; //Buffer for (i=0; i<MAXSIGNS; i++) if (signs[i].text[0]) { + char buff[256]; //Buffer get_sign_pos(i, &x, &y, &w, &h); clearrect(vid_buf, x, y, w, h); drawrect(vid_buf, x, y, w, h, 192, 192, 192, 255); @@ -2907,9 +2907,24 @@ void render_signs(pixel *vid_buf) sprintf(buff, "Temp: 0.00"); //...tempirature drawtext(vid_buf, x+3, y+3, buff, 255, 255, 255, 255); } + + if(sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0) + { + int sldr, startm; + memset(buff, 0, sizeof(buff)); + for(sldr=3; signs[i].text[sldr-1] != '|'; sldr++) + startm = sldr + 1; + sldr = startm; + while(signs[i].text[sldr] != '}') + { + buff[sldr - startm] = signs[i].text[sldr]; + sldr++; + } + drawtext(vid_buf, x+3, y+3, buff, 0, 191, 255, 255); + } //Usual text - if (strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}")) + if(strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}") && sregexp(signs[i].text, "^{c:[0-9]*|.*}$")) drawtext(vid_buf, x+3, y+3, signs[i].text, 255, 255, 255, 255); x = signs[i].x; diff --git a/src/interface.c b/src/interface.c index 23359ed..7661ae1 100644 --- a/src/interface.c +++ b/src/interface.c @@ -89,8 +89,25 @@ void get_sign_pos(int i, int *x0, int *y0, int *w, int *h) if (strcmp(signs[i].text, "{t}")==0) *w = textwidth("Temp: 0000.00"); + if(sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0) + { + int sldr, startm; + char buff[256]; + memset(buff, 0, sizeof(buff)); + for(sldr=3; signs[i].text[sldr-1] != '|'; sldr++) + startm = sldr + 1; + + sldr = startm; + while(signs[i].text[sldr] != '}') + { + buff[sldr - startm] = signs[i].text[sldr]; + sldr++; + } + *w = textwidth(buff) + 5; + } + //Ususal width - if (strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}")) + if (strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}") && sregexp(signs[i].text, "^{c:[0-9]*|.*}$")) *w = textwidth(signs[i].text) + 5; *h = 14; *x0 = (signs[i].ju == 2) ? signs[i].x - *w : @@ -2407,8 +2407,37 @@ int main(int argc, char *argv[]) } else if (y<YRES) { + int signi; + c = (b&1) ? sl : sr; su = c; + + if(c!=WL_SIGN+100) + { + if(!bq) + for(signi=0; signi<MAXSIGNS; signi++) + if(sregexp(signs[signi].text, "^{c:[0-9]*|.*}$")==0) + { + int signx, signy, signw, signh; + get_sign_pos(signi, &signx, &signy, &signw, &signh); + if(x>=signx && x<=signx+signw && y>=signy && y<=signy+signh) + { + char buff[256]; + int sldr; + + memset(buff, 0, sizeof(buff)); + + for(sldr=3; signs[signi].text[sldr] != '|'; sldr++) + buff[sldr-3] = signs[signi].text[sldr]; + + char buff2[sldr-2]; //TODO: Fix this for Visual Studio + memset(buff2, 0, sizeof(buff2)); + memcpy(&buff2, &buff, sldr-3); + open_ui(vid_buf, buff2, 0); + } + } + } + if (c==WL_SIGN+100) { if (!bq) @@ -1,6 +1,8 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <regex.h> +#include <sys/types.h> #include "misc.h" #include "defines.h" #include "interface.h" @@ -116,6 +118,17 @@ void save_presets(int do_update) fclose(f); } +int sregexp(const char *str, char *pattern) +{ + int result; + regex_t patternc; + if(regcomp(&patternc, pattern, 0)!=0) + return 1; + result = regexec(&patternc, str, 0, NULL, 0); + regfree(&patternc); + return result; +} + void load_presets(void) { FILE *f=fopen("powder.def", "rb"); |
