atlas
0.6
|
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include "common.h"
Classes | |
struct | text |
struct | output_state |
Macros | |
#define | version_string "x3.6" |
#define | banner "This is CTANGLE (version "version_string")" |
#define | max_toks 150000L |
#define | max_texts 2500 |
#define | max_files 50 |
#define | stack_size_max 50 |
#define | max_indent 1000 |
#define | variant text |
#define | line_output flags['l'] |
#define | max_bytes 50000L \ |
#define | max_modules 1000 |
#define | max_idents 5000 |
#define | max_sections 4000 \ |
#define | hash_size 353 |
#define | buf_size 200 |
#define | longest_name 1000 \ |
#define | long_buf_size (buf_size+longest_name) |
#define | local static |
#define | array_size(a) ((int)(sizeof(a)/sizeof(a[0]))) |
#define | false (boolean) 0 |
#define | true (boolean) 1 |
#define | ctangle 0 |
#define | cweave 1 |
#define | and_and 04 |
#define | lt_lt 020 |
#define | gt_gt 021 |
#define | plus_plus 013 |
#define | minus_minus 01 |
#define | minus_gt 031 |
#define | not_eq 032 |
#define | lt_eq 034 |
#define | gt_eq 035 |
#define | eq_eq 036 |
#define | or_or 037 |
#define | find_char() (loc<=limit || get_line()) |
#define | id_index(p) ((sixteen_bits)((p)-id_table)) |
#define | id_at(i) (&id_table[i]) |
#define | mod_index(p) ((sixteen_bits)((p)-mod_table)) |
#define | mod_at(i) (&mod_table[i]) |
#define | name_begin(p) ((p)->byte_start) |
#define | length(p) ((int)(strlen(name_begin(p)))) |
#define | name_end(p) (name_begin(p)+length(p)) |
#define | complete_name(p) ((p)->byte_start[-1]=='\0') |
#define | print_mod(p) printf(": <%s%s>",name_begin(p), complete_name(p) ? "" : "..." ) |
#define | spotless 0 |
#define | harmless_message 1 |
#define | error_message 2 |
#define | fatal_message 3 |
#define | mark_harmless() if (history==spotless) history=harmless_message; else |
#define | mark_error() (history=error_message) |
#define | overflow(t) fatal("\n! Sorry, %s capacity exceeded",t) \ |
#define | confusion(s) fatal("\n! This can't happen: %s",s) |
#define | show_banner flags['b'] |
#define | show_happiness flags['h'] |
#define | show_progress flags['p'] |
#define | show_stats flags['s'] |
#define | C_plus_plus flags['+'] |
#define | compatibility_mode flags['c'] |
#define | update_terminal() fflush(stdout) |
#define | new_line() putchar('\n') |
#define | term_write(string, leng) printf("%.*s",(int)(leng),string) |
#define | tok_begin(p) (p)->tok_start |
#define | tok_end(p) ((p)+1)->tok_start |
#define | text_table_end (&text_table[max_texts]) |
#define | tok_mem_end (&tok_mem[max_toks]) |
#define | store_byte(c) if (tok_ptr==tok_mem_end) overflow("token"); else *tok_ptr++=c |
#define | macro_flag (text_table_end-1) |
#define | header_flag text_table_end |
#define | next_sec(m) ((m)->text_link) |
#define | equiv equiv_or_xref |
#define | verb_quote 0x2 |
#define | join 0x3 |
#define | cur_repl cur_state.repl_field |
#define | cur_byte cur_state.byte_field |
#define | cur_end cur_state.end_field |
#define | cur_sec cur_state.sec_nr_field |
#define | cur_ind cur_state.indent_field |
#define | cur_state stack[0] |
#define | stack_end (&stack[stack_size_max]) |
#define | stack_empty() (stack_ptr==&stack[0]) |
#define | C_printf(format, x) fprintf(C_file,format,x) |
#define | C_putc(c) putc(c,C_file) |
#define | put_indent() (indent_buffer[ind_i=cur_ind]='\0',C_printf("%s",indent_buffer)) |
#define | append_white(c) |
#define | trans_limit 9 |
#define | trans_of(c) c_trans[(unsigned char)(c)-0x80] |
#define | translation_exists(c) (trans_of(c)[0]!='\0') |
#define | comp_op(op) |
#define | code_of(c) ccode[(unsigned char)(c)] |
#define | compress(char2, code) if (*loc==char2) return ++loc,code |
#define | preproc_directive 0 |
#define | section_body 1 |
#define | report(k, c, m) printf("%lu %ss (out of %lu)\n",(unsigned long)(c),k,(unsigned long)(m)) |
Typedefs | |
typedef struct text | text |
typedef struct text * | text_pointer |
typedef struct output_state * | stack_pointer |
Enumerations | |
enum | { identifier =0x80, section_start, section_end, line_mark } |
enum | { no_space, num_or_id, operator, literal } |
enum | { ignore =0x80, id_code, constant, verbatim, at_sign_image, join_code, ord, control_text, include_preproc, char_trans, format, definition, header, begin_C, module_name, new_section } |
Functions | |
boolean | names_match (id_pointer, char *, int, int) |
void | init_id_name (id_pointer, int) |
void | init_module_name (mod_pointer) |
void | phase_two (void) |
void | output (text_pointer) |
void | output_preproc_directives (void) |
void | C_newline (void) |
void | out_char (eight_bits) |
boolean | mark_line (void) |
void | phase_one (void) |
int | main (int argc, char **argv) |
void | store_two_bytes (sixteen_bits x) |
void | push_level (mod_pointer p) |
void | continue_or_pop_level (void) |
eight_bits | skip_ahead (void) |
boolean | skip_comment (boolean one_liner) |
eight_bits | get_next (void) |
void | scan_repl (eight_bits context) |
void | scan_section (void) |
Variables | |
text | text_table [max_texts] |
text_pointer | text_ptr =&text_table[0] |
eight_bits | tok_mem [max_toks] |
eight_bits * | tok_ptr =&tok_mem[0] |
text_pointer | text_root =NULL |
text_pointer * | last_unnamed =&text_root |
boolean | atp_seen =false |
mod_pointer | output_file [max_files] |
int | output_file_count =0 |
output_state | stack [stack_size_max] |
stack_pointer | stack_ptr |
char | indent_buffer [max_indent] |
sixteen_bits | ind_i |
int | cur_val |
eight_bits | out_state |
boolean | protect |
char | c_trans [UCHAR_MAX+1-0x80][trans_limit+1] |
eight_bits | ccode [UCHAR_MAX+1] |
id_pointer | cur_id |
mod_pointer | cur_mod |
text_pointer | cur_text |
eight_bits | next_control |
#define and_and 04 |
#define append_white | ( | c | ) |
#define array_size | ( | a | ) | ((int)(sizeof(a)/sizeof(a[0]))) |
#define banner "This is CTANGLE (version "version_string")" |
#define buf_size 200 |
#define C_plus_plus flags['+'] |
#define C_putc | ( | c | ) | putc(c,C_file) |
#define code_of | ( | c | ) | ccode[(unsigned char)(c)] |
#define comp_op | ( | op | ) |
#define compatibility_mode flags['c'] |
#define confusion | ( | s | ) | fatal("\n! This can't happen: %s",s) |
#define ctangle 0 |
#define cur_byte cur_state.byte_field |
#define cur_end cur_state.end_field |
#define cur_ind cur_state.indent_field |
#define cur_repl cur_state.repl_field |
#define cur_sec cur_state.sec_nr_field |
#define cur_state stack[0] |
#define cweave 1 |
#define eq_eq 036 |
#define equiv equiv_or_xref |
#define error_message 2 |
#define false (boolean) 0 |
#define fatal_message 3 |
#define gt_eq 035 |
#define gt_gt 021 |
#define harmless_message 1 |
#define hash_size 353 |
#define header_flag text_table_end |
#define id_at | ( | i | ) | (&id_table[i]) |
#define id_index | ( | p | ) | ((sixteen_bits)((p)-id_table)) |
#define join 0x3 |
#define length | ( | p | ) | ((int)(strlen(name_begin(p)))) |
#define line_output flags['l'] |
#define local static |
#define long_buf_size (buf_size+longest_name) |
#define longest_name 1000 \ |
#define lt_eq 034 |
#define lt_lt 020 |
#define macro_flag (text_table_end-1) |
#define mark_error | ( | ) | (history=error_message) |
#define mark_harmless | ( | ) | if (history==spotless) history=harmless_message; else |
#define max_bytes 50000L \ |
#define max_files 50 |
#define max_idents 5000 |
#define max_indent 1000 |
#define max_modules 1000 |
#define max_sections 4000 \ |
#define max_texts 2500 |
#define max_toks 150000L |
#define minus_gt 031 |
#define minus_minus 01 |
#define mod_at | ( | i | ) | (&mod_table[i]) |
#define mod_index | ( | p | ) | ((sixteen_bits)((p)-mod_table)) |
#define name_end | ( | p | ) | (name_begin(p)+length(p)) |
#define new_line | ( | ) | putchar('\n') |
#define next_sec | ( | m | ) | ((m)->text_link) |
#define not_eq 032 |
#define or_or 037 |
#define overflow | ( | t | ) | fatal("\n! Sorry, %s capacity exceeded",t) \ |
#define plus_plus 013 |
#define preproc_directive 0 |
#define print_mod | ( | p | ) | printf(": <%s%s>",name_begin(p), complete_name(p) ? "" : "..." ) |
#define put_indent | ( | ) | (indent_buffer[ind_i=cur_ind]='\0',C_printf("%s",indent_buffer)) |
#define section_body 1 |
#define show_banner flags['b'] |
#define show_happiness flags['h'] |
#define show_stats flags['s'] |
#define spotless 0 |
#define stack_end (&stack[stack_size_max]) |
#define stack_size_max 50 |
#define store_byte | ( | c | ) | if (tok_ptr==tok_mem_end) overflow("token"); else *tok_ptr++=c |
#define text_table_end (&text_table[max_texts]) |
#define trans_limit 9 |
#define trans_of | ( | c | ) | c_trans[(unsigned char)(c)-0x80] |
#define translation_exists | ( | c | ) | (trans_of(c)[0]!='\0') |
#define true (boolean) 1 |
#define update_terminal | ( | ) | fflush(stdout) |
#define variant text |
#define verb_quote 0x2 |
#define version_string "x3.6" |
typedef struct output_state * stack_pointer |
typedef struct text* text_pointer |
anonymous enum |
void C_newline | ( | void | ) |
void continue_or_pop_level | ( | void | ) |
int get_next | ( | void | ) |
void init_id_name | ( | id_pointer | dummy, |
int | ilk | ||
) |
void init_module_name | ( | mod_pointer | node | ) |
int main | ( | int | argc, |
char ** | argv | ||
) |
boolean mark_line | ( | void | ) |
boolean names_match | ( | id_pointer | x, |
char * | q, | ||
int | l, | ||
int | dummy | ||
) |
void out_char | ( | eight_bits | c | ) |
void output | ( | text_pointer | repl | ) |
void output_preproc_directives | ( | void | ) |
void phase_one | ( | void | ) |
void phase_two | ( | void | ) |
void push_level | ( | mod_pointer | p | ) |
void scan_repl | ( | eight_bits | context | ) |
void scan_section | ( | void | ) |
eight_bits skip_ahead | ( | void | ) |
void store_two_bytes | ( | sixteen_bits | x | ) |
char c_trans[UCHAR_MAX+1-0x80][trans_limit+1] |
eight_bits ccode[UCHAR_MAX+1] |
id_pointer cur_id |
mod_pointer cur_mod |
text_pointer cur_text |
int cur_val |
sixteen_bits ind_i |
char indent_buffer[max_indent] |
text_pointer* last_unnamed =&text_root |
eight_bits next_control |
eight_bits out_state |
mod_pointer output_file[max_files] |
int output_file_count =0 |
boolean protect |
output_state stack[stack_size_max] |
stack_pointer stack_ptr |
text_pointer text_ptr =&text_table[0] |
text_pointer text_root =NULL |
eight_bits tok_mem[max_toks] |
eight_bits* tok_ptr =&tok_mem[0] |