/* * Copyright (C) 1999-2003 Rildo Pragana, Jim Noeth, * David Essex, Glen Colbert. * Copyright (C) 1993,1991 Rildo Pragana. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this software; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA */ #ifndef __HTCOBOL_H #define __HTCOBOL_H #include #include #include #include #include #define organization decimals #define fdesc location #define direction access_mode #define call_mode access_mode #define sort_data value2 #define record pic #define recordsym redefines #define filenamevar son #define alternate brother #define scrinfo index #define rec_varying picstr #define sort_file sign /* current division (cobol source) */ #define CDIV_IDENT 1 #define CDIV_ENVIR 2 #define CDIV_DATA 3 #define CDIV_PROC 4 #define CDIV_COMMENT 5 #define CDIV_FD 6 #define CDIV_REDEF 7 #define CDIV_SUBSCRIPTS 8 #define CDIV_COPY 9 #define CDIV_COPYFILE 10 #define CDIV_EXCEPTION 11 #define CDIV_PIC 12 #define CINITIAL 15 #define CDIV_COMMENT1 16 /* symbol table selector */ #define SYTB_LIT 1 #define SYTB_VAR 2 #define SYTB_LAB 3 /* set operations */ #define SET_TO 1 #define SET_UP_BY 2 #define SET_DOWN_BY 3 /* call modes */ #define CM_REF 1 #define CM_VAL 2 #define CM_CONT 3 #define CM_DESC 4 #define CM_CHAIN 5 /* asm sections or pseudo-sections */ #define SEC_CODE 1 #define SEC_CONST 2 #define SEC_DATA 3 #define SEC_STACK 4 #define SEC_ARGS 5 #define SEC_TEMPS 6 #define SEC_WORKING SEC_DATA #define SEC_RETURN_CODE SEC_DATA #define SEC_FIRST_NAMED 7 /* selection subject types (evaluate statement) */ #define SSUBJ_FALSE 0 #define SSUBJ_TRUE 1 #define SSUBJ_EXPR 2 #define SSUBJ_COND 3 #define SSUBJ_STR 4 /* selection object types (evaluate statement) */ #define SOBJ_FALSE 0 #define SOBJ_TRUE 1 #define SOBJ_ANY 2 #define SOBJ_EXPR 3 #define SOBJ_NEGEXPR 4 #define SOBJ_RANGE 5 #define SOBJ_NEGRANGE 6 #define SOBJ_COND 7 #define SOBJ_NEGCOND 8 #define SOBJ_NEGSTR 9 #define SOBJ_STR 10 #define FLD_DESC_SIZE0 8 #define FLD_DESC_SIZE1 FLD_DESC_SIZE0 + 4 #define CFLD_DESC_SIZE0 12 #define CFLD_DESC_SIZE1 CFLD_DESC_SIZE0 + 8 /* math verb options */ #define MATH_OPT_ON_SIZE_ERROR 2 /* Severity codes dor hterror & yyerror */ #define TCOB_SEVERITY_INFO 0 #define TCOB_SEVERITY_WARN 4 #define TCOB_SEVERITY_ERROR 8 /* * expression nodes */ struct expr { char litflag; /* 5 for expr */ char op; struct expr *left; struct expr *right; }; /* * Storage for subscripted variable references. * First node is the variable, other are subscripts as * variable/literals with operations. * For instance: VAR ( SUB1 - 5, SUB2 + 3 ) is represented as * 5 nodes: (sy,op) = (VAR,0) (SUB1,'-') (5,',') (SUB2,'+') (3,',') * where the numbers are (struct lit *) pointers and the variables * are (struct sym *) pointers. */ struct vref { char litflag; /* ',' = end of subscript, '+','-' = subscript arith */ struct vref *next; /* link to next in list or NULL */ void *sym; /* variable/literal at this node */ }; /* Node for refmod's */ struct refmod { char litflag; /* 4 = refmod */ struct sym *off; /* offset from normal start address */ struct sym *sym; /* pointer to original var: must be at the same relative offset as sym in vref */ struct sym *len; /* corrected length */ short slot; /* slot in the data section */ }; /* * compile-time list for value ranges of 88-level variables. * the first range is stored at the "struct sym", with sym->vr * being a pointer to the remaining "struct vrange" nodes. */ struct vrange { struct vrange *next; /* pointer to next range of values (88 var) */ struct lit *value; /* pointer to literal with initial value */ struct lit *value2; /* pointer to first/next key (sort files) */ }; /* * Node for external data (named sections). */ struct named_sect { struct named_sect *next; /* pointer to next named section */ short sec_no; /* key: section id */ char *os_name; /* name of 01 or 77 data as known by OS */ }; struct lit { char litflag; /* 1 for literals */ struct lit *next; /* next in literals list */ char *name; /* name (value) of literal */ char type; int decimals; unsigned location; /* data area for literal @lit+n */ unsigned descriptor; /* descriptor @lit+n */ short sec_no; /* asm section number */ unsigned char all; char *nick; int access_mode; /* ie call_mode */ int len; /* length of (possibly including NULLs) string */ }; /* note: "sym" and "lit" must share the same structure */ struct sym { char litflag; /* 1 for literals, 2 for variables */ struct sym *next; /* pointer to next symbol with same hash */ char *name; /* symbol (variable) name */ char type; /* label or elementary item or group item 9,A,X,B,C=elem; G=group; F=file; R=record; S=screen */ int decimals; /* decimal places or organization (files ) */ unsigned location; /* offset of variable in stack area */ /* or offset file descriptor in data area */ unsigned descriptor; /* field descriptor offset in data seg */ /* or index field descriptor (files) */ short sec_no; /* asm section number */ struct sym *clone; /* NULL if this symbol is unique otherwise, it must be further qualified */ int times; /* occurs times */ char *picstr; /* pointer to picture string saved or pointer to rec_varying (files) */ struct sym *parent; /* pointer to parent node (level) pointer to STATUS var (files) */ struct sym *son; /* used in field hierarchy for files this is the assign variable (filename) */ struct sym *brother; /* field variable at the same level or alternate key list pointer (for indexed files) */ struct sym *ix_desc; /* key variable (in file descriptor) pointer to fdesc (in record) */ struct scr_info *scr; /* screen info in screen items */ struct report_info *ri; /* report info in report items */ struct lit *value; /* pointer to literal with initial value */ struct lit *value2; /* pointer to first/next key (sort files) */ union { struct vrange *vr; /* pointer to next range of values (88 var) */ struct refmod *rfm; /* offset and length of refmod */ struct sym *declarative;/* declarative section */ } refmod_redef; int level; /* level of field or ASSIGN TO DISK/PRINTER (files) */ int access_mode; /* access mode (files) */ /* or direction (sort files data ) or call_mode for variables */ int sign; /* sign type (0=no sign,1=trailing) or sort file */ int len; /* length of item */ char defined; /* first time defined? */ unsigned pic; /* picture offset in data segment */ /* or record offset in stack (files) */ int occurs_flg; int linkage_flg; struct sym *redefines; /* points to a redefined field or record symbol (files) */ struct { unsigned int just_r:1; unsigned int is_pointer:1; unsigned int blank:1; unsigned int spec_value:1; unsigned int value:1; unsigned int sync:1; unsigned int in_redefinition:1; unsigned int separate_sign:1; unsigned int leading_sign:1; unsigned int optional:1; unsigned int external:1; unsigned int reserved:5; }flags; unsigned char slack; /* slack bytes inserted */ struct xref { /* xrefrence line number structure */ unsigned short size; /* array size */ unsigned short pos; /* current free array position */ unsigned int *lineno; /* line numbers array */ }xrefs; struct occurs *occurs; /* for DEPENDING ON or null if fixed table */ char pscale; /* number of 'P's in picture */ char stype; /* subtype for type 'B': 5, X, B */ }; /* this (struct rd) is aliased with (struct sym), so tail data is garbage! */ struct rd { char litflag; struct rd *next; char *name; char type; /* 'W' for report (RD) */ struct sym *file; /* file for writing this report */ struct list *controls; /* list of controls (listing breaks) */ struct list *items; /* list of all report items */ int page_limit; int heading; int footing; int first_detail; int last_detail; }; /* additional information for report items */ struct report_info { int line; int line_offset; /* PLUS given */ int column; int value_source; /* SUM, SOURCE (from a variable), literal */ /* the actual source symbol is in (struct sym *)->value */ }; /* varying record range and actual size */ struct rec_varying { struct lit *lmin; struct lit *lmax; struct sym *reclen; }; /* selection subject set (evaluate statement) */ struct selsubject { struct selsubject *next; struct sym *var; /* non-numeric variables */ int type; }; /* sort file list for using/giving clauses*/ struct sortfile_node { struct sortfile_node *next; struct sym *sy; }; /* information required by the 'perform ... varying ... after' statements */ struct perf_info { struct sym *pname1; /* symbol name */ struct sym *pname2; /* symbol name */ unsigned long ljmp; /* jump label */ unsigned long lend; /* end label */ }; struct perform_info { struct perf_info *pf[6]; }; /* information required by the math verbs statements */ struct math_var { struct sym *sname; /* symbol name */ /* unsigned int rounded; rounded option: 0=false, 1=true */ unsigned int opts; /* options: 0=none, 1=rounded, 2=on_size_error, 3=both */ struct math_var *next; }; /* information required by the math ON SIZE ERROR statement */ struct math_ose { unsigned long ose; /* 1=on_size, 2=not_on_size, 3=both */ unsigned long lbl1; /* call label name 1 - on_size */ unsigned long lbl2; /* call label name 2 - not_on_size */ unsigned long lbl4; /* bypass label name */ }; /* generic information container used by the [NOT] AT END cluases */ struct ginfo { unsigned long sel; /* 1=true, 2=not true, 3=both */ unsigned long lbl1; /* call label name 1 - true */ unsigned long lbl2; /* call label name 2 - not true */ unsigned long lbl3; /* retrun 1 label name */ unsigned long lbl4; /* retrun 2 label name */ unsigned long lbl5; /* test bypass label name */ }; /* information required by [NOT] INVALID KEY clauses */ struct invalid_key_element { unsigned long lbl1; /* skip label */ unsigned long lbl2; /* start label */ unsigned long lbl3; /* finish label */ }; struct invalid_keys { struct invalid_key_element *invalid_key; struct invalid_key_element *not_invalid_key; }; /******* supplemental information for screen items **********/ /* this is linked at the sym->index (aliased scrinfo) */ struct scr_info { int attr; int line; int column; struct sym *foreground; struct sym *background; struct sym *from; struct sym *to; int label; struct sym *line_var; struct sym *column_var; short int line_sign; short int column_sign; struct sym *foreground_var; struct sym *background_var; struct sym *color; struct sym *size; }; struct converting_struct { struct sym *fromvar; struct sym *tovar; struct inspect_before_after *before_after; }; struct tallying_list { struct tallying_list *next; struct tallying_for_list *tflist; struct sym *count; }; struct tallying_for_list { struct tallying_for_list *next; int options; struct sym *forvar; struct inspect_before_after *before_after; }; struct replacing_list { struct replacing_list *next; int options; struct sym *byvar; struct replacing_by_list *replbylist; struct inspect_before_after *before_after; }; struct replacing_by_list { struct replacing_by_list *next; struct sym *replvar; struct sym *byvar; struct inspect_before_after *before_after; }; struct inspect_before_after { struct sym *before; struct sym *after; }; struct alternate_list { struct alternate_list *next; struct sym *key; int duplicates; }; struct unstring_delimited { struct unstring_delimited *next; short int all; struct sym *var; }; struct unstring_destinations { struct unstring_destinations *next; struct sym *var; struct sym *delim; struct sym *count; }; struct string_from { struct string_from *next; struct sym *var; struct sym *delim; }; struct parm_list { struct parm_list *next; void *var; unsigned location; short sec_no; }; struct coord_pair { int lin; int col; }; struct index_to_table_list { struct index_to_table_list *next; char *idxname; char *tablename; char *keyname; char seq; /* '0' = none, '1' = ASCENDING, '2' = DESCENDING */ }; union label_def { struct { unsigned n:15; unsigned defined:1; unsigned off; }l; unsigned long x; }; struct condition { struct sym *sy; /* implied first operand */ int oper; /* operator */ }; struct init_str { /* structure to hold initialization sequence */ struct sym *sy; /* pointer on symbol */ char type; /* type of symbol */ int len; /* size of symbol */ unsigned location; /* location of occurence of symbol */ struct lit *value; /* original value of symbol */ }; struct init_str_tab { struct init_str ent[1]; }; struct list { struct list *next; void *var; }; /* Generic variable list for literals, identifiers */ struct gvar_list { union gvar { struct gvar_list *gvar; struct sym *sym; /* name variable */ void *var; }u; unsigned int attribute; /* attribute */ struct gvar_list *next; }; /* OCCURS ... DEPENDING ON info */ struct occurs { struct sym *depend; int min,max; }; /* standard field classes */ #define CLASS_NUMERIC 0 #define CLASS_ALPHABETIC 1 #define CLASS_ALPHABETIC_LOWER 2 #define CLASS_ALPHABETIC_UPPER 3 /* extended condition flags */ #define COND_UNARY 0x10 #define COND_CLASS 0x20 /* minor token numbers */ /* USAGETOK - USAGENUM */ #define USAGE_COMP 0 #define USAGE_COMP1 1 #define USAGE_COMP2 2 #define USAGE_COMP3 3 #define USAGE_INDEX 4 #define USAGE_BINARY_CHAR 5 #define USAGE_BINARY_SHORT 6 #define USAGE_BINARY_LONG 7 #define USAGE_BINARY_DOUBLE 8 #define USAGE_DISPLAY 9 #define USAGE_POINTER 10 #define USAGE_COMP5 11 #define USAGE_COMPX 12 /* DISPLAY e' um token independente deste grupo */ /* DATE-TIME */ #define DATE 0 #define TIME 1 #define DAY 2 #define DAY_OF_WEEK 3 /* OPENMD */ /* #define INPUT 1 #define I_O 2 #define OUTPUT 3 #define EXTEND 4 */ /* ZERONUM */ /* #define ZERO 0 #define ZEROS 1 #define ZEROES 2 */ /* DIVISNUM */ /* #define IDENTIFICATION 0 #define ENVIRONMENT 1 #define DATA 2 #define PROCEDURE 3 */ /* CONDITIONAL */ #define EQUAL 1 #define LESS 2 #define GREATER 4 #define GEQ 5 #define LEQ 3 #define NEQ 6 /* COMMENTING */ /* #define SOURCE_COMPUTER 1 #define OBJECT_COMPUTER 2 #define AUTHOR 3 #define DATE_WRITTEN 4 #define DATE_COMPILED 5 #define INSTALLATION 6 #define SECURITY 7 */ /* DIRECTION */ #define ASCENDING 1 #define DESCENDING 2 /* SPECIAL VARIABLES */ #define SVAR_RETURN_CODE "RETURN-CODE" /* htcobgen.c */ extern int hash(char *s); extern char *savename(char *s); extern char *upcase(char *s, char *buf); extern void update_xreflist(struct sym *as); extern struct sym *lookup(char *s, int tab); extern struct sym *install(char *name, int tab, int cloning); extern struct lit *install_lit(char *name, int length, int all); extern struct sym *lookup_label(struct sym *sy, struct sym *parent); extern struct sym *lookup_variable(struct sym *sy, struct sym *parent); extern struct sym *lookup_parent(struct sym *sy, struct sym *parent); extern struct sym *lookup_for_redefines(struct sym *sy); extern void clear_symtab(void); extern void clear_offsets(void); extern char sign_to_char(int digit); extern void invert_literal_sign(struct lit *sy); extern void check_decimal_point(struct lit *lit); extern char *sch_convert(char *s); extern int is_variable(struct sym *sy); extern int is_subscripted(struct sym *sy); extern void emit_lit(char *s, int len); extern void emit_lit_fill(int c, int len); extern void gen_init_value(struct lit *sy, int var_len); extern void stabs_line(void); extern void stabs_block(int end); extern int gen_main_rtn(void); extern int pgm_header(char *id); extern void data_trail(void); extern int adjust_linkage_vars(int start_offset); extern void do_init_val(void); extern void proc_header(int using); extern void proc_trail(int using); extern void dump_working(void); extern void save_field_in_list(struct sym *sy); extern void save_literal(struct lit *v, int type); extern void save_named_sect(struct sym *sy); extern struct lit *save_special_literal(char val, char picc, char *nick); extern void define_switch_field(struct sym *sy, struct sym *sy2); extern struct lit *define_num_lit(int value); extern void save_switch_value(struct sym *sy, int value); extern void put_disp_list(struct sym *sy); extern char *memref(struct sym *sy); extern char *memrefat(struct sym *sy); extern char *memrefd(struct sym *sy); extern void push_immed(int i); extern void push_eax(void); extern void push_edx(void); extern void pop_eax(void); extern void push_ebx(void); extern void push_at_ebx(struct sym *sy); extern void push_at_eax(struct sym *sy); extern void load_at_eax(struct sym *sy); extern void cleanup_rt_stack(void); extern void asm_call(char *s); extern void asm_call1(char *s); extern void emt_cobrtl_call(char *s, char *prefix); extern int pic_digits(struct sym *sy, char target); extern int get_max_edt_len(struct sym *sy); extern int query_comp_len(struct sym *sy); extern int symlen(struct sym *sy); extern int sym_min_pic(struct sym *sy); extern int varsize_ch(struct sym *sy); extern void gen_call_scr_process(struct sym *sy); extern void add_alternate_key(struct sym *sy, int duplicates); extern struct list *insert_list(struct list *l, void *item); extern void free_list(struct list *l); extern void mark_decl_list(struct list *l); extern struct scr_info *alloc_scr_info(void); extern struct inspect_before_after *alloc_inspect_before_after(struct inspect_before_after *ba, int before_after, struct sym *var); extern struct converting_struct *alloc_converting_struct(struct sym *fromvar, struct sym *tovar, struct inspect_before_after *ba); extern struct tallying_list *alloc_tallying_list(struct tallying_list *tl, struct sym *count, struct tallying_for_list *tfl); extern struct tallying_for_list *alloc_tallying_for_list(struct tallying_for_list *tfl, int options, struct sym *forvar, struct inspect_before_after *ba); extern struct replacing_list *alloc_replacing_list(struct replacing_list *rl, int options, struct replacing_by_list *rbl, struct sym *byvar, struct inspect_before_after *ba); extern struct replacing_by_list *alloc_replacing_by_list(struct replacing_by_list *rbl, struct sym *replvar, struct sym *byvar, struct inspect_before_after *ba); extern struct unstring_delimited *alloc_unstring_delimited(short int all, struct sym *var); extern struct unstring_destinations *alloc_unstring_dest(struct sym *var, struct sym *delim, struct sym *count); extern struct string_from *alloc_string_from(struct sym *var, struct sym *delim); extern void gen_unstring(struct sym *var, struct unstring_delimited *delim, struct unstring_destinations *dest, struct sym *ptr, struct sym *tally); extern void gen_stringcmd(struct string_from *sf, struct sym *sy, struct sym *ptr); /*walter acrescentei color*/ extern void gen_display_screen(int nl, int color); extern void gen_display_line(int dupon, int nl, int color); extern void gen_gotoxy_expr(void); /*walter acrescentei color*/ extern void gen_accept(struct sym *sy, int echo, int main, int color); extern void gen_accept_from_chron(struct sym *sy, int date_fmt, int is_yyyy); extern void gen_accept_from_inkey(struct sym *sy); extern void gen_accept_from_cmdline(struct sym *sy); /* walter */ extern void gen_accept_from_escapekey(struct sym *sy); extern void gen_accept_env_var(struct sym *sy, struct lit *v); extern struct perf_info *create_perf_info(struct sym *sy1, struct sym *sy2, unsigned long lj, unsigned long le); extern struct perform_info *create_perform_info(void); extern char *check_perform_variables(struct sym *sy1, struct perform_info *pi1); extern struct expr *create_expr(char op, struct expr *left, struct expr *right); extern void free_expr(struct expr *e); extern void free_expr_list(void); extern struct math_var *create_mathvar_info(struct math_var *mv, struct sym *sy, unsigned int opt); extern void delete_mathvar_info(struct math_var *mv); extern struct math_ose *math_on_size_error0(void); extern struct math_ose *math_on_size_error1(struct math_ose *v); extern void math_on_size_error2(struct math_ose *v); extern void math_on_size_error3(struct math_ose *v); extern struct math_ose *math_on_size_error4(struct math_ose *v, unsigned long ty); extern void math_on_size_error5(struct math_ose *v); extern void gen_add(struct sym *s1, struct sym *s2, int rnd); extern void gen_subtract(struct sym *s1, struct sym *s2, int rnd); extern void gen_multiply(struct sym *s1, struct sym *s2, struct sym *s3, int rnd); extern void gen_compute1(struct math_var *vl1, struct sym *sy1); extern void gen_compute2(struct math_var *vl1, struct sym *sy1, struct math_ose *v1); extern void gen_add1(struct math_var *vl0, struct math_var *vl2, struct math_ose *v1); extern void gen_add2(struct math_var *vl1, struct math_var *vl2, struct sym *sy1, struct math_ose *v1); extern void gen_add3(struct math_var *vl1, struct math_var *vl2, struct math_ose *v1); extern void gen_subtract1(struct math_var *vl0, struct math_var *vl2, struct math_ose *v1); extern void gen_subtract2(struct math_var *vl1, struct math_var *vl2, struct sym *sy1, struct math_ose *v1); extern void gen_subtract3(struct math_var *vl1, struct math_var *vl2, struct math_ose *v1); extern void gen_multiply1(struct math_var *vl1, struct sym *sy1, struct math_ose *v1); extern void gen_multiply2(struct math_var *vl1, struct sym *sy1, struct sym *sy2, struct math_ose *v1); extern void gen_divide1(struct math_var *vl1, struct sym *sy1, struct math_ose *v1); extern void gen_divide2(struct math_var *vl1, struct sym *sy1, struct sym *sy2, struct math_ose *v1); extern void gen_divide4(struct sym *s1, struct sym *s2, struct sym *s3, struct sym *s4, int rnd, struct math_ose *v1); extern struct vref *create_subscripted_var(struct sym *sy, struct vref *subs); extern struct vref *create_subscript(struct sym *sy); extern struct vref *add_subscript_item(struct vref *subs, char op, struct sym *item); extern struct vref *add_subscript(struct vref *ref, struct vref *subs); extern int check_subscripts(struct sym *subs); extern void create_occurs_info(int min, int max, struct sym *depend); extern struct refmod *create_refmoded_var(struct sym *sy, struct sym *syoff, struct sym *sylen); extern int check_refmods(struct sym *var); extern void gen_subscripted(struct vref *subs); extern struct sym *get_variable_item(struct sym *sy); extern void gen_temp_storage(int size); extern void adjust_desc_length(struct sym *sy); extern void value_to_eax(struct sym *sy); extern void load_address(struct sym *var); extern void load_location(struct sym *var, char *cpureg); extern void loadloc_to_eax(struct sym *sy_p); extern void gen_loadloc(struct sym *sy_p); extern void set_ptr(struct sym *sy); extern void gen_loaddesc1(struct sym *sy, int variable_length); extern void gen_loaddesc(struct sym *sy); extern void gen_loadvar(struct sym *sy); extern void gen_loadval(struct sym *sy); extern void gen_pushval(struct sym *sy); extern void gen_store_fnres(struct sym *sy); extern int is_numeric_sy(struct sym *sy); extern int is_numeric_dest_sy(struct sym *sy); extern void gen_class_check(struct sym *sy, int class); extern void gen_inspect(struct sym *var, void *list, int operation); extern void gen_tcob_proto1(struct sym *sy); extern void gen_tcob_proto2(struct sym *sy1, struct sym *sy2); extern void gen_move(struct sym *sy_src, struct sym *sy_dst); extern void gen_moves(struct sym *sy_src, struct gvar_list *gsylst); extern struct gvar_list *gvar_list_append(struct gvar_list *l, struct sym *item, int linenum); extern void gen_save_chainings(struct gvar_list *gsylst); extern void gen_save_chaining(struct sym *sy); extern void gen_save_usings(struct gvar_list *gsylst); extern void gen_initialize(struct sym *sy_start, int from_initializes); // walter 13-12-05 extern void gen_initializes(struct gvar_list *gsylst); extern struct gvar_list *sort_key_list_create (struct gvar_list *item, int atrbt); extern struct gvar_list *sort_keys_list_append (struct gvar_list *l, struct gvar_list *item); extern void gen_movelength(struct sym *sy1, struct sym *sy2); extern void gen_move_init(struct sym *sy_src, struct sym *sy_dst); extern void init_field_val(struct sym *sy); extern int check_fields(struct sym *sy); extern void def_field_storage(struct sym *sy, int fld_len); extern struct sym *define_label(struct sym *sy, int lab_type, struct sym *parent, int parent_type); extern void gen_movecorr(struct sym *sy1, struct sym *sy2); extern void gen_addcorr(struct sym *sy1, struct sym *sy2, int rnd); extern void gen_addcorr1(struct math_var *mv1, struct math_var *mv2, int rnd, struct math_ose *v1); extern void gen_subtractcorr(struct sym *sy1, struct sym *sy2, int rnd); extern void gen_subtractcorr1(struct math_var *mv1, struct math_var *mv2, int rnd, struct math_ose *v1); extern void gen_set_complex( struct sym *idx, int which, struct sym * var); extern void gen_set(struct sym *idx, int which, struct sym *var, int adrof_idx, int adrof_var); extern int gen_evaluate_start(void); extern int subject_set_size(struct selsubject *ssbj); extern int selection_object_size(int type); extern int push_selection_subject_copy(int level, struct selsubject *ssbj, int stkadd, int objtype); extern int selection_subject_type(int level, struct selsubject *ssbj); extern void gen_when_check(int level, struct selsubject *ssbj, int type, int endcase, struct sym *var); extern void gen_bypass_when_case(int bypass); extern int gen_end_when(int n, int endcase, int sentence); extern void push_condition(void); extern void gen_goto_depending(struct list *l, struct sym *sy); extern void gen_goto(struct list *l); extern int gen_check_zero(void); extern unsigned long gen_at_end(int status); extern unsigned long gen_testif(void); extern void gen_not(void); extern unsigned long gen_andstart(void); extern unsigned long gen_orstart(void); extern void gen_dstlabel(unsigned long lbl); extern unsigned long gen_passlabel(void); extern unsigned long gen_marklabel(void); extern void gen_jmplabel(unsigned long lbl); extern void gen_push_int(struct sym *sy); extern void gen_perform_test_counter(unsigned long lbl); extern void gen_perform_times(unsigned long lbl); extern void gen_perform_thru(struct sym *s1, struct sym *s2); extern void gen_perform(struct sym *sy); extern void set_usage(struct sym *sy, int usage); extern void gen_picture(void); extern int save_pic_char(char c, int i); extern void gen_SearchLoopCheck(unsigned long lbl5, struct sym *syidx, struct sym *sytbl); extern void gen_SearchAllLoopCheck(unsigned long lbl3, struct sym *syidx, struct sym *sytbl, struct sym *syvar, unsigned long lstart, unsigned long lend); extern void define_special_fields(void); extern struct sym *define_temp_field(char desired_type, int desired_len); extern int define_implicit_field(struct sym *sy, struct sym *sykey, int idxlen); extern void Initialize_SearchAll_Boundaries(struct sym *sy, struct sym *syidx); extern struct sym *determine_table_index_name(struct sym *sy); extern void define_field(int level, struct sym *sy); extern struct sym *alloc_filler(void); extern struct selsubject *save_sel_subject(int type, struct selsubject *ssubj, struct sym *sy); extern void release_sel_subject(int label, struct selsubject *ssbj); extern void compute_subject_set_size(struct selsubject *ssbj); extern int set_field_value_sw(struct sym *sy, int times); extern int set_field_length(struct sym *sy, int times); extern unsigned field_alignment(struct sym *sy, unsigned location); extern void set_field_location(struct sym *sy, unsigned location); extern void scr_set_column(struct scr_info *si, struct sym *sy, int plus_minus); extern void scr_set_line(struct scr_info *si, struct sym *sy, int plus_minus); extern void save_report(struct sym *rep, struct sym *file); extern void update_report_field(struct sym *sy); extern void update_screen_field(struct sym *sy, struct scr_info *si); extern void update_renames_field(struct sym *sy1, struct sym *sy2); extern void update_field(struct sym *sy); extern void close_fields(void); extern void resolve_labels(void); extern void open_section(struct sym *sect); extern void close_section(void); extern char *label_name(struct sym *lab); extern char *var_name(struct sym *sy); extern void close_paragr(void); extern void open_paragr(struct sym *paragr); extern void gen_stoprun(void); extern void gen_exit(int code); extern void set_variable_values(struct lit *v1, struct lit *v2); extern void gen_condition(struct sym *sy); extern void gen_compare_exp(int value); extern void gen_compare(struct sym *s1, int value, struct sym *s2); extern void assign_expr(struct sym *sy, int opt, char end); extern int push_expr(struct sym *sy); extern int push_subexpr(struct sym *sy); extern void add_expr(void); extern void subtract_expr(void); extern void multiply_expr(void); extern void divide_expr(void); extern void pow_expr(void); extern void gen_save_filedesc(struct sym *f); extern void alloc_file_entry(struct sym *f); extern void dump_alternate_keys(struct sym *r, struct alternate_list *alt); extern void dump_fdesc(void); extern void gen_fdesc(struct sym *f, struct sym *r); extern void gen_status(struct sym *f); extern void gen_perform_decl(struct sym *f); extern struct sortfile_node *alloc_sortfile_node(struct sym *sy); extern struct sym *create_status_register(char *name); extern void gen_sort_using(struct sym *f, struct sortfile_node *sn); extern void gen_sort_giving(struct sym *f, struct sortfile_node *sn); extern void gen_sort(struct sym *f); extern void gen_save_filevar(struct sym *f, struct sym *buf); extern void gen_save_sort_fields( struct sym *f, struct sym *buf ); extern void gen_open(int mode, struct sym *f); extern void gen_close_sort(struct sym *f); extern void gen_close(struct sym *f); extern int gen_reads(struct sym *f, struct sym *buf, struct sym *key, int next_prev, int sel, int withlock ); extern void gen_return_stmt(struct sym *f, struct sym *buf); extern void gen_read(struct sym *f, struct sym *buf, struct sym *key, int withlock); extern void gen_read_next(struct sym *f, struct sym *buf, int next_prev, int withlock); extern void gen_release(struct sym *r, struct sym *buf); extern void gen_write(struct sym *r, struct sym *advar, struct sym *buf, int opt); extern void gen_rewrite(struct sym *r, struct sym *buf); extern void gen_start(struct sym *f, int cond, struct sym *key); extern void gen_delete(struct sym *f); extern void set_rec_varying_info(struct sym *f, struct lit *lmin, struct lit *lmax, struct sym *reclen); extern void gen_check_varying(struct sym *f); extern void gen_get_switches(); extern void gen_set_switch(struct sym *var, struct sym *sy); extern struct list *chain_var(struct sym *sy); extern void gen_push_using(struct sym *sy); extern void gen_save_using(struct sym *sy); extern void gen_enter_runelement(); extern unsigned long int emt_call(struct lit *v, int stack_size, int exceplabel, int notexceplabel,struct sym *ret); extern unsigned long int emt_call_loadlib(struct lit *v); extern int begin_on_except(void); extern void check_call_except(int excep, int notexcep, int exceplabel, int notexceplabel, int endlabel); /*extern void gen_inline_intrinsic(struct sym *v, short name_len, struct sym *temporary);*/ extern struct sym *gen_intrinsic_call(struct sym *v); extern short get_std_val(struct sym *sy); extern int get_nb_fields(struct sym *sy, int sw_val); extern int build_init_str(struct sym *sy, int nb_fields); extern void gen_from_init_str(int nb_fields); extern void gen_init_str(struct sym *sy, char init_ctype, int len); extern void mark_actives(int first, int last); extern void dump_symbols(void); extern void chg_underline(char *s); extern struct ginfo *ginfo_container0(void); extern struct ginfo *ginfo_container1(struct ginfo *v); extern void ginfo_container2(struct ginfo *v, unsigned long ty); extern struct ginfo *ginfo_container3(struct ginfo *v, unsigned long ty); extern void ginfo_container4(struct ginfo *v); extern struct invalid_key_element * gen_before_invalid_key (); extern struct invalid_key_element * gen_after_invalid_key (struct invalid_key_element *p); extern struct invalid_keys * gen_invalid_keys (struct invalid_key_element *p1, struct invalid_key_element *p2); extern void gen_test_invalid_keys (struct invalid_keys *p, struct sym *f, int fs); extern int sort_exref_compare(const void *z1, const void *z2); extern int main(int argc, char *argv[]); /* htcobol.c */ extern void opt_is(int i); extern void hterror(int erno, int severity, char *s, ...); extern void yywarn(char *s, ...); extern void yyerror(char *s, ...); extern int yyparse(void); /* pp_parser.tab.c */ extern void pp_yyerror(char *s, ...); extern int pp_yyparse(void); /* htglobals.c */ extern int process_command_line(int argc, char *argv[]); extern void do_file_cleanup(void); extern int process_assemble(void); extern int process_ld(void); extern int process_shlib_ld(void); extern int process_lib_ld(void); extern int read_compiler_options(void); extern int check_option(char *option_in, char *arg); extern void turn_on_list_mode(void); extern void turn_off_list_mode(void); extern void turn_on_xref(void); extern void turn_off_xref(void); extern void pass_options (char *optlst); extern int pexec(char *cmdstr); extern void process_verbose_options (int ac, char *av[]); extern int find_copybook_file(char *fname, char *lname); /* scan.c */ extern int yylex(void); extern void yyrestart(FILE *input_file); extern int is_integer_token(char *tok); extern int is_valid_identifier(char *tok); extern int lex_fgets(char *buf, int maxsize); extern void dcs(void); extern char *copy_strip_spaces(char *s); extern void add_copy_replacement(char *orig_value, char *replacement); extern void copy_do_replacements(char *buffer); extern void copy_switch(char *filename); extern struct reserved_sym *lookup_reserved(char *s); extern void install_reserved(void); extern int reserved(char *s); extern struct intrinsic_sym *lookup_intrinsic(char *s); extern void scdebug(char *fmt, ...); extern int yywrap(void); /* reswords.c */ /* Enumerate the types of intrinsic functions */ enum { ITYPE_FLOAT, ITYPE_INT, ITYPE_DATE, ITYPE_DATETIME, ITYPE_JULIANDATE, ITYPE_YEAR, ITYPE_ALPHA, ITYPE_INLINE }; struct intrinsic_function { char *name; char function_type; short args; }; struct intrinsic_function *lookup_intrinsic_function( char *s ); #define ANY_NUMBER 32767 #endif