| /* Copyright (c) 1988 Bellcore |
| ** All Rights Reserved |
| ** Permission is granted to copy or use this program, EXCEPT that it |
| ** may not be sold for profit, the copyright notice must be reproduced |
| ** on copies, and credit should be given to Bellcore where it is due. |
| ** BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. |
| */ |
| |
| |
| #ifndef L_INCLUDED |
| |
| #define _L_MAXLINES 10000 |
| |
| /* |
| ** oh god, is this an ugly implementation. |
| ** I really should have a two dimensional array of structures |
| ** the history of the current arrangement is too long |
| ** and ugly to record here. |
| ** Someday when I have too much time on my hands . . . |
| */ |
| |
| extern char *_L_al[]; /* storage for text in first file */ |
| extern char *_L_bl[]; /* storage for text in second file */ |
| |
| extern int _L_ai[]; /* pointer from token line to first token */ |
| extern int _L_bi[]; |
| |
| extern int _L_ac[]; /* number of tokens on a given token line */ |
| extern int _L_bc[]; |
| |
| extern int _L_aclindex[]; /* mapping from content lines to real lines */ |
| extern int _L_bclindex[]; |
| |
| extern int _L_atlindex[]; /* mapping from lines with tokens to content lines */ |
| extern int _L_btlindex[]; |
| |
| extern int _L_arlm; /* count of real lines */ |
| extern int _L_brlm; |
| |
| extern int _L_aclm; /* count of content lines */ |
| extern int _L_bclm; |
| |
| extern int _L_atlm; /* count of lines with tokens */ |
| extern int _L_btlm; |
| |
| extern int L_init_file(int fnumber, char *fname); |
| |
| /* |
| ** routines to set up mappings from token lines to content lines |
| ** and from content lines to real lines |
| */ |
| #define L_setclindex(file,content,real) (file?(_L_bclindex[content]=real):\ |
| (_L_aclindex[content]=real)) |
| |
| #define L_settlindex(file,token,content) (file?(_L_btlindex[token]=content):\ |
| (_L_atlindex[token]=content)) |
| /* |
| ** get line number X from file |
| */ |
| #define L_getrline(file, X) (file?(_L_bl[X]):(_L_al[X])) |
| #define L_getcline(file, X) (file?(_L_bl[_L_bclindex[X]]):\ |
| (_L_al[_L_aclindex[X]])) |
| #define L_gettline(file, X) (file?(_L_bl[_L_bclindex[_L_btlindex[X]]]):\ |
| (_L_al[_L_aclindex[_L_atlindex[X]]])) |
| |
| #define L_cl2rl(file, X) (file?(_L_bclindex[X]):\ |
| (_L_aclindex[X])) |
| #define L_tl2cl(file, X) (file?(_L_btlindex[X]):\ |
| (_L_atlindex[X])) |
| #define L_tl2rl(file, X) (file?(_L_bclindex[_L_btlindex[X]]):\ |
| (_L_aclindex[_L_atlindex[X]])) |
| |
| /* |
| ** get number of first token on line X of the file |
| */ |
| #define L_getindex(file,X) (file?(_L_bi[X]):(_L_ai[X])) |
| |
| /* |
| ** get count of number of tokens on line X of first file |
| */ |
| #define L_getcount(file,X) (file?(_L_bc[X]):(_L_ac[X])) |
| |
| /* |
| ** save number of first token for line X of file |
| */ |
| #define L_setindex(file,index,value) (file?(_L_bi[index]=value):(_L_ai[index]=value)) |
| /* |
| ** save count of tokens on line X of file |
| */ |
| #define L_setcount(file,index,value) (file?(_L_bc[index]=value):(_L_ac[index]=value)) |
| #define L_inccount(file,index) (file?(_L_bc[index]++):(_L_ac[index]++)) |
| |
| /* |
| ** retrieve line and token counts |
| */ |
| #define L_getrlmax(file) (file?_L_brlm:_L_arlm) |
| #define L_getclmax(file) (file?_L_bclm:_L_aclm) |
| #define L_gettlmax(file) (file?_L_btlm:_L_atlm) |
| |
| /* |
| ** set line and token counts |
| */ |
| #define _L_setrlmx(file,value) (file?(_L_brlm=(value)):(_L_arlm=(value))) |
| #define L_setclmax(file,value) (file?(_L_bclm=(value)):(_L_aclm=(value))) |
| #define L_settlmax(file,value) (file?(_L_btlm=(value)):(_L_atlm=(value))) |
| |
| /* |
| ** increment line and token counts |
| */ |
| #define _L_incrlmx(file) (file?(_L_brlm++):(_L_arlm++)) |
| #define L_incclmax(file) (file?(_L_bclm++):(_L_aclm++)) |
| #define L_inctlmax(file) (file?(_L_btlm++):(_L_atlm++)) |
| |
| #define L_INCLUDED |
| #endif |