summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipng/papersiz.c
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
committerKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
commit487ca4806cc046076293cf6cc5fbba0db282bac7 (patch)
tree847b412ab5158dd7bdd7ed7e5a4cc3fbca94be32 /Build/source/texk/dvipng/papersiz.c
parenta3d3111bfe26b8e5f5bc6049dfb2a4ca2edc7881 (diff)
texk 1
git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipng/papersiz.c')
-rw-r--r--Build/source/texk/dvipng/papersiz.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/Build/source/texk/dvipng/papersiz.c b/Build/source/texk/dvipng/papersiz.c
new file mode 100644
index 00000000000..fa8117b600a
--- /dev/null
+++ b/Build/source/texk/dvipng/papersiz.c
@@ -0,0 +1,73 @@
+/* papersiz.c */
+
+/************************************************************************
+
+ Part of the dvipng distribution
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ Copyright (C) 2002-2005 Jan-Åke Larsson
+
+************************************************************************/
+
+#include "dvipng.h"
+
+const char *lengthnames[]={ "sp", "pt", "bp",
+ "dd", "mm", "pc",
+ "cc", "cm", "in" };
+const int32_t lengthsp[]={ 1L, 65536L, 65782L,
+ 70124L, 186468L, 786432L,
+ 841489L, 1864680L, 4736286L };
+
+/*
+ * Convert a double[unit], e.g., "3.2cm" or "1.0in" into length in pixels.
+ * Advance the passed pointer as well.
+ */
+
+int32_t myatodim(char ** p)
+{
+ double tmp; /* double accuracy is enough, I think */
+ int i=0;
+
+ tmp = strtod(*p,p);
+ while (**p == ' ')
+ (*p)++;
+ while (i<8 && ((*p)[0]!=lengthnames[i][0] || (*p)[1]!=lengthnames[i][1]))
+ i++;
+ if (i==8 && ((*p)[0]!=lengthnames[i][0] || (*p)[1]!=lengthnames[i][1]))
+ Warning("unrecognized length unit \"%.2s\", assuming inches",*p);
+ while (**p != ',' && **p !='\0')
+ (*p)++;
+ tmp *= lengthsp[i]*dpi/4736286L; /* convert sp to pixels */
+ return((int32_t) tmp);
+}
+
+
+/*
+ * The routine where we handle the paper size special. We need to pass in
+ * the string after the `papersize=' specification.
+ */
+
+void handlepapersize(char * p, int32_t * x, int32_t * y)
+{
+ while (*p == ' ')
+ p++ ;
+ *x = myatodim(&p) ;
+ while (*p == ' ' || *p == ',')
+ p++ ;
+ *y = myatodim(&p) ;
+}
+