X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=Ada95%2Fgen%2Fgen.c;h=682f7101236a99390f47d0cfeca34a3ff32d90c6;hp=ba180452a2d08212d37928ebab0b71116e8a131c;hb=22fd3b236834311f1682b09d16eacec0d17f8683;hpb=2782cd7cf38dc9cfaa9d90b7e66792dbc7537b08 diff --git a/Ada95/gen/gen.c b/Ada95/gen/gen.c index ba180452..682f7101 100644 --- a/Ada95/gen/gen.c +++ b/Ada95/gen/gen.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,2008,2009 Free Software Foundation, Inc. * + * Copyright (c) 1998,2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -32,7 +32,7 @@ /* Version Control - $Id: gen.c,v 1.50 2009/03/21 21:34:20 tom Exp $ + $Id: gen.c,v 1.60 2011/04/30 19:47:19 Nicolas.Boulenguez Exp $ --------------------------------------------------------------------------*/ /* This program generates various record structures and constants from the @@ -41,7 +41,12 @@ to produce the real source. */ +#ifdef HAVE_CONFIG_H #include +#else +#include +#define HAVE_USE_DEFAULT_COLORS 1 +#endif #include #include @@ -52,6 +57,7 @@ #include #include +#define UChar(c) ((unsigned char)(c)) #define RES_NAME "Reserved" static const char *model = ""; @@ -71,7 +77,7 @@ find_pos(char *s, unsigned len, int *low, int *high) int l = 0; *high = -1; - *low = 8 * len; + *low = (int)(8 * len); for (i = 0; i < len; i++, s++) { @@ -90,9 +96,13 @@ find_pos(char *s, unsigned len, int *low, int *high) } l++; if (little_endian) - *s >>= 1; + { + *s >>= 1; + } else - *s <<= 1; + { + *s = (char)(*s << 1); + } } } else @@ -108,23 +118,22 @@ find_pos(char *s, unsigned len, int *low, int *high) * bit size, i.e. they fit into an (u)int or a (u)short. */ static void - gen_reps - (const name_attribute_pair * nap, /* array of name_attribute_pair records */ - const char *name, /* name of the represented record type */ - int len, /* size of the record in bytes */ - int bias) +gen_reps( + const name_attribute_pair * nap, /* array of name_attribute_pair records */ + const char *name, /* name of the represented record type */ + int len, /* size of the record in bytes */ + int bias) { - int i, n, l, cnt = 0, low, high; + const int len_bits = (8 * len); + int i, l, low, high; int width = strlen(RES_NAME) + 3; unsigned long a; - unsigned long mask = 0; assert(nap != NULL); for (i = 0; nap[i].name != (char *)0; i++) { - cnt++; - l = strlen(nap[i].name); + l = (int)strlen(nap[i].name); if (l > width) width = l; } @@ -145,16 +154,15 @@ static void for (i = 0; nap[i].name != (char *)0; i++) { a = nap[i].attr; - mask |= a; l = find_pos((char *)&a, sizeof(a), &low, &high); if (l >= 0) printf(" %-*s at 0 range %2d .. %2d;\n", width, nap[i].name, low - bias, high - bias); } - i = 1; - n = cnt; printf(" end record;\n"); - printf(" for %s'Size use %d;\n", name, 8 * len); + printf(" pragma Warnings (Off);"); + printf(" for %s'Size use %d;\n", name, len_bits); + printf(" pragma Warnings (On);\n"); printf(" -- Please note: this rep. clause is generated and may be\n"); printf(" -- different on your system."); } @@ -162,7 +170,7 @@ static void static void chtype_rep(const char *name, attr_t mask) { - attr_t x = -1; + attr_t x = (attr_t)-1; attr_t t = x & mask; int low, high; int l = find_pos((char *)&t, sizeof(t), &low, &high); @@ -219,7 +227,7 @@ gen_mrep_rep(const char *name) mrep_rep("Z", &x); memset(&x, 0, sizeof(x)); - x.bstate = -1; + x.bstate = (mmask_t) - 1; mrep_rep("Bstate", &x); printf(" end record;\n"); @@ -231,7 +239,10 @@ static void gen_attr_set(const char *name) { /* All of the A_xxx symbols are defined in ncurses, but not all are nonzero - * if "configure --enable-widec" is specified. + * if "configure --enable-widec" is not specified. Originally (in + * 1999-2000), the ifdef's also were needed since the proposed bit-layout + * for wide characters allocated 16-bits for A_CHARTEXT, leaving too few + * bits for a few of the A_xxx symbols. */ static const name_attribute_pair nap[] = { @@ -285,11 +296,12 @@ gen_attr_set(const char *name) chtype attr = A_ATTRIBUTES & ~A_COLOR; int start = -1; int len = 0; - int i, set; + int i; + chtype set; for (i = 0; i < (int)(8 * sizeof(chtype)); i++) { - set = attr & 1; + set = (attr & 1); if (set) { if (start < 0) @@ -321,6 +333,7 @@ gen_trace(const char *name) {"Internal_Calls", TRACE_ICALLS}, {"Character_Calls", TRACE_CCALLS}, {"Termcap_TermInfo", TRACE_DATABASE}, + {"Attributes_And_Colors", TRACE_ATTRS}, {(char *)0, 0} }; gen_reps(nap, name, sizeof(int), 0); @@ -435,13 +448,14 @@ keydef(const char *name, const char *old_name, int value, int mode) if (mode == 0) /* Generate the new name */ printf(" %-30s : constant Special_Key_Code := 8#%3o#;\n", name, value); else - { /* generate the old name, but only if it doesn't conflict with the old - * name (Ada95 isn't case sensitive!) - */ + { const char *s = old_name; const char *t = name; - while (*s && *t && (toupper(*s++) == toupper(*t++))); + /* generate the old name, but only if it doesn't conflict with the old + * name (Ada95 isn't case sensitive!) + */ + while (*s && *t && (toupper(UChar(*s++)) == toupper(UChar(*t++)))); if (*s || *t) printf(" %-16s : Special_Key_Code renames %s;\n", old_name, name); } @@ -758,10 +772,10 @@ gen_keydefs(int mode) static void acs_def(const char *name, chtype *a) { - int c = a - &acs_map[0]; + int c = (int)(a - &acs_map[0]); printf(" %-24s : constant Character := ", name); - if (isprint(c) && (c != '`')) + if (isprint(UChar(c)) && (c != '`')) printf("'%c';\n", c); else printf("Character'Val (%d);\n", c); @@ -1243,7 +1257,7 @@ eti_gen(char *buf, int code, const char *name, int *etimin, int *etimax) *etimin = code; if (code > *etimax) *etimax = code; - return strlen(buf); + return (int)strlen(buf); } static void @@ -1266,12 +1280,6 @@ gen_offsets(void) printf(" Sizeof%-*s : constant Natural := %2ld; -- %s\n", 12, "_bool", (long)sizeof(bool), "bool"); - /* In ncurses _maxy and _maxx needs an offset for the "public" - * value - */ - printf(" Offset%-*s : constant Natural := %2d; -- %s\n", - 12, "_XY", 1, "int"); - printf("\n"); printf(" type Curses_Bool is mod 2 ** Interfaces.C.%s'Size;\n", s_bool); } @@ -1485,7 +1493,7 @@ main(int argc, char *argv[]) } printf(" subtype Eti_Error is C_Int range %d .. %d;\n\n", etimin, etimax); - printf(buf); + printf("%s", buf); } break; default: