From 821ddd9551a9138b14f2ca1252e43c1521581071 Mon Sep 17 00:00:00 2001 From: kramm Date: Tue, 29 Apr 2003 19:08:42 +0000 Subject: [PATCH] fix for negative coordinates. --- src/parser.lex | 4 ++-- src/swfc.c | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/parser.lex b/src/parser.lex index beca943..4ccf2c0 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -163,8 +163,8 @@ void handleInclude(char*text, int len) %x BINARY NAME [a-zA-Z_./](-*[a-zA-Z0-9_./])* -TWIP ([0-9]+(\.([0-9]([05])?)?)?) -NUMBER [0-9]+(\.[0-9]*)? +TWIP (-?[0-9]+(\.([0-9]([05])?)?)?) +NUMBER -?[0-9]+(\.[0-9]*)? PERCENT {NUMBER}% STRING (\\.|[^\\"\n])* S [ \n\r\t] diff --git a/src/swfc.c b/src/swfc.c index db12bd7..aa8fe6b 100644 --- a/src/swfc.c +++ b/src/swfc.c @@ -1051,11 +1051,18 @@ int parseInt(char*str) } int parseTwip(char*str) { - char*dot = strchr(str, '.'); + char*dot; + int sign=1; + if(str[0]=='+' || str[0]=='-') { + if(str[0]=='-') + sign = -1; + str++; + } + dot = strchr(str, '.'); if(!dot) { int l=strlen(str); int t; - return parseInt(str)*20; + return sign*parseInt(str)*20; } else { int l=strlen(++dot); char*s; @@ -1072,11 +1079,11 @@ int parseTwip(char*str) l=2; } if(l==0) - return atoi(str)*20; + return sign*atoi(str)*20; if(l==1) - return atoi(str)*20+atoi(dot)*2; + return sign*atoi(str)*20+atoi(dot)*2; if(l==2) - return atoi(str)*20+atoi(dot)/5; + return sign*atoi(str)*20+atoi(dot)/5; } return 0; } -- 1.7.10.4