summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon <simon@hardwired.org.uk>2011-01-31 16:54:13 (GMT)
committer Simon <simon@hardwired.org.uk>2011-01-31 16:54:13 (GMT)
commit8363a21f23152cb2273b1240b8a2627d0a46d12d (patch)
treedcb2b3e93706eecd61dbbfc16d0325a4e8eb706f /src
parent61292f5355bb85b3e6e293c5c5b0a2de10d0cd2d (diff)
downloadpowder-8363a21f23152cb2273b1240b8a2627d0a46d12d.zip
powder-8363a21f23152cb2273b1240b8a2627d0a46d12d.tar.gz
ALL GLORY TO THE SAVASK
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c19
-rw-r--r--src/interface.c19
-rw-r--r--src/main.c29
-rw-r--r--src/misc.c13
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 :
diff --git a/src/main.c b/src/main.c
index ac439ba..94d42cb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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)
diff --git a/src/misc.c b/src/misc.c
index d5b57c5..702ff03 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -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");