da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * return the record format string given a format descriptor
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <recfmt.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ctype.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinchar*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfmtrec(Recfmt_t f, int fs)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* b;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char del[2];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin b = s = fmtbuf(n = 32);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin e = b + n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin switch (RECTYPE(f))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_delimited:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'd';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((del[0] = REC_D_DELIMITER(f)) != '\n')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin del[1] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (fs)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "0x%02x", *(unsigned char*)del);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "%s", fmtquote(del, NiL, NiL, 1, 0));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_fixed:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!fs)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'f';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "%lu", REC_F_SIZE(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_variable:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'v';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (n = REC_V_SIZE(f))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s += sfsprintf(s, e - s, "%lu", n);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (REC_V_HEADER(f) != 4)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s += sfsprintf(s, e - s, "h%u", REC_V_HEADER(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (REC_V_OFFSET(f) != 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s += sfsprintf(s, e - s, "o%u", REC_V_OFFSET(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (REC_V_LENGTH(f) != 2)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s += sfsprintf(s, e - s, "z%u", REC_V_LENGTH(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (REC_V_LITTLE(f) != 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'l';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (REC_V_INCLUSIVE(f) == 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'n';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_method:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'm';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin switch (n = REC_M_INDEX(f))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_M_data:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "data");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_M_path:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "path");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin default:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "%lu", n);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case REC_none:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s++ = 'n';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *s = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin default:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s, e - s, "u%u.0x%07x", RECTYPE(f), REC_U_ATTRIBUTES(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return b;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}