mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-06 03:23:58 +00:00
173 lines
4.0 KiB
C
173 lines
4.0 KiB
C
/* This file is part of hp2ps, a graph drawer for memory profiles.
|
|
Copyright (C) 2002 The University Court of the University of Glasgow.
|
|
This program is governed by the license contained in the file LICENSE. */
|
|
|
|
#include <ctype.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "Main.h"
|
|
#include "Defines.h"
|
|
#include "Shade.h"
|
|
#include "Error.h"
|
|
#include "HpFile.h"
|
|
#include "Reorder.h"
|
|
|
|
/* own stuff */
|
|
#include "AuxFile.h"
|
|
|
|
static void GetAuxLine PROTO((FILE *)); /* forward */
|
|
static void GetAuxTok PROTO((FILE *)); /* forward */
|
|
|
|
void
|
|
GetAuxFile(auxfp)
|
|
FILE* auxfp;
|
|
{
|
|
g_ch = ' ';
|
|
endfile = 0;
|
|
linenum = 1;
|
|
|
|
GetAuxTok(auxfp);
|
|
|
|
while (endfile == 0) {
|
|
GetAuxLine(auxfp);
|
|
}
|
|
|
|
fclose(auxfp);
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Read the next line from the aux file, check the syntax, and
|
|
* perform the appropriate action.
|
|
*/
|
|
|
|
static void
|
|
GetAuxLine(auxfp)
|
|
FILE* auxfp;
|
|
{
|
|
switch (thetok) {
|
|
case X_RANGE_TOK:
|
|
GetAuxTok(auxfp);
|
|
if (thetok != FLOAT_TOK) {
|
|
Error("%s, line %d, floating point number must follow X_RANGE",
|
|
auxfile, linenum);
|
|
}
|
|
auxxrange = thefloatish;
|
|
GetAuxTok(auxfp);
|
|
break;
|
|
case Y_RANGE_TOK:
|
|
GetAuxTok(auxfp);
|
|
if (thetok != FLOAT_TOK) {
|
|
Error("%s, line %d, floating point number must follow Y_RANGE",
|
|
auxfile, linenum);
|
|
}
|
|
auxyrange = thefloatish;
|
|
GetAuxTok(auxfp);
|
|
break;
|
|
case ORDER_TOK:
|
|
GetAuxTok(auxfp);
|
|
if (thetok != IDENTIFIER_TOK) {
|
|
Error("%s, line %d: identifier must follow ORDER",
|
|
auxfile, linenum);
|
|
}
|
|
GetAuxTok(auxfp);
|
|
if (thetok != INTEGER_TOK) {
|
|
Error("%s, line %d: identifier and integer must follow ORDER",
|
|
auxfile, linenum);
|
|
}
|
|
OrderFor(theident, theinteger);
|
|
GetAuxTok(auxfp);
|
|
break;
|
|
case SHADE_TOK:
|
|
GetAuxTok(auxfp);
|
|
if (thetok != IDENTIFIER_TOK) {
|
|
Error("%s, line %d: identifier must follow SHADE",
|
|
auxfile, linenum);
|
|
}
|
|
GetAuxTok(auxfp);
|
|
if (thetok != FLOAT_TOK) {
|
|
Error("%s, line %d: identifier and floating point number must follow SHADE",
|
|
auxfile, linenum);
|
|
}
|
|
ShadeFor(theident, thefloatish);
|
|
GetAuxTok(auxfp);
|
|
break;
|
|
case EOF_TOK:
|
|
endfile = 1;
|
|
break;
|
|
default:
|
|
Error("%s, line %d: %s unexpected", auxfile, linenum,
|
|
TokenToString(thetok));
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Read the next token from the input and assign its value
|
|
* to the global variable "thetok". In the case of numbers,
|
|
* the corresponding value is also assigned to "thefloatish";
|
|
* in the case of identifiers it is assigned to "theident".
|
|
*/
|
|
|
|
static void GetAuxTok(auxfp)
|
|
FILE* auxfp;
|
|
{
|
|
|
|
while (isspace(g_ch)) { /* skip whitespace */
|
|
if (g_ch == '\n') linenum++;
|
|
g_ch = getc(auxfp);
|
|
}
|
|
|
|
if (g_ch == EOF) {
|
|
thetok = EOF_TOK;
|
|
return;
|
|
}
|
|
|
|
if (isdigit(g_ch)) {
|
|
thetok = GetNumber(auxfp);
|
|
return;
|
|
} else if (IsIdChar(g_ch)) { /* g_ch can't be a digit here */
|
|
GetIdent(auxfp);
|
|
if (!isupper(theident[0])) {
|
|
thetok = IDENTIFIER_TOK;
|
|
} else if (strcmp(theident, "X_RANGE") == 0) {
|
|
thetok = X_RANGE_TOK;
|
|
} else if (strcmp(theident, "Y_RANGE") == 0) {
|
|
thetok = Y_RANGE_TOK;
|
|
} else if (strcmp(theident, "ORDER") == 0) {
|
|
thetok = ORDER_TOK;
|
|
} else if (strcmp(theident, "SHADE") == 0) {
|
|
thetok = SHADE_TOK;
|
|
} else {
|
|
thetok = IDENTIFIER_TOK;
|
|
}
|
|
return;
|
|
} else {
|
|
Error("%s, line %d: strange character (%c)", auxfile, linenum, g_ch);
|
|
}
|
|
}
|
|
|
|
void
|
|
PutAuxFile(auxfp)
|
|
FILE* auxfp;
|
|
{
|
|
int i;
|
|
|
|
fprintf(auxfp, "X_RANGE %.2f\n", xrange);
|
|
fprintf(auxfp, "Y_RANGE %.2f\n", yrange);
|
|
|
|
for (i = 0; i < nidents; i++) {
|
|
fprintf(auxfp, "ORDER %s %d\n", identtable[i]->name, i+1);
|
|
}
|
|
|
|
for (i = 0; i < nidents; i++) {
|
|
fprintf(auxfp, "SHADE %s %.2f\n", identtable[i]->name,
|
|
ShadeOf(identtable[i]->name));
|
|
}
|
|
|
|
fclose(auxfp);
|
|
}
|