home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 19 Printer / 19-Printer.zip / cpostsrc.zip / CPOST.H < prev    next >
C/C++ Source or Header  |  1993-02-13  |  12KB  |  385 lines

  1. /*------------------------------------------------------------------
  2.  * cpost.h : include file for cPost
  3.  *------------------------------------------------------------------
  4.  * 10-10-91 originally by Patrick J. Mueller
  5.  * 12-03-92 converted from cBook to cPost
  6.  *------------------------------------------------------------------*/
  7.  
  8. #include "list.h"
  9. #include "hash.h"
  10.  
  11. /*------------------------------------------------------------------
  12.  * additional token types
  13.  *------------------------------------------------------------------*/
  14. #define TOKEN_LBRACE -1
  15. #define TOKEN_RBRACE -2
  16. #define TOKEN_LPAREN -3
  17. #define TOKEN_RPAREN -4
  18.  
  19. #define TOKEN_FUNPRO -5
  20. #define TOKEN_FUNUSE -6
  21. #define TOKEN_FUNDEF -7
  22.  
  23. #define TOKEN_RESER  -8
  24.  
  25. #define TOKEN_SCOLON -9
  26. #define TOKEN_COMMA  -10
  27.  
  28. /*------------------------------------------------------------------
  29.  * number of lines to buffer in at a time
  30.  *------------------------------------------------------------------*/
  31. #define FILE_LINES 256
  32.  
  33. /*------------------------------------------------------------------
  34.  * max length of line
  35.  *------------------------------------------------------------------*/
  36. #define MAX_LINE_LEN 4096
  37.  
  38. /*------------------------------------------------------------------
  39.  * typedefs
  40.  *------------------------------------------------------------------*/
  41.  
  42. /*------------------------------------------------------------------
  43.  * page eject
  44.  *------------------------------------------------------------------*/
  45. typedef struct PageEject
  46.    {
  47.    unsigned long     lineNo;
  48.    struct PageEject *next;
  49.    } PageEject;
  50.  
  51. /*------------------------------------------------------------------
  52.  * token structure
  53.  *------------------------------------------------------------------*/
  54. typedef struct Tok
  55.    {
  56.    int         nestParen;
  57.    int         nestBrace;
  58.    int         extType;
  59.    int         flags;
  60.    char       *str;
  61.    struct Tok *sib;
  62.    struct Tok *next;
  63.    Token       tok;
  64.    } Tok;
  65.  
  66. /*------------------------------------------------------------------
  67.  * a file entry for a list of files
  68.  *------------------------------------------------------------------*/
  69. typedef struct File
  70.    {
  71.    char            *name;
  72.    char            *pathName;
  73.    char            *tempName;
  74.    char            *ext;
  75.    int              type;
  76.    int              maxLineLen;
  77.    char           **line;
  78.    unsigned long    lines;
  79.    unsigned long    cline;
  80.    List            *funcDefList;
  81.    List            *funcProList;
  82.    Tok             *tokList;
  83.    char             date[9];
  84.    char             time[9];
  85.    Hash            *identHash;
  86.    PageEject       *breakList;
  87.    } File;
  88.  
  89. /*------------------------------------------------------------------
  90.  * information about a function
  91.  *------------------------------------------------------------------*/
  92. typedef struct Function
  93.    {
  94.    char            *name;
  95.    char            *fileName;
  96.    unsigned long    lineNo;
  97.    int              id;
  98.    int              spotted;
  99.    List            *callsList;
  100.    List            *calledByList;
  101.    } Function;
  102.  
  103. /*------------------------------------------------------------------
  104.  * formatting options
  105.  *------------------------------------------------------------------*/
  106. typedef struct
  107.    {
  108.    char *fontNormal   ; int sizeNormal   ;
  109.    char *fontKeyword  ; int sizeKeyword  ;
  110.    char *fontFunction ; int sizeFunction ;
  111.    char *fontComment  ; int sizeComment  ;
  112.    char *fontPreproc  ; int sizePreproc  ;
  113.    char *fontLineNo   ; int sizeLineNo   ;
  114.  
  115.    char *fontHeader;
  116.  
  117.    int   pageLen;
  118.    int   pageWid;
  119.  
  120.    int   hMargin;
  121.    int   tMargin;
  122.    int   bMargin;
  123.    int   lMargin;
  124.    } Format;
  125.  
  126. /*------------------------------------------------------------------
  127.  * global control block
  128.  *------------------------------------------------------------------*/
  129. typedef struct Info
  130.    {
  131.    List            *fileList;
  132.    List            *funcTree;
  133.    FILE            *oFile;
  134.    Hash            *identHash;
  135.    Hash            *reservedHash;
  136.    int              indent1;
  137.    int              count1;
  138.    int              count2;
  139.    Format           format;
  140.  
  141.    char            *oHtype;
  142.    char            *oCtype;
  143.    int              oTabs;
  144.    char            *oTemp;
  145.    int              oDebug;
  146.    char            *oSort;
  147.    int              oBrack;
  148.    int              oDuplex;
  149.    char            *oImbed;
  150.    int              oSpace;
  151.    int              oBreak;
  152.    int              oXlateX;
  153.    int              oXlateY;
  154.    char            *oWrapB;
  155.    char            *oWrapA;
  156.    char            *oRepHdr;
  157.    } Info;
  158.  
  159. /*------------------------------------------------------------------
  160.  * global variables
  161.  *------------------------------------------------------------------*/
  162. #if defined(DEFINE_GLOBALS)
  163.           Info info;
  164. #else
  165.    extern Info info;
  166. #endif
  167.  
  168. /*------------------------------------------------------------------
  169.  * some stuff for c/370
  170.  *------------------------------------------------------------------*/
  171. #if defined(OPSYS_CMS)
  172.    #define FileNameCompare              fncomp
  173.    #define FileSpecAdd                  fsadd
  174.    #define FileReadLines                frline
  175.    #define GetBlockOfFile               gbofile
  176.    #define InitCAttrs                   icattr
  177.    #define FunctionNameCompare          fnccomp
  178.    #define FunctionNamePtrCompare       fncpcomp
  179.    #define GetFunction                  getfnc
  180.    #define PrintFunctionPtrInfo         pfpinf
  181.    #define PrintFunctionInfo            pfinf
  182.    #define TempFileName                 tfname
  183.    #define IsTempFileName               itfname
  184.    #define cPostError                   cperror
  185. #endif
  186.  
  187. #if !defined(max)
  188.    #define max(x,y) ((x) > (y) ? (x) : (y))
  189. #endif
  190.  
  191. #if !defined(min)
  192.    #define min(x,y) ((x) < (y) ? (x) : (y))
  193. #endif
  194.  
  195. /*-/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-*/
  196. /*-\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-*/
  197.  
  198. /*------------------------------------------------------------------
  199.  * pass 1 of cPost
  200.  *------------------------------------------------------------------*/
  201. int Pass1(
  202.    File     *file,
  203.    Info     *info
  204.    );
  205.  
  206. /*------------------------------------------------------------------
  207.  * pass 2 of cPost
  208.  *------------------------------------------------------------------*/
  209. int Pass2(
  210.    File     *file,
  211.    Info     *info
  212.    );
  213.  
  214. /*-/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-*/
  215. /*-\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/-*/
  216.  
  217. /*------------------------------------------------------------------
  218.  * utility functions
  219.  *------------------------------------------------------------------*/
  220.  
  221. /*------------------------------------------------------------------
  222.  * compare two file names
  223.  *------------------------------------------------------------------*/
  224. int FileNameCompare(
  225.    File *name1,
  226.    File *name2
  227.    );
  228.  
  229. /*------------------------------------------------------------------
  230.  * add a file name to the filename list
  231.  *------------------------------------------------------------------*/
  232. void FileSpecAdd(
  233.    Info      *info,
  234.    List      *fileList,
  235.    char      *fileSpec
  236.    );
  237.  
  238. /*------------------------------------------------------------------
  239.  * hash an identifier
  240.  *------------------------------------------------------------------*/
  241. int IdentHash(
  242.    char     **str,
  243.    int        hashSize
  244.    );
  245.  
  246. /*------------------------------------------------------------------
  247.  * compare two strings indirectly
  248.  *------------------------------------------------------------------*/
  249. int IdentCompare(
  250.    char **str1,
  251.    char **str2
  252.    );
  253.  
  254. /*------------------------------------------------------------------
  255.  * read file into array of lines
  256.  *------------------------------------------------------------------*/
  257. File *FileReadLines(
  258.    Info *info,
  259.    File *file
  260.    );
  261.  
  262. /*------------------------------------------------------------------
  263.  * return bytes from the file, conveniently a line at a time
  264.  *------------------------------------------------------------------*/
  265. unsigned long GetBlockOfFile(
  266.    void  *readInfo,
  267.    char **buffer
  268.    );
  269.  
  270. /*------------------------------------------------------------------
  271.  * compare two function names
  272.  *------------------------------------------------------------------*/
  273. int FunctionNameCompare(
  274.    Function *func1,
  275.    Function *func2
  276.    );
  277.  
  278. int FunctionNamePtrCompare(
  279.    Function **func1,
  280.    Function **func2
  281.    );
  282.  
  283. /*------------------------------------------------------------------
  284.  * get function (add if needed) from global function table
  285.  *------------------------------------------------------------------*/
  286. Function *GetFunction(
  287.    Info          *info,
  288.    char          *name
  289.    );
  290.  
  291. /*------------------------------------------------------------------
  292.  * dump function information
  293.  *------------------------------------------------------------------*/
  294. int PrintFunctionPtrInfo(
  295.    Function **func,
  296.    Info      *info
  297.    );
  298.  
  299. /*------------------------------------------------------------------
  300.  * dump function information
  301.  *------------------------------------------------------------------*/
  302. int PrintFunctionInfo(
  303.    Function *func,
  304.    Info     *info
  305.    );
  306.  
  307. /*------------------------------------------------------------------
  308.  * generate a temporary file name
  309.  *------------------------------------------------------------------*/
  310. char *TempFileName(
  311.    FILE **file,
  312.    Info  *info
  313.    );
  314.  
  315. /*------------------------------------------------------------------
  316.  * check for temporary file name
  317.  *------------------------------------------------------------------*/
  318. int IsTempFileName(
  319.    char *name
  320.    );
  321.  
  322. /*------------------------------------------------------------------
  323.  * compare strings case insensitively
  324.  *------------------------------------------------------------------*/
  325. int Stricmp(
  326.    char *str1,
  327.    char *str2
  328.    );
  329.  
  330. /*------------------------------------------------------------------
  331.  * compare strings case insensitively
  332.  *------------------------------------------------------------------*/
  333. int Memicmp(
  334.    char *str1,
  335.    char *str2,
  336.    int   len
  337.    );
  338.  
  339. /*------------------------------------------------------------------
  340.  * upper case a string
  341.  *------------------------------------------------------------------*/
  342. char *Strupr(
  343.    char *str
  344.    );
  345.  
  346. /*------------------------------------------------------------------
  347.  * reverse a string
  348.  *------------------------------------------------------------------*/
  349. char *Strrev(
  350.    char *str
  351.    );
  352.  
  353. /*------------------------------------------------------------------
  354.  * generate an error message and exit
  355.  *------------------------------------------------------------------*/
  356. void cPostError(
  357.    int   exitCode,
  358.    char *format,
  359.    ...
  360.    );
  361.  
  362. /*------------------------------------------------------------------
  363.  * print out of memory message and exit
  364.  *------------------------------------------------------------------*/
  365. void cPostNoMem(
  366.    void
  367.    );
  368.  
  369. /*------------------------------------------------------------------
  370.  * parse file
  371.  *------------------------------------------------------------------*/
  372. void cParse(
  373.    File     *file,
  374.    Info     *info
  375.    );
  376.  
  377. /*------------------------------------------------------------------
  378.  * clean up after parsing file
  379.  *------------------------------------------------------------------*/
  380. void cParseDone(
  381.    File     *file,
  382.    Info     *info
  383.    );
  384.  
  385.