123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include <stdio.h>
- #include <string.h>
- #include "local_proto.h"
- /****************************************************************
- *
- * check_scale (text)
- *
- * text of scale request to be checked
- ***************************************************************/
- int check_scale(char *text)
- {
- char unit1[30];
- char unit2[30];
- char equals[30];
- char dummy[2];
- long n1, n2;
- double u1;
- /*
- * absolute horizontal width specification
- * x inches
- * x panels
- * convert text to 1 : n
- */
- u1 = 0;
- *unit1 = 0;
- *dummy = 0;
- if (sscanf(text, "%lf %s %1s", &u1, unit1, dummy) == 2 && *dummy == 0) {
- if (strncmp(unit1, "panel", 5) == 0 && u1 > 0)
- return 1;
- if (strncmp(unit1, "inch", 4) == 0 && u1 > 0)
- return 1;
- }
- /*
- * unitless ratio specification
- * n : m
- */
- *dummy = 0;
- n1 = n2 = 0;
- if (sscanf(text, "%ld : %ld%1s", &n1, &n2, dummy) == 2) {
- if (n1 <= 0 || n2 <= 0 || *dummy)
- return 0;
- return 1;
- }
- /*
- *
- * ratio specification with unit conversions
- * x inches equals y miles
- * x inches equals y meters
- * x inches equals y kilometers
- */
- *unit1 = 0;
- *unit2 = 0;
- *equals = 0;
- n1 = n2 = 0;
- if (sscanf(text, "%ld %s %s %ld %s", &n1, unit1, equals, &n2, unit2) == 5) {
- if (n1 <= 0 || n2 <= 0)
- return 0;
- if (strcmp(equals, "=") != 0 && strncmp(equals, "equal", 5) != 0)
- return 0;
- /* unit1: inches */
- if (strncmp(unit1, "inch", 4) == 0)
- u1 = 1;
- else
- return 0;
- /* unit2: meters, miles, kilometers */
- if (strncmp(unit2, "mile", 4) == 0)
- return 1;
- if (strncmp(unit2, "meter", 5) == 0)
- return 1;
- if (strncmp(unit2, "kilometer", 9) == 0)
- return 1;
- }
- return 0;
- }
|