[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
$!-----------------------------------------------------------------'F$VERIFY(0)
$! BUILD_WATCHFUNC.COM
$! Generates the 'watchfunc.h' header file used by WATCH.C WatchFunction().
$! 
$! 02-MAY-2010  MGD  some commonly personalised verbs
$! 04-AUG-2001  MGD  initial
$!-----------------------------------------------------------------------------
$ TYPE = "TYPE"
$ SEARCH  = "SEARCH"
$ PROCEDURE = F$ENVIRONMENT("PROCEDURE")
$ WHERE = F$PARSE(PROCEDURE,,,"DEVICE") + F$PARSE(PROCEDURE,,,"DIRECTORY")
$ FUNCTIONS = WHERE + F$PARSE(PROCEDURE,,,"NAME") + ".LIS"
$ WATCHFUNC = WHERE + "WATCHFUNC.H"
$ DEFINE /USER SYS$OUTPUT NL:
$ DEFINE /USER SYS$ERROR NL:
$ DELETE /NOCONFIRM /NOLOG 'FUNCTIONS';*
$!(search for all source lines containing "()" and "!&F")
$ SEARCH 'WHERE'*.C "()","!&F" /MATCH=AND /NOHEADING /OUTPUT='FUNCTIONS'
$ IF F$TRNLNM("FUNCTIONS","LNM$PROCESS") .NES. "" THEN CLOSE FUNCTIONS
$ OPEN /READ FUNCTIONS 'FUNCTIONS'
$ IF F$TRNLNM("WATCHFUNC","LNM$PROCESS") .NES. "" THEN CLOSE WATCHFUNC
$ DELETE /NOCONFIRM /NOLOG 'WATCHFUNC';*
$ WATCHFUNCCC = "char  WatchFuncCc [] = """ + WATCHFUNC_CC + """;"
$ OPEN /WRITE WATCHFUNC 'WATCHFUNC'
$ TYPE SYS$INPUT: /OUTPUT=WATCHFUNC
/*****************************************************************************/
/*
                                WatchFunc.h

Created automagically by BUILD_WATCHFUNC.COM.  DO NOT MANUALLY EDIT!

$ WRITE WATCHFUNC F$CVTIME(,"ABSOLUTE")
$ TYPE SYS$INPUT /OUTPUT=WATCHFUNC
*/
/*****************************************************************************/

$ WRITE /SYMBOL WATCHFUNC WATCHFUNCCC
$ TYPE SYS$INPUT: /OUTPUT=WATCHFUNC

typedef struct WatchFuncStruct WATCH_FUNC;

static struct WatchFuncStruct
{
   void  *Address;
   char  *Name;
}
WatchFunc [] =
{
$ READ_LOOP:
$    READ /END=END_READ_LOOP /ERROR=END_READ_LOOP FUNCTIONS LINE
$    FNAME = F$ELEMENT(1,"""",F$ELEMENT(0,")",LINE)) - "("
$    IF FNAME .EQS. "00000000" THEN GOTO READ_LOOP
$    WRITE WATCHFUNC "   { &" + FNAME + ", """ + FNAME + """ },"
$    GOTO READ_LOOP
$ END_READ_LOOP:
$ CLOSE FUNCTIONS
$ DELETE /NOCONFIRM /NOLOG 'FUNCTIONS';*
$ TYPE SYS$INPUT /OUTPUT=WATCHFUNC
   { NULL, NULL }
};

/*****************************************************************************/

$ CLOSE WATCHFUNC
$ DEFINE /USER SYS$OUTPUT NL:
$ DEFINE /USER SYS$ERROR NL:
$ PURGE 'WATCHFUNC'
$ SET PROTECTION=W:RE 'WATCHFUNC'
$!-----------------------------------------------------------------------------