mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-31 18:25:50 +02:00
Added a ARG_UNUSED macro in utils/magic.h, which produces a simple cast to void to silence the warnings. The reasons this is used as opposed to an attribute is that most compilers should support this. Besides this, the macro can be easily searched for in the future to potentially remove (where possible) the unused parameters.
132 lines
3.8 KiB
C
132 lines
3.8 KiB
C
/*
|
|
* getrect.c -
|
|
*
|
|
* *********************************************************************
|
|
* * Copyright (C) 1985, 1990 Regents of the University of California. *
|
|
* * Permission to use, copy, modify, and distribute this *
|
|
* * software and its documentation for any purpose and without *
|
|
* * fee is hereby granted, provided that the above copyright *
|
|
* * notice appear in all copies. The University of California *
|
|
* * makes no representations about the suitability of this *
|
|
* * software for any purpose. It is provided "as is" without *
|
|
* * express or implied warranty. Export of this software outside *
|
|
* * of the United States of America may require an export license. *
|
|
* *********************************************************************
|
|
* Lawrence Livermore National Laboratory
|
|
*
|
|
* This file contains a procedure, GetRect(), for gobbling up
|
|
* four integers from an input file.
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/utils/getrect.c,v 1.3 2010/06/24 12:37:58 tim Exp $";
|
|
#endif /* not lint */
|
|
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
|
|
#include "utils/magic.h"
|
|
#include "utils/geometry.h"
|
|
|
|
/*
|
|
* ----------------------------------------------------------------------------
|
|
*
|
|
* GetRect --
|
|
*
|
|
* Parse a rectangle from a file and fill in the supplied rect struct.
|
|
* We assume that the rectangle consists of four decimal numbers, each
|
|
* separated from the next by a single space, and terminated by a newline.
|
|
*
|
|
* ESTHETIC WARNING:
|
|
* The algorithm used here is gross but extremely fast.
|
|
*
|
|
* Results:
|
|
* FALSE on end of file or error, TRUE otherwise.
|
|
* If nonmanhattan extensions are enabled, it returns a
|
|
* direction result for triangles.
|
|
*
|
|
* Side effects:
|
|
* Fills in the contents of *rect.
|
|
*
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#define RECTBUFTHRESHOLD 100
|
|
|
|
int
|
|
GetRect(fin, skip, rect, scalen, scaled)
|
|
FILETYPE fin;
|
|
int skip; /* Number of bytes to skip before rect */
|
|
Rect *rect; /* Pointer to rectangle to be filled in */
|
|
int scalen; /* Scale up by this amount */
|
|
int scaled; /* Scale down by this amount */
|
|
{
|
|
int n, c;
|
|
bool isNegative;
|
|
int dir = 0x1;
|
|
|
|
while (skip-- > 0)
|
|
(void) FGETC(fin);
|
|
|
|
if ((isNegative = ((c = FGETC(fin)) == '-'))) c = FGETC(fin);
|
|
for (n = 0; isdigit(c); n = n * 10 + c - '0', c = FGETC(fin))
|
|
/* Nothing */;
|
|
rect->r_xbot = isNegative ? -n : n;
|
|
if (!isspace(c)) goto bad;
|
|
while ((c = FGETC(fin)) != EOF && isspace(c)) /* Nothing */;
|
|
|
|
if ((isNegative = (c == '-'))) c = FGETC(fin);
|
|
for (n = 0; isdigit(c); n = n * 10 + c - '0', c = FGETC(fin))
|
|
/* Nothing */;
|
|
rect->r_ybot = isNegative ? -n : n;
|
|
if (!isspace(c)) goto bad;
|
|
while ((c = FGETC(fin)) != EOF && isspace(c)) /* Nothing */;
|
|
|
|
if ((isNegative = (c == '-'))) c = FGETC(fin);
|
|
for (n = 0; isdigit(c); n = n * 10 + c - '0', c = FGETC(fin))
|
|
/* Nothing */;
|
|
rect->r_xtop = isNegative ? -n : n;
|
|
if (!isspace(c)) goto bad;
|
|
while ((c = FGETC(fin)) != EOF && isspace(c)) /* Nothing */;
|
|
|
|
if ((isNegative = (c == '-'))) c = FGETC(fin);
|
|
for (n = 0; isdigit(c); n = n * 10 + c - '0', c = FGETC(fin))
|
|
/* Nothing */;
|
|
rect->r_ytop = isNegative ? -n : n;
|
|
|
|
if (scalen > 1)
|
|
{
|
|
rect->r_xbot *= scalen;
|
|
rect->r_ybot *= scalen;
|
|
rect->r_xtop *= scalen;
|
|
rect->r_ytop *= scalen;
|
|
}
|
|
if (scaled > 1)
|
|
{
|
|
rect->r_xbot /= scaled;
|
|
rect->r_ybot /= scaled;
|
|
rect->r_xtop /= scaled;
|
|
rect->r_ytop /= scaled;
|
|
}
|
|
|
|
while (c != EOF && c != '\n')
|
|
{
|
|
c = FGETC(fin);
|
|
switch ((char)c)
|
|
{
|
|
case 's':
|
|
dir |= 0x2;
|
|
break;
|
|
case 'e':
|
|
dir |= 0x4;
|
|
break;
|
|
}
|
|
}
|
|
return dir;
|
|
|
|
bad:
|
|
while (c != EOF && c != '\n')
|
|
c = FGETC(fin);
|
|
return (FALSE);
|
|
}
|