aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/parse-input.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2008-03-07 15:19:01 +0000
committerdos-reis <gdr@axiomatics.org>2008-03-07 15:19:01 +0000
commit8531f4c74274b8aa99168d220738227557a9c418 (patch)
treec50b77870e432317be8f99c248e1339f74b51661 /src/hyper/parse-input.pamphlet
parent33949ff2e6e5b5abe8d22c5604f42a6c9371079a (diff)
downloadopen-axiom-8531f4c74274b8aa99168d220738227557a9c418.tar.gz
* hyper/: De-pamphletize.
Diffstat (limited to 'src/hyper/parse-input.pamphlet')
-rw-r--r--src/hyper/parse-input.pamphlet631
1 files changed, 0 insertions, 631 deletions
diff --git a/src/hyper/parse-input.pamphlet b/src/hyper/parse-input.pamphlet
deleted file mode 100644
index 020ff97a..00000000
--- a/src/hyper/parse-input.pamphlet
+++ /dev/null
@@ -1,631 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/parse-input}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{parse-input.c}
-<<parse-input.c>>=
-#include "axiom-c-macros.h"
-#define _PARSE_INPUT_C
-/***
- Contains all the code needed to parse input items,
- InputString
- SimpleBox
- RadioBox.
- ****/
-
-#include "useproto.h"
-#include "debug.h"
-
-#include "parse.h"
-#include "parse-aux.h"
-#include "lex.h"
-#include "mem.h"
-
-#include "all_hyper_proto.H1"
-
-/* create an unmapped input window for getting strings * */
-extern int make_input_file;
-
-HyperLink *
-make_input_window(InputItem * item)
-{
- HyperLink *link;
- XSetWindowAttributes at;
-
- if (!make_input_file) {
- link = (HyperLink *) halloc(sizeof(HyperLink), "HyperLink");
- if (link == NULL) {
- fprintf(stderr, "Ran out of memory allocating a hyper link!\n");
- exit(-1);
- }
- at.cursor = gActiveCursor;
- at.background_pixel = gInputBackgroundColor;
- at.border_pixel = gActiveColor;
- link->win = XCreateWindow(gXDisplay, gWindow->fDisplayedWindow, 0, 0, 100, 100, 0,
- 0, InputOutput, CopyFromParent,
- CWCursor | CWBackPixel | CWBorderPixel, &at);
- XSelectInput(gXDisplay, link->win, ButtonPressMask);
- link->type = Inputstring;
- link->x = link->y = 0;
- /** This way when I click in an input window, I need only use reference
- to get a pointer to the item ***/
- link->reference.string = item;
- hash_insert(gLinkHashTable,(char *) link,(char *) &link->win);
-
- return link;
- }
- return 0;
-}
-
-/* create an unmapped input window for boxes */
-HyperLink *
-make_box_window(InputBox * box, int type)
-{
- HyperLink *link = 0;
- XSetWindowAttributes at;
-
- if (!make_input_file) {
- link = (HyperLink *) halloc(sizeof(HyperLink), "Make_box_window");
- if (link == NULL) {
- fprintf(stderr, "Ran out of memory allocating a hyper link!\n");
- exit(-1);
- }
- at.cursor = gActiveCursor;
- at.background_pixel = gInputBackgroundColor;
- link->win = XCreateWindow(gXDisplay, gWindow->fDisplayedWindow,
- 0, 0, 100, 100, 0,
- 0, InputOutput, CopyFromParent,
- CWCursor | CWBackPixel, &at);
- XSelectInput(gXDisplay, link->win, ButtonPressMask);
- link->type = type;
- link->x = link->y = 0;
- /** This way when I click in an input window, I need only use reference
- to get a pointer to the item ***/
- link->reference.box = box;
- hash_insert(gLinkHashTable, (char *)link,(char *) &link->win);
- }
-
- return link;
-}
-
-void
-initialize_default(InputItem *item,char * buff)
-{
- LineStruct *newline;
- LineStruct *curr_line;
- int size = item->size;
- int bp;
-
- item->curr_line = item->lines = alloc_inputline(size);
- curr_line = item->lines;
- item->num_lines = 1;
- curr_line->line_number = 1;
- /* while I still have lines to fill */
- for (bp = 0; *buff;) {
- if (*buff == '\n') {
- curr_line->len = bp;
- curr_line->buffer[bp] = 0;
- newline = alloc_inputline(size);
- newline->line_number = ++(item->num_lines);
- curr_line->next = newline;
- newline->prev = curr_line;
- curr_line = newline;
- bp = 0;
- buff++;
- }
- else if (bp == size) {
- curr_line->len = size + 1;
- curr_line->buffer[size] = '_';
- curr_line->buffer[size + 1] = 0;
- newline = alloc_inputline(size);
- newline->line_number = ++(item->num_lines);
- curr_line->next = newline;
- newline->prev = curr_line;
- bp = 0;
- curr_line = newline;
- }
- else {
- curr_line->buffer[bp++] = *buff++;
- }
- }
- curr_line->buff_pntr = curr_line->len = bp;
- item->curr_line = curr_line;
-}
-
-
-
-/* Parse the input string statement * */
-void
-parse_inputstring(void)
-{
- TextNode *input_node = curr_node;
- char *name;
- InputItem *item;
- int size;
- char *default_value;
-
- gStringValueOk = 0;
-
- /* first get the name */
- input_node->type = token.type;
- get_expected_token(Lbrace);
- name = get_input_string();
- input_node->data.text = alloc_string(name);
- /* now get the width */
- get_expected_token(Lbrace);
- get_expected_token(Word);
- get_expected_token(Rbrace);
- size = atoi(token.id);
- if (size < 0) {
- fprintf(stderr, "Illegal size in Input string\n");
- longjmp(jmpbuf, 1);
- }
-
- /* get the default value */
- get_expected_token(Lbrace);
- default_value = get_input_string();
-
- /** now I need to malloc space for the input stuff **/
- item = (InputItem *) halloc(sizeof(InputItem), "InputItem");
-
- /* Now store all the string info */
- item->name = (char *)
- halloc((strlen(input_node->data.text) + 1) * (sizeof(char)),"parse_inputstring");
- strcpy(item->name, input_node->data.text);
- item->size = size;
- item->entered = 0;
- item->next = NULL;
- initialize_default(item, default_value);
-
- /** Now that I have all the structures made, lets make the window, and
- add the item to the list ****/
-
- input_node->link = make_input_window(item);
- if (!make_input_file)
- item->win = input_node->link->win; /* TTT */
- insert_item(item);
- gStringValueOk = 1;
- curr_node = input_node;
- return ;
-}
-
-void
-parse_simplebox(void)
-{
- InputBox *box;
- char *name;
- short int picked = 0;
- char *filename;
- TextNode *input_box = curr_node;
-
- gStringValueOk = 0;
-
- /* set the type and space fields */
- input_box->type = SimpleBox;
- input_box->space = token.id[-1];
-
- /* IS it selected? */
- get_token();
- if (token.type == Lsquarebrace) {
- get_expected_token(Word);
- if (!is_number(token.id)) {
- fprintf(stderr,
- "parse_simple_box: Expected a value not %s\n", token.id);
- print_page_and_filename();
- jump();
- }
- else if (!strcmp(token.id, "1"))
- picked = 1;
- else if (!strcmp(token.id, "0"))
- picked = 0;
- else {
- fprintf(stderr, "parse_simple_box: Unexpected Value %s\n", token.id);
- print_page_and_filename();
- jump();
- }
- get_expected_token(Rsquarebrace);
- get_token();
- }
-
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "parse_inputbox was expecting a { not a %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
-
- name = get_input_string();
- if (gPageBeingParsed->box_hash && hash_find(gPageBeingParsed->box_hash, name)) {
- fprintf(stderr, "Input box name %s is not unique \n", name);
- print_page_and_filename();
- jump();
- }
-
- box = alloc_inputbox();
- box->name = alloc_string(name);
- input_box->data.text = alloc_string(name);
- box->picked = picked;
-
- /* Get the filename for the selected and unselected bitmaps */
- get_expected_token(Lbrace);
- filename = get_input_string();
- if (!make_input_file)
- box->selected = insert_image_struct(filename);
- get_expected_token(Lbrace);
- filename = get_input_string();
- if (!make_input_file) {
- box->unselected = insert_image_struct(filename);
- /* set the width and height for the maximaum of the two */
- input_box->height = max(box->selected->height, box->unselected->height);
- input_box->width = max(box->selected->width, box->unselected->width);
- /* Make the window and stuff */
- input_box->link = make_box_window(box, SimpleBox);
- box->win = input_box->link->win;
-
- /* Now add the box to the box_has table for this window */
- if (gPageBeingParsed->box_hash == NULL) {
- gPageBeingParsed->box_hash = (HashTable *) halloc(sizeof(HashTable),
- "Box Hash");
- hash_init(
- gPageBeingParsed->box_hash,
- BoxHashSize,
- (EqualFunction) string_equal,
- (HashcodeFunction) string_hash);
- }
- hash_insert(gPageBeingParsed->box_hash, (char *)box, box->name);
- }
-
- /* reset the curr_node and then return */
- curr_node = input_box;
- gStringValueOk = 1;
- return;
-}
-void
-parse_radiobox(void)
-{
- InputBox *box;
- char *name;
- char *group_name;
- short int picked = 0;
- TextNode *input_box = curr_node;
-
- gStringValueOk = 0;
-
- /* set the type and space fields */
- input_box->type = Radiobox;
- input_box->space = token.id[-1];
-
- /* IS it selected? */
- get_token();
- if (token.type == Lsquarebrace) {
- get_expected_token(Word);
- if (!is_number(token.id)) {
- fprintf(stderr,
- "parse_simple_box: Expected a value not %s\n", token.id);
- print_page_and_filename();
- jump();
- }
- else if (!strcmp(token.id, "1"))
- picked = 1;
- else if (!strcmp(token.id, "0"))
- picked = 0;
- else {
- fprintf(stderr, "parse_simple_box: Unexpected Value %s\n", token.id);
- print_page_and_filename();
- jump();
- }
- get_expected_token(Rsquarebrace);
- get_token();
- }
-
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "parse_inputbox was expecting a { not a %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
-
- name = get_input_string();
- if (gPageBeingParsed->box_hash && hash_find(gPageBeingParsed->box_hash, name)) {
- fprintf(stderr, "Input box name %s is not unique \n", name);
- print_page_and_filename();
- jump();
- }
-
- box = alloc_inputbox();
- box->name = alloc_string(name);
- input_box->data.text = alloc_string(name);
- box->picked = picked;
-
- /* Now what I need to do is get the group name */
- get_token();
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "parse_inputbox was expecting a { not a %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
- group_name = get_input_string();
-
- /*
- * Now call a routine which searches the radio box list for the current
- * group name, and if found adds this box to it
- */
- add_box_to_rb_list(group_name, box);
-
- input_box->width = box->rbs->width;
- input_box->height = box->rbs->height;
- /* Make the window and stuff */
- input_box->link = make_box_window(box, Radiobox);
- if (!make_input_file)
- box->win = input_box->link->win; /* TTT */
-
-
- /* Now add the box to the box_has table for this window */
- if (gPageBeingParsed->box_hash == NULL) {
- gPageBeingParsed->box_hash = (HashTable *) halloc(sizeof(HashTable),
- "Box Hash");
- hash_init(
- gPageBeingParsed->box_hash,
- BoxHashSize,
- (EqualFunction) string_equal,
- (HashcodeFunction) string_hash);
- }
- hash_insert(gPageBeingParsed->box_hash, (char *)box, box->name);
-
- /* reset the curr_node and then return */
- curr_node = input_box;
- gStringValueOk = 1;
- return;
-}
-static void
-add_box_to_rb_list(char *name,InputBox *box)
-{
- RadioBoxes *trace = gPageBeingParsed->radio_boxes;
- InputBox *list;
- /*int found = 0;*/
-
- while (trace != NULL && strcmp(trace->name, name))
- trace = trace->next;
-
- if (!trace) {
- fprintf(stderr, "Tried to add a radio box to a non-existent group %s\n",
- name);
- print_page_and_filename();
- jump();
- }
-
- /* now add the box to the list */
- list = trace->boxes;
- box->next = list;
- trace->boxes = box;
-
- if (box->picked && check_others(box->next)) {
- fprintf(stderr, "Only a single radio button can be picked\n");
- print_page_and_filename();
- box->picked = 0;
- }
- box->selected = trace->selected;
- box->unselected = trace->unselected;
- box->rbs = trace;
-
- return;
-}
-static int
-check_others(InputBox *list)
-{
- InputBox *trace = list;
-
- while (trace != NULL && !trace->picked)
- trace = trace->next;
-
- if (trace != NULL)
- return 1;
- else
- return 0;
-}
-
-
-/* inserts an item into the current input list */
-static void
-insert_item(InputItem *item)
-{
- InputItem *trace = gPageBeingParsed->input_list;
-
- if (gPageBeingParsed->current_item == NULL) {
- gPageBeingParsed->current_item = item;
- }
- if (trace == NULL) {
- /** Insert at the front of the list **/
- gPageBeingParsed->input_list = item;
- return;
- }
- else {
- /** find the end of the list **/
- while (trace->next != NULL)
- trace = trace->next;
- trace->next = item;
- return;
- }
-}
-
-InputItem *save_item;
-
-void
-init_paste_item(InputItem *item)
-{
- InputItem *trace = gPageBeingParsed->input_list;
-
- if (!item) {
- gPageBeingParsed->input_list = NULL;
- gPageBeingParsed->current_item = NULL;
- save_item = NULL;
- }
- else {
- save_item = item->next;
- trace->next = NULL;
- }
-}
-void
-repaste_item(void)
-{
- InputItem *trace;
-
- if (save_item) {
- for (trace = gPageBeingParsed->input_list; trace && trace->next != NULL;
- trace = trace->next);
- if (trace) {
- trace->next = save_item;
- }
- else {
- gWindow->page->input_list = save_item;
- gWindow->page->current_item = save_item;
- }
- }
- save_item = NULL;
-}
-
-InputItem *
-current_item(void)
-{
- InputItem *trace = gPageBeingParsed->input_list;
-
- if (trace) {
- for (; trace->next != NULL; trace = trace->next);
- return trace;
- }
- else
- return NULL;
-}
-int
-already_there(char *name)
-{
- RadioBoxes *trace = gPageBeingParsed->radio_boxes;
-
- while (trace && strcmp(trace->name, name))
- trace = trace->next;
-
- if (trace)
- return 1;
- else
- return 0;
-}
-void
-parse_radioboxes(void)
-{
- TextNode *return_node = curr_node;
- RadioBoxes *newrb;
- char *fname;
-
- /* I really don't need this node, it just sets up some parsing stuff */
- return_node->type = Noop;
-
- newrb = alloc_rbs();
-
- get_token();
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "\\radioboxes was expecting a name not %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
-
- newrb->name = alloc_string(get_input_string());
-
- /* quick search for the name in the current list */
- if (already_there(newrb->name)) {
- free(newrb->name);
- free(newrb);
- fprintf(stderr, "Tried to redefine radioboxes %s\n", newrb->name);
- print_page_and_filename();
- jump();
- }
- /* now I have to get the selected and unslected bitmaps */
- get_token();
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "\\radioboxes was expecting a name not %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
- fname = get_input_string();
- if (!make_input_file)
- newrb->selected = insert_image_struct(fname);
-
- get_token();
- if (token.type != Lbrace) {
- token_name(token.type);
- fprintf(stderr, "\\radioboxes was expecting a name not %s\n", ebuffer);
- print_page_and_filename();
- jump();
- }
- fname = get_input_string();
- if (!make_input_file) {
- newrb->unselected = insert_image_struct(fname);
- newrb->height = max(newrb->selected->height, newrb->unselected->height);
- newrb->width = max(newrb->selected->width, newrb->unselected->width);
- /* now add the thing to the current list of radio boxes */
- }
- newrb->next = gPageBeingParsed->radio_boxes;
- gPageBeingParsed->radio_boxes = newrb;
-
- curr_node = return_node;
- return;
-}
-@
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-@
-<<*>>=
-<<license>>
-<<parse-input.c>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
-
-
-
-