Mercurial > ~dholland > hg > ag > index.cgi
view anagram/guisupport/charsdc.cpp @ 15:f5acaf0c8a29
Don't cast through "volatile int". Causes a gcc warning nowadays.
XXX: should put something else back here to frighten the optimizer
author | David A. Holland |
---|---|
date | Tue, 31 May 2022 01:00:55 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* * AnaGram, A System for Syntax Directed Programming * Copyright 1993-2000 Parsifal Software. All Rights Reserved. * See the file COPYING for license and usage terms. * * charsdc.cpp - Character set display module */ #include "arrays.h" #include "charsdc.h" #include "csexp.h" #include "data.h" #include "dc.h" #include "dict.h" #include "stacks.h" #include "symbol.h" #include "token.h" #include "tree.h" #include "ut.h" #include "ws.h" //#define INCLUDE_LOGGING #include "log.h" #define PURE_MARKER '%' static int partition_set_tabs[] = {5,0}; static void part_set_display(int pn) { int tn = map_part_number[pn].token_number; token_number_map *tp = &map_token_number[tn]; int name, tree; ssprintf("P%03d\tT%03d", pn, tn); if (tn == 0) { return; } name = tp->token_name; if (name) { ass(": "); //ass(dict_str(tkn_dict, name)); ass(Symbol(name)->string.pointer()); if (tp->pure) { acs(PURE_MARKER); } return; } tree = tp->parse_tree; if (tree) { name = map_parse_tree[tree].token_name; if (name) { //ass(dict_str(tkn_dict,name)); ass(Symbol(name)->string.pointer()); if (tp->pure) { acs(PURE_MARKER); } } } } static int part_set_window_ok(int pn) { return pn > 0 && (unsigned)pn < part_dict->nsx; } dc_ref part_set_window(int pn){ unsigned *list = lstptr(map_part_number[pn], chars); dc_ref window; AgString foot = AgString::format("P%03d", pn); //window = find_on_screen("Set Elements", foot); //if (window.exists()) return window; return dc_ref(new set_elements_dc(list, map_part_number[pn].size,foot.pointer())); } static int char_map_tabs[] = {5,8,14,0}; char_map_dc::char_map_dc(void) : dc("Character Map") { tab_stops = char_map_tabs; columnHeadTitle = "Code\tChar\tSet\tToken"; //des->c_size = cursor_bar_size; des->d_size.y = n_chars; //getWidth(); //resize_window(); } //extern int ersatz_tab; void char_map_dc::getLine(unsigned ln) const { LOGSECTION("char_map_dc::getLine"); char_number_map cm = map_char_number[ln]; int name = map_char_number[ln].token_name; int tn = cm.token_number; extern int min_char_number; int ch = ln + min_char_number; int c = ch > 0 && ch < 255 ? ch : 32; LOGV(tn) LCV(name); LOGV(ch) LCV(c) LCV(cm.part_number); //ersatz_tab = 255; if (c == '\t') { c = 255; } ssprintf("%3d\t%c\tP%03d\tT%03d", ch, c, cm.part_number, tn); if (tn) { ass(": "); atkn(tn); return; } if (name) { apprintf(" %s", Symbol(name)->string.pointer()); //apprintf(" %s", dict_str(tkn_dict, name)); apprintf(" %s", Symbol(name)->string.pointer()); } } int char_map_dc::set_elements_ok(unsigned ln) { return part_set_window_ok(map_char_number[ln].part_number); } dc_ref char_map_dc:: set_elements(unsigned ln) { return part_set_window(map_char_number[ln].part_number); } int char_map_dc::usage_ok(unsigned ln) { return token_usage_window_ok(map_char_number[ln].token_number); } dc_ref char_map_dc::usage(unsigned ln) { return token_usage_window(map_char_number[ln].token_number); } static int char_set_tabs[] = {6,12, 0}; void char_set_dc::getLine(unsigned ln) const { int pt; int tn; int name; ln++; ssprintf("C%03d:\t",ln); pt = map_char_set[ln].parse_tree; tn = map_parse_tree[pt].token_number; if (tn) { apprintf("T%03d:\t",tn); name = map_token_number[tn].token_name; } else { acs('\t'); name = map_parse_tree[pt].token_name; } if (name) { //apprintf("%s = ", dict_str(tkn_dict,name)); apprintf("%s = ", Symbol(name)->string.pointer()); } //ass(node_string(map_parse_tree[pt].tree,4).pointer()); ass(map_parse_tree[pt].expression->asString().pointer()); } char_set_dc::char_set_dc(void) : dc("Character Sets") { //des->c_size = cursor_bar_size; des->d_size.y = char_set_dict->nsx - 1; tab_stops = char_set_tabs; columnHeadTitle = "Set\tToken\tSet Representation"; //getWidth(); //resize_window(); } int char_set_dc::set_elements_ok(unsigned ln) { return char_set_window_ok(ln+1); } dc_ref char_set_dc::set_elements(unsigned ln) { return char_set_window(ln+1); } dc_ref char_set_dc::partition_sets(unsigned ln) { return new partition_set_dc(ln+1, AgString::format("C%03d", ln)); } int char_set_dc::usage_ok(unsigned ln) { int pt = map_char_set[ln+1].parse_tree; return token_usage_window_ok(map_parse_tree[pt].token_number); } dc_ref char_set_dc::usage(unsigned ln) { int pt = map_char_set[ln+1].parse_tree; return token_usage_window(map_parse_tree[pt].token_number); } partition_set_dc::partition_set_dc(unsigned csn, const AgString foot) : dc("Partition Sets", foot) { char_set_number = csn; des->d_size.y = map_char_set[csn].nparts; tab_stops = partition_set_tabs; columnHeadTitle = "Set\tToken"; //getWidth(); //des->c_size = cursor_bar_size; //resize_window(); } void partition_set_dc::getLine(unsigned ln) const { unsigned *parts = lstptr(map_char_set[char_set_number], part); part_set_display(parts[ln]); } dc_ref partition_set_dc:: set_elements(unsigned ln) { unsigned *parts = lstptr(map_char_set[char_set_number], part); return part_set_window(parts[ln]); } int partition_set_dc::usage_ok(unsigned ln) { unsigned *parts = lstptr(map_char_set[char_set_number], part); return token_usage_window_ok(map_part_number[parts[ln]].token_number); } dc_ref partition_set_dc::usage(unsigned ln) { unsigned *parts = lstptr(map_char_set[char_set_number], part); return token_usage_window(map_part_number[parts[ln]].token_number); } void partition_table_dc::getLine(unsigned ln) const { part_set_display(ln); } partition_table_dc::partition_table_dc(void) : dc("Partition Sets") { //des->c_size = cursor_bar_size; des->d_size.y = part_dict->nsx; tab_stops = partition_set_tabs; columnHeadTitle = "Set\tToken"; //getWidth(); //resize_window(); } dc_ref partition_table_dc::set_elements(unsigned ln) { return part_set_window(ln); } int partition_table_dc::usage_ok(unsigned ln) { return token_usage_window_ok(map_part_number[ln].token_number); } dc_ref partition_table_dc::usage(unsigned ln) { return token_usage_window(map_part_number[ln].token_number); } static int set_elements_tabs[] = {5,0}; void set_elements_dc::getLine(unsigned ln) const { int ch = list[ln]; int c = ch > 0 && ch < 255 ? ch : 32; ssprintf("%3d\t%c", ch, c); } set_elements_dc::set_elements_dc(unsigned *l, unsigned n, char *foot) : dc("Set Elements", foot) { list = l; tab_stops = set_elements_tabs; columnHeadTitle = "No.\tCharacter"; //des->c_size = cursor_bar_size; des->d_size.y = n; //getWidth(); //resize_window(); }