From b107702d6356bc85692d3098ec9fbb2a969ecfce Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 8 Mar 2012 11:44:39 -0500 Subject: [PATCH] Imported Upstream version 1.2.26 --- alConfig.c | 16 +- alLib.c | 16 +- alLib.h | 2 +- alView.c | 2 +- alh.c | 8 + alh.h | 2 +- alh.notes | 14 ++ awAlh.c | 14 +- awView.c | 284 ++++++++++++++++++++--------------- axArea.c | 4 +- axArea.h | 2 +- beepSevr.c | 2 +- browser.c | 2 +- dialog.c | 2 +- documentation/ALH.html | 12 -- documentation/ALH.title.html | 4 +- documentation/Makefile | 2 +- file.c | 49 ++++-- force.c | 5 +- mask.c | 2 +- process.c | 2 +- property.c | 8 +- scroll.c | 49 +++--- showmask.c | 10 +- test.win32.alhConfig | 6 + version.h | 4 +- 26 files changed, 306 insertions(+), 217 deletions(-) diff --git a/alConfig.c b/alConfig.c index 3a7caad..c8ca3bb 100644 --- a/alConfig.c +++ b/alConfig.c @@ -422,7 +422,8 @@ int context,int caConnect,struct mainGroup *pmainGroup) float rate =1.0; float rateIn; char *str; - int i,len; + int i; + size_t len; int rtn; /* config optional lines */ @@ -607,13 +608,12 @@ int context,int caConnect,struct mainGroup *pmainGroup) } else { print_error(buf,"Invalid $SEVRPV Line"); - } + } return; } if (strncmp(&buf[1],"COMMAND",7)==0) { /*COMMAND*/ - int len; if (gcdata->command) return; sscanf(buf,"%20s",command); @@ -627,7 +627,6 @@ int context,int caConnect,struct mainGroup *pmainGroup) } if (strncmp(&buf[1],"SEVRCOMMAND",11)==0) { /*SEVRCOMMAND*/ - int len; sscanf(buf,"%20s",command); len = strlen(command); @@ -640,7 +639,6 @@ int context,int caConnect,struct mainGroup *pmainGroup) } if (strncmp(&buf[1],"STATCOMMAND",11)==0) { /*STATCOMMAND*/ - int len; if(context!=CHANNEL) { print_error(buf,"Logic error: STATCOMMAND: Context not a channel"); @@ -659,7 +657,6 @@ int context,int caConnect,struct mainGroup *pmainGroup) } if (strncmp(&buf[1],"ALIAS",5)==0) { /*ALIAS*/ - int len; if (gcdata->alias) return; sscanf(buf,"%20s",command); @@ -702,7 +699,6 @@ int context,int caConnect,struct mainGroup *pmainGroup) } if (strncmp(&buf[1],"GUIDANCE",8)==0) { /*GUIDANCE*/ - int len; sscanf(buf,"%20s",command); len = strlen(command); @@ -982,7 +978,7 @@ static void alConfigTreePrint(FILE *fw,GLINK *glink,char *treeSym) struct groupData *gdata; struct chanData *cdata; SNODE *pt; - int length; + size_t length; int symSize = 3; static char symMiddle[]="+--"; @@ -1161,7 +1157,7 @@ void getStringSevrCommandList(ELLLIST *pList,char **pstr) char *str; struct sevrCommand *sevrCommand; ELLNODE *pt; - int i; + size_t i; pt = ellFirst(pList); i=0; @@ -1272,7 +1268,7 @@ void getStringStatCommandList(ELLLIST *pList,char **pstr) char *str; struct statCommand *statCommand; ELLNODE *pt; - int i; + size_t i; pt = ellFirst(pList); i=0; diff --git a/alLib.c b/alLib.c index 20c7ca4..8537117 100644 --- a/alLib.c +++ b/alLib.c @@ -57,7 +57,7 @@ char *Strncat( /* max must be >= 0 and no more than stringsize - 1 */ /* for char string[10]; max must be <= 9 */ -int l, newMax; +size_t l, newMax; char *s; l = strlen( dest ); @@ -1181,13 +1181,12 @@ static void alUpdateGroupMask(CLINK *clink,int index,int op) labelStr[80] = 0; } - - str = XmStringCreateSimple(labelStr); - XtVaSetValues(areaTop->blinkButton, - XmNlabelString, str, - NULL); - XmStringFree(str); - + if (areaTop->blinkButton) { + str = XmStringCreateSimple(labelStr); + XtVaSetValues(areaTop->blinkButton, + XmNlabelString, str, NULL); + XmStringFree(str); + } } } @@ -1409,7 +1408,6 @@ void alChangeChanMask(CLINK *clink,MASK mask) } - } /*********************************************************************** diff --git a/alLib.h b/alLib.h index 1924e5b..3f1892a 100644 --- a/alLib.h +++ b/alLib.h @@ -55,7 +55,7 @@ typedef struct countFilter { short ackt; /* acknowledge transients? */ char value[MAX_STRING_SIZE]; /* channel value from CA */ int countIndex; - int alarmTime; + time_t alarmTime; time_t *alarmTimeHistory; void *clink; XtIntervalId timeoutId; diff --git a/alView.c b/alView.c index 310c008..0adbf83 100644 --- a/alView.c +++ b/alView.c @@ -92,7 +92,7 @@ static void treeView(GLINK *glink,int command,char *treeSym,int (*viewFilter)()) SNODE *pt; int subcommand; int oldViewCount=0; - int length; + size_t length; static char symMiddle={ 0x15 }; static char symContinue={ diff --git a/alh.c b/alh.c index dee72bd..375fde1 100644 --- a/alh.c +++ b/alh.c @@ -19,6 +19,7 @@ **********************************************************************/ #define DEBUG_CALLBACKS 0 +#define MIN_MULTICLICK_INTERVAL 500 #include #include @@ -52,6 +53,8 @@ XFontStruct *font_info; int main(int argc,char *argv[]) { + + int interval=0; /* OS specific initialization */ #ifdef WIN32 HCLXmInit(); @@ -71,6 +74,11 @@ int main(int argc,char *argv[]) exit(-1); } + interval = XtGetMultiClickTime(display); + if (interval < MIN_MULTICLICK_INTERVAL) XtSetMultiClickTime(display,MIN_MULTICLICK_INTERVAL); + interval = XtGetMultiClickTime(display); + + XtAppSetWarningMsgHandler(appContext, (XtErrorMsgHandler)trapExtraneousWarningsHandler); diff --git a/alh.h b/alh.h index 6af1732..c0047d6 100644 --- a/alh.h +++ b/alh.h @@ -181,7 +181,7 @@ struct setup { char logFile[NAMEDEFAULT_SIZE]; /* alarm log file name */ char opModFile[NAMEDEFAULT_SIZE]; /* opMod log file name */ char saveFile[NAMEDEFAULT_SIZE]; /* save config file name */ - short silenceForever; /* 1 - beepoff forever is true */ + Boolean silenceForever; /* 1 - beepoff forever is true */ short silenceOneHour; /* 1 - beepoff one hour is true */ short silenceCurrent; /* 1 - current beep on 0 - off */ short beepSevr; /* 1,2,3,4,5 */ diff --git a/alh.notes b/alh.notes index 077385d..369292b 100644 --- a/alh.notes +++ b/alh.notes @@ -574,3 +574,17 @@ Mon Aug 18 15:59:03 CDT 2008 Thu Oct 15 09:44:40 CDT 2009 ALH_1_2_25 Removed usage of YES macro for build with base R3.14.11. Added comment in alAudio.c to uncomment/modify for alarm sounds. + +Tue Oct 27 15:17:33 CDT 2009 + Changes to avoid compile warning messages. + +Fri Jul 9 15:14:24 CDT 2010 ALH_1_2_26 + Master/slave locking bug fix from Andreas Luedeke. + Rewrote doubleclick code so it works the same on all operating systems. + Portablility changes. + Bug fix: set current value to -999 to recalculate and test the force pv + expression after user changes are Applied from the ForcePV dialog box. + Core dump bug fix: Test for existance before trying to modify runtime + window string. Alh may be started with main window only (-mainwindow). + Removed references to Alarm Configuration Tool in ALH Users Manual. + diff --git a/awAlh.c b/awAlh.c index 96a0acc..4ac8f1d 100644 --- a/awAlh.c +++ b/awAlh.c @@ -34,10 +34,12 @@ void awUpdateRowWidgets(line) Update line widgets #include #include +#ifndef CYGWIN32 #ifndef WIN32 #include #include #endif +#endif #include #include @@ -269,11 +271,11 @@ Display* d = XtDisplay( w ); if (*target == XA_TARGETS(d)) { Atom* targetP; - Atom* std_targets; + caddr_t std_targets; unsigned long std_length; XmuConvertStandardSelection( w, req->time, selection, target, type_return, - (XPointer*) &std_targets, &std_length, format_return ); + &std_targets, &std_length, format_return ); *value = (char*) XtMalloc( sizeof(Atom) * ( (unsigned) std_length + 5 ) ); @@ -337,7 +339,7 @@ static Boolean cvt ( Display *d; struct anyLine *line; Atom MOTIF_DROP; -int l; +size_t l; char *dragData; d = XtDisplay( w ); @@ -566,6 +568,7 @@ Widget alhCreateMenu(Widget parent,XtPointer user_data) {NULL}, }; /* Albert Kagarmanov new */ +#ifndef CYGWIN32 #ifndef WIN32 static MenuItem setup_broadcast_mess_menu[] = { { "Common Message", PushButtonGadgetClass, 'C', NULL, NULL, @@ -580,6 +583,7 @@ Widget alhCreateMenu(Widget parent,XtPointer user_data) {NULL}, }; +#endif #endif /* end Albert Kagarmanov new */ /* ******************************************** Albert1 : ************************************ */ @@ -601,9 +605,11 @@ static MenuItem action_menuNew[] = { { "NoAck for One Hour ...", ToggleButtonGadgetClass, 'N', "CtrlN", "Ctrl+N", alhActionCallback, (XtPointer)MENU_ACTION_NOACKTIMER, (MenuItem *)NULL, 0 }, /* Albert1 For MESSAGE BROADCAST: */ +#ifndef CYGWIN32 #ifndef WIN32 { "Send Message ...", PushButtonGadgetClass, 'B', "CtrlB", "Ctrl+B", 0, 0, (MenuItem *)setup_broadcast_mess_menu, 0 }, +#endif #endif {NULL}, }; @@ -1098,6 +1104,7 @@ XmSelectionBoxCallbackStruct *call_data) XtUnmanageChild(w); } +#ifndef CYGWIN32 #ifndef WIN32 struct messBroadcastData { @@ -1311,6 +1318,7 @@ XtUnmanageChild(w); lockf(messBroadcastDeskriptor, F_ULOCK, 0L); } +#endif #endif /****************************************************** diff --git a/awView.c b/awView.c index 6300e2d..496008b 100644 --- a/awView.c +++ b/awView.c @@ -30,6 +30,8 @@ #include "line.h" #include "ax.h" +#define MINIMUM_MULTICLICKTIME 500 + /* structures for arrow button single vs double click action */ struct timeoutData { Widget pushButton; @@ -37,15 +39,10 @@ struct timeoutData { XtIntervalId timeoutId; }; -static void singleClickTreeW_callback(XtPointer cd, XtIntervalId *id); -static void singleClickNameGroupW_callback(XtPointer cd, XtIntervalId *id); -static void singleClickArrowGroupW_callback(XtPointer cd, XtIntervalId *id); - /*************************************************** - doubleClickNameGroupW_callback + doubleClickNameGroupW ****************************************************/ -static void doubleClickNameGroupW_callback(Widget pushButton,struct anyLine *line, -XmPushButtonCallbackStruct *cbs) +static void doubleClickNameGroupW(Widget pushButton,struct anyLine *line) { struct subWindow *treeWindow; struct subWindow *groupWindow; @@ -156,25 +153,35 @@ XmPushButtonCallbackStruct *cbs) } /****************************************************** - singleClickTreeW_callback + arrowTreeW_timer_callback ******************************************************/ -static void singleClickTreeW_callback(XtPointer cd, XtIntervalId *id) +static void arrowTreeW_timer_callback(XtPointer cd, XtIntervalId *id) { - ALINK *area; struct timeoutData *pdata = (struct timeoutData *)cd; -#if DEBUG_CALLBACKS - { - static int n=0; + arrowTreeW_callback(pdata->pushButton,pdata->gdata,NULL); +} - printf("singleClickTreeW_callback: n=%d\n",n++); - } -#endif +/****************************************************** + singleClickArrowTreeW +******************************************************/ +static void singleClickArrowTreeW(Widget pushButton,void *glink) +{ + ALINK *area; + + XtVaGetValues(pushButton, XmNuserData, &area, NULL); + displayNewViewTree(area,(GLINK *)glink,EXPANDCOLLAPSE1); +} - XtVaGetValues(pdata->pushButton, XmNuserData, &area, NULL); +/*************************************************** + doubleClickArrowTreeW +****************************************************/ +static void doubleClickArrowTreeW(Widget pushButton,void *glink) +{ + ALINK *area; - pdata->timeoutId= 0; - displayNewViewTree(area,(GLINK *)pdata->gdata,EXPANDCOLLAPSE1); + XtVaGetValues(pushButton, XmNuserData, &area, NULL); + displayNewViewTree(area,glink,EXPAND); } /*************************************************** @@ -183,140 +190,150 @@ static void singleClickTreeW_callback(XtPointer cd, XtIntervalId *id) void arrowTreeW_callback(Widget pushButton,void *glink, XmPushButtonCallbackStruct *cbs) { - void *area; static unsigned long interval=0; + static unsigned int clicks=0; static struct timeoutData data; - if (cbs->click_count == 1){ + if (cbs){ + if (clicks == 0){ /* Get multi-click time in ms */ - if (!interval) interval = XtGetMultiClickTime(display); - data.pushButton = pushButton; - data.gdata = (void *)glink; - if ( data.timeoutId== 0 ) { - data.timeoutId= XtAppAddTimeOut(appContext,interval, - singleClickTreeW_callback,(XtPointer)&data); + if (!interval) { + interval = XtGetMultiClickTime(display); + if (interval < MINIMUM_MULTICLICKTIME ) interval=MINIMUM_MULTICLICKTIME; } - - } else if (cbs->click_count == 2) { - if (data.timeoutId) { - XtRemoveTimeOut(data.timeoutId); - data.timeoutId=0; - } - XtVaGetValues(pushButton, XmNuserData, &area, NULL); - displayNewViewTree(area,glink,EXPAND); + data.pushButton = pushButton; + data.gdata = glink; + data.timeoutId= XtAppAddTimeOut(appContext,interval, + arrowTreeW_timer_callback,(XtPointer)&data); + clicks=1; + } else if (clicks == 1) { + doubleClickArrowTreeW(pushButton,glink); + clicks=0; + } else { + clicks++; + } + } else { + if (clicks == 1) { + singleClickArrowTreeW(pushButton,glink); + } + clicks=0; + data.timeoutId=0; } } +/****************************************************** + nameGroupW_timer_callback +******************************************************/ +static void nameGroupW_timer_callback(XtPointer cd, XtIntervalId *id) +{ + struct timeoutData *pdata = (struct timeoutData *)cd; + + nameGroupW_callback(pdata->pushButton,pdata->gdata,NULL); +} + +/****************************************************** + singleClickNameGroupW +******************************************************/ +static void singleClickNameGroupW(Widget pushButton,struct anyLine *line) +{ + void *area; + struct subWindow *groupWindow; + struct anyLine *l; + + XtVaGetValues(pushButton, XmNuserData, &l, NULL); + groupWindow = l->pwindow; + markSelectedWidget(groupWindow,pushButton); + markSelection(groupWindow,line); + + /* update dialog windows if displayed */ + area = groupWindow->area; + axUpdateDialogs(area); + +} + /*************************************************** nameGroupW_callback ****************************************************/ void nameGroupW_callback(Widget pushButton,struct anyLine *line, XmPushButtonCallbackStruct *cbs) { - void *area; static unsigned long interval=0; + static unsigned int clicks=0; static struct timeoutData data; - struct subWindow *groupWindow; - + void *area; + struct subWindow *groupWindow; struct anyLine *l; - XtVaGetValues(pushButton, XmNuserData, &l, NULL); - groupWindow = l->pwindow; - - area = groupWindow->area; - - if (line->linkType == GROUP ) { - if (cbs->click_count == 1){ - /* Get multi-click time in ms */ - if (!interval) interval = XtGetMultiClickTime(display); - data.pushButton = pushButton; - data.gdata = (void *)line; - if (data.timeoutId == 0) { - data.timeoutId= XtAppAddTimeOut(appContext,interval, - singleClickNameGroupW_callback,(XtPointer)&data); - } - } else if (cbs->click_count == 2) { - if (data.timeoutId) { - XtRemoveTimeOut(data.timeoutId); - data.timeoutId=0; - } - doubleClickNameGroupW_callback(pushButton, line, cbs); - } - } else { + if (line->linkType != GROUP ) { + XtVaGetValues(pushButton, XmNuserData, &l, NULL); + groupWindow = l->pwindow; markSelectedWidget(groupWindow,pushButton); markSelection(groupWindow, line); /* update dialog windows if displayed */ + area = groupWindow->area; axUpdateDialogs(area); + return; + } + + if (cbs){ + if (clicks == 0){ + /* Get multi-click time in ms */ + if (!interval) { + interval = XtGetMultiClickTime(display); + if (interval < MINIMUM_MULTICLICKTIME ) interval=MINIMUM_MULTICLICKTIME; + } + data.pushButton = pushButton; + data.gdata = line; + data.timeoutId= XtAppAddTimeOut(appContext,interval, + nameGroupW_timer_callback,(XtPointer)&data); + clicks=1; + } else if (clicks == 1) { + doubleClickNameGroupW(pushButton,line); + clicks=0; + } else { + clicks++; + } + } else { + if (clicks == 1) { + singleClickNameGroupW(pushButton,line); + } + clicks=0; + data.timeoutId=0; } } /****************************************************** - singleClickNameGroupW_callback + arrowGroupW_timer_callback ******************************************************/ -static void singleClickNameGroupW_callback(XtPointer cd, XtIntervalId *id) +static void arrowGroupW_timer_callback(XtPointer cd, XtIntervalId *id) { - void *area; - struct subWindow *groupWindow; struct timeoutData *pdata = (struct timeoutData *)cd; - struct anyLine *l; - -#if DEBUG_CALLBACKS - { - static int n=0; - - printf("singleClickNameGroupW_callback: n=%d\n",n++); - } -#endif - - pdata->timeoutId= 0; - - XtVaGetValues(pdata->pushButton, XmNuserData, &l, NULL); - groupWindow = l->pwindow; - - area = groupWindow->area; - - markSelectedWidget(groupWindow,pdata->pushButton); - markSelection(groupWindow,pdata->gdata); - - /* update dialog windows if displayed */ - axUpdateDialogs(area); - + arrowGroupW_callback(pdata->pushButton,pdata->gdata,NULL); } /****************************************************** - singleClickArrowGroupW_callback + singleClickArrowGroupW ******************************************************/ -static void singleClickArrowGroupW_callback(XtPointer cd, XtIntervalId *id) +static void singleClickArrowGroupW(Widget pushButton,void *link) { - ALINK *area; - GCLINK *link; + GLINK *glink=(GLINK *)link; + ALINK *area; GLINK *parent; GLINK *glinkTemp; - struct subWindow *treeWindow; int grandparentsOpen; - struct timeoutData *pdata = (struct timeoutData *)cd; #if DEBUG_CALLBACKS - { - static int n=0; - - printf("singleClickArrowTreeW_callback: n=%d\n",n++); - } + static int n=0; + printf("singleClickArrowGroupW: n=%d\n",n++); #endif - pdata->timeoutId= 0; - - XtVaGetValues(pdata->pushButton, XmNuserData, &area, NULL); - - link = pdata->gdata; - parent = link->parent; - - treeWindow = area->treeWindow; + XtVaGetValues(pushButton, XmNuserData, &area, NULL); /* update tree window */ grandparentsOpen = TRUE; + parent = glink->parent; glinkTemp=parent->parent; while (glinkTemp){ if ( glinkTemp->viewCount <= 1 ) grandparentsOpen = FALSE; @@ -326,37 +343,56 @@ static void singleClickArrowGroupW_callback(XtPointer cd, XtIntervalId *id) if ( parent->viewCount <= 1 ){ displayNewViewTree(area,parent,EXPANDCOLLAPSE1); } - displayNewViewTree(area,(GLINK *)link,EXPANDCOLLAPSE1); + displayNewViewTree(area,(void*)glink,EXPANDCOLLAPSE1); } } +/****************************************************** + doubleClickArrowGroupW +******************************************************/ +static void doubleClickArrowGroupW(Widget pushButton,void *link) +{ + ALINK *area; + + XtVaGetValues(pushButton, XmNuserData, &area, NULL); + singleClickArrowGroupW(pushButton,link); + displayNewViewTree(area,(GLINK*)link,EXPAND); +} + /*************************************************** arrowGroupW_callback ****************************************************/ void arrowGroupW_callback(Widget pushButton,void *glink, XmPushButtonCallbackStruct *cbs) { - void *area; static unsigned long interval=0; + static unsigned int clicks=0; static struct timeoutData data; - if (cbs->click_count == 1){ + if (cbs){ + if (clicks == 0){ /* Get multi-click time in ms */ - if (!interval) interval = XtGetMultiClickTime(display); - data.pushButton = pushButton; - data.gdata = (void *)glink; - if ( data.timeoutId== 0 ) { - data.timeoutId= XtAppAddTimeOut(appContext,interval, - singleClickArrowGroupW_callback,(XtPointer)&data); - } - } else if (cbs->click_count == 2) { - if (data.timeoutId) { - XtRemoveTimeOut(data.timeoutId); - data.timeoutId=0; + if (!interval) { + interval = XtGetMultiClickTime(display); + if (interval < MINIMUM_MULTICLICKTIME ) interval=MINIMUM_MULTICLICKTIME; } - XtVaGetValues(pushButton, XmNuserData, &area, NULL); - singleClickArrowGroupW_callback((XtPointer)&data,NULL); - displayNewViewTree(area,glink,EXPAND); + data.pushButton = pushButton; + data.gdata = glink; + data.timeoutId= XtAppAddTimeOut(appContext,interval, + arrowGroupW_timer_callback,(XtPointer)&data); + clicks=1; + } else if (clicks == 1) { + doubleClickArrowGroupW(pushButton,glink); + clicks=0; + } else { + clicks++; + } + } else { + if (clicks == 1) { + singleClickArrowGroupW(pushButton,glink); + } + clicks=0; + data.timeoutId=0; } } diff --git a/axArea.c b/axArea.c index 3eca8df..249ff18 100644 --- a/axArea.c +++ b/axArea.c @@ -169,7 +169,7 @@ void setupConfig(char *filename,int program,ALINK *areaOld) XmString str; SNODE *proot; static int firstTime = TRUE; - int beepSevrOld; + short beepSevrOld; int holdToBeConnectedCount; /* initialize channel access */ @@ -411,7 +411,7 @@ void createMainWindowWidgets(ALINK *area) XmString str; char *app_name; char *title_str; - int len = 0; + size_t len = 0; Widget label_executionMode; if (area->toplevel) return; diff --git a/axArea.h b/axArea.h index 700a7df..f3cab6d 100644 --- a/axArea.h +++ b/axArea.h @@ -107,7 +107,7 @@ typedef struct _menu_item { void (*callback)( Widget,XtPointer,XtPointer); /* routine to call; NULL if note */ XtPointer callback_data; /* client_data for callback() */ struct _menu_item *subitems; /* pullright menu items, if not NULL */ - short initial_state; /* initial state of toggleButton/toggleButtonGadget menu items */ + Boolean initial_state; /* initial state of toggleButton/toggleButtonGadget menu items */ } MenuItem; #endif /* INCaxAreah */ diff --git a/beepSevr.c b/beepSevr.c index c30409e..b7e3b62 100644 --- a/beepSevr.c +++ b/beepSevr.c @@ -272,10 +272,10 @@ ALINK *area; radiobox = XmCreateRadioBox (beepSevrFrameW, "radiobox", NULL, 0); for (i = 0; i < ALH_ALARM_NSEV-1; i++){ + long ii=i+1; beepSevrToggleButtonW[i] = XmCreateToggleButtonGadget (radiobox, (char *)alhAlarmSeverityString[i+1], NULL, 0); XtVaSetValues(beepSevrToggleButtonW[i], XmNuserData, area, NULL); - long ii=i+1; XtAddCallback(beepSevrToggleButtonW[i], XmNvalueChangedCallback, beepSevrChangeCallback, (XtPointer)ii); XtManageChild(beepSevrToggleButtonW[i]); diff --git a/browser.c b/browser.c index e3b27f6..0e7f815 100644 --- a/browser.c +++ b/browser.c @@ -242,7 +242,7 @@ int callBrowser(char *url) static int first=1; static char *ComSpec; char command[BUFSIZ]; - int status; + intptr_t status; /* Handle quit */ if(!strcmp(url,"quit")) { diff --git a/dialog.c b/dialog.c index 0c81c57..b0d622b 100644 --- a/dialog.c +++ b/dialog.c @@ -60,8 +60,8 @@ String title,String pattern,String directory) static void *oldCancel=NULL; static XtPointer oldOkParm = 0; static XtPointer oldCancelParm = 0; + static Atom WM_DELETE_WINDOW = 0; char file_sel[]="file_sel"; - Atom WM_DELETE_WINDOW; /* parent = 0 means we want to unmanage the fileSelectdialog */ if (!parent){ diff --git a/documentation/ALH.html b/documentation/ALH.html index 0daee5b..e5cd718 100644 --- a/documentation/ALH.html +++ b/documentation/ALH.html @@ -403,10 +403,6 @@

Command Line Syntax

-B Message Broadcast System - - -c - Alarm Configuration Tool mode - -caputackt Caput the config file ackt settings to channels @@ -556,14 +552,6 @@

Message Broadcast System

alh processes when OK is pressed. A popup dialog box containing a sent message will appear when an Alarm Handler process receives a message.

-

Configuration Tool Mode

- -

The '-c ' option causes the Alarm Handler to -enter the Alarm Configuration Tool mode. The default is to bring up Alarm -Handler mode. The Alarm Configuration Tool mode is used for creating and -editing alarm configuration files. Documentation for this mode will be added to -this guide later.

-

Write Configuration File ACKT Settings on Startup

The ' -caputackt diff --git a/documentation/ALH.title.html b/documentation/ALH.title.html index 3781cd7..d0ee639 100644 --- a/documentation/ALH.title.html +++ b/documentation/ALH.title.html @@ -10,8 +10,8 @@

Alarm Handler User's Guide



-

ALH 1.2.23

-

November 2007

+

ALH 1.2.26

+

December 2010




diff --git a/documentation/Makefile b/documentation/Makefile index 50c4b3c..1a458b3 100644 --- a/documentation/Makefile +++ b/documentation/Makefile @@ -1,6 +1,6 @@ # Makefile for generating published alhUserGuide files -HTMLDOC = "/home/phoebus/ANJ/bin/htmldoc" +HTMLDOC = "/home/phoebus/ANJ/bin/solaris-sparc/htmldoc" WEBSITE = /net/epics/Public/epics/EpicsDocumentation/ExtensionsManuals/AlarmHandler VERSION = 1.2.16 diff --git a/file.c b/file.c index abb07d1..fa33789 100644 --- a/file.c +++ b/file.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include #include @@ -32,6 +34,7 @@ #include #endif +#ifndef CYGWIN32 #ifndef WIN32 /* WIN32 does not have dirent.h used by opendir, closedir */ #include @@ -42,6 +45,7 @@ #else #include #endif +#endif #include #include @@ -114,8 +118,9 @@ unsigned long broadcastMessDelay=2000; /*(msec) periodic mess testing. Albert */ int _lock_flag=0; /* Flag for locking. Albert */ char lockFileName[250]; /* FN for lock file. Albert */ int lockFileDeskriptor; /* FD for lock file. Albert */ -unsigned long lockDelay=1000; /* (msec) periodical masterStatus testing. */ -int masterFlag=1; /* am I master for write operations? Albert */ +unsigned long lockDelay=20000; /* (msec) periodical masterStatus testing. */ +int masterFlag=0; /* am I master for write operations? Albert */ + /* changed from 1 to 0. Stadler */ void masterTesting(); /* periodical calback of masterStatus testing*/ extern Widget blinkToplevel; /* for locking status marking */ char masterStr[64],slaveStr[64]; /* titles of Master/Slave +- printer/database*/ @@ -291,12 +296,22 @@ void exit_quit(Widget w, XtPointer clientdata, XtPointer calldata) XtDestroyWidget(topLevelShell); XtDestroyWidget(w); XFreeFont(display,font_info); +#ifndef CYGWIN32 #ifndef WIN32 + if (masterFlag) { + lockf(lockFileDeskriptor,F_ULOCK, 0L); + if (lockTimeoutId) { + XtRemoveTimeOut(lockTimeoutId); + } + } if(_lock_flag) { - lockf(lockFileDeskriptor,F_ULOCK, 0L); /* Albert */ + /* Moved to above part. Stadler + + lockf(lockFileDeskriptor,F_ULOCK, 0L); if (lockTimeoutId) { XtRemoveTimeOut(lockTimeoutId); } + */ if(_message_broadcast_flag) { lockf(messBroadcastDeskriptor, F_ULOCK, 0L); /* Albert */ if (broadcastMessTimeoutId) { @@ -306,6 +321,7 @@ void exit_quit(Widget w, XtPointer clientdata, XtPointer calldata) } #endif +#endif #ifdef CMLOG if (use_CMLOG_alarm || use_CMLOG_opmod) alCMLOGdisconnect(); @@ -319,7 +335,7 @@ void exit_quit(Widget w, XtPointer clientdata, XtPointer calldata) ******************************************************/ char *shortfile(char *name) { - int len; + size_t len; char *shortname; len = strlen(name); @@ -512,12 +528,12 @@ int programId,Widget widget) /* Display file selection box */ if ( XtIsShell(widget)) { long fileTypeLong=fileType; + Atom WM_DELETE_WINDOW; fileSelectionBox = createFileDialog(widget, (void *)fileSetupCallback, (XtPointer)fileTypeLong, (void *)exit_quit,(XtPointer)FALSE, (XtPointer)NULL, fileTypeString, (String)pattern, dir); - Atom WM_DELETE_WINDOW; WM_DELETE_WINDOW = XmInternAtom(XtDisplay(fileSelectionBox), "WM_DELETE_WINDOW", False); XmAddWMProtocolCallback(XtParent(fileSelectionBox),WM_DELETE_WINDOW, @@ -577,12 +593,14 @@ int programId,Widget widget) exit(1); } fclose(fp); +#ifndef CYGWIN32 #ifndef WIN32 if((lockFileDeskriptor=open(lockFileName,O_RDWR,0644)) == 0) { perror("Can't open locking file for rw"); exit(1); } +#endif #endif if (DEBUG) fprintf(stderr,"INIT: deskriptor for %s=%d\n", lockFileName,lockFileDeskriptor); @@ -618,6 +636,7 @@ int programId,Widget widget) } fclose(fpL); fclose(fpI); +#ifndef CYGWIN32 #ifndef WIN32 if((messBroadcastDeskriptor= open(messBroadcastLockFileName,O_RDWR,0644)) == 0) @@ -625,6 +644,7 @@ int programId,Widget widget) perror("Can't open messBroadcast file for rw"); exit(1); } +#endif #endif if (DEBUG) fprintf(stderr,"INIT: deskriptor for %s=%d\n", messBroadcastLockFileName,messBroadcastDeskriptor); @@ -1052,7 +1072,7 @@ Widget widget; int argc; char *argv[]; { - int len; + size_t len; char configFile[NAMEDEFAULT_SIZE]; char logFile[NAMEDEFAULT_SIZE]; char opModFile[NAMEDEFAULT_SIZE]; @@ -1147,12 +1167,16 @@ char *argv[]; /* *******************************new code. Albert************************************* */ void masterTesting() { +#ifndef CYGWIN32 #ifndef WIN32 - if ( lockf(lockFileDeskriptor, F_TLOCK, 0L) < 0 ) { + /* Added "return" if masterFlag is set. Stadler */ + if (masterFlag) + return; + if ( lockf(lockFileDeskriptor, F_TLOCK, 0L) < 0 ) { if ((errno == EAGAIN || errno == EACCES )) { - masterFlag=0; - if(DEBUG) fprintf(stderr,"I'm slave;lockFileDeskriptor=%d\n",lockFileDeskriptor); - XtVaSetValues(blinkToplevel,XmNtitle,slaveStr,NULL); + masterFlag=0; + if(DEBUG) fprintf(stderr,"I'm slave;lockFileDeskriptor=%d\n",lockFileDeskriptor); + XtVaSetValues(blinkToplevel,XmNtitle,slaveStr,NULL); } else { perror("lockf Error!!!!"); /* Albert exit ?????? */ @@ -1162,11 +1186,12 @@ void masterTesting() { masterFlag=1; if(DEBUG) fprintf(stderr,"I'm master;lockFileDeskriptor=%d\n",lockFileDeskriptor); - XtVaSetValues(blinkToplevel,XmNtitle,masterStr,NULL); + XtVaSetValues(blinkToplevel,XmNtitle,masterStr,NULL); } lockTimeoutId = XtAppAddTimeOut(appContext, lockDelay,(XtTimerCallbackProc)masterTesting , NULL); +#endif #endif } @@ -1265,6 +1290,7 @@ static char real_world_name[128]; static char displayName[256]; int ret=0; +#ifndef CYGWIN32 #ifndef WIN32 struct passwd *pp; int effective_uid; @@ -1296,6 +1322,7 @@ int effective_uid; userID.real_world_name=real_world_name; userID.myhostname=myhostname; userID.displayName=displayName; +#endif #endif return(ret); } diff --git a/force.c b/force.c index cdd9b45..c60c816 100644 --- a/force.c +++ b/force.c @@ -1157,9 +1157,10 @@ void forcePVUpdateFields(GCLINK* gclink,FORCEPV* pfPV,int context) pforcePV->disabled=pfPV->disabled; updateDisabledForcePVCount(area,(int)(pforcePV->disabled-disabledHold)); - if (pforcePV->name && strcmp(pforcePV->name,"CALC")==0) + if (pforcePV->name && strcmp(pforcePV->name,"CALC")==0) { + pforcePV->currentValue = -999; forcePVCalcPerform(gclink,context,1); - else { + } else { holdValue=pforcePV->currentValue; pforcePV->currentValue = -999; forcePVNewValueEvent(gclink,(short)context,holdValue); diff --git a/mask.c b/mask.c index 6a90c0e..3f08290 100644 --- a/mask.c +++ b/mask.c @@ -262,6 +262,7 @@ static void maskCreateDialog(ALINK *area) XmNtopOffset, 10, NULL); for (j = 0; j < num_buttons; j++){ + long index=maskItem[i].choice[j].index; pushButtonW = XtVaCreateManagedWidget( maskItem[i].choice[j].label, xmPushButtonWidgetClass, form, @@ -275,7 +276,6 @@ static void maskCreateDialog(ALINK *area) j != num_buttons-1? XmATTACH_POSITION : XmATTACH_FORM, XmNrightPosition, TIGHTNESS*(j+3) + (TIGHTNESS-1), NULL); - long index=maskItem[i].choice[j].index; XtAddCallback(pushButtonW, XmNactivateCallback, (XtCallbackProc)maskActivateCallback, (XtPointer)index); diff --git a/process.c b/process.c index c90252d..bc284be 100644 --- a/process.c +++ b/process.c @@ -50,7 +50,7 @@ static Widget g_pum = NULL; void processSpawn_callback(Widget w,char *command,void * call_data) { char buff[MAX_STRING_LENGTH +2]; - int l; + size_t l; int status; #ifdef WIN32 static int first=1; diff --git a/property.c b/property.c index a51ffc1..a2d4073 100644 --- a/property.c +++ b/property.c @@ -166,6 +166,7 @@ static void propUpdateDialogWidgets(struct propWindow *propWindow) MASK mask; Pixel textBackground; Pixel textBackgroundNS; + size_t ii=0; if (programId != ALH) textBackground = bg_pixel[3]; else textBackground = bg_pixel[0]; @@ -444,14 +445,13 @@ static void propUpdateDialogWidgets(struct propWindow *propWindow) Guidance Text --------------------------------- */ pt = sllFirst(&(link->GuideList)); - i=0; while (pt) { guideLink = (struct guideLink *)pt; - i += strlen(guideLink->list); - i += 1; + ii += strlen(guideLink->list); + ii += 1; pt = sllNext(pt); } - str = (char*)calloc(i+1,sizeof(char)); + str = (char*)calloc(ii+1,sizeof(char)); pt = sllFirst(&(link->GuideList)); while (pt) { guideLink = (struct guideLink *)pt; diff --git a/scroll.c b/scroll.c index 6d66ce8..0d30f25 100644 --- a/scroll.c +++ b/scroll.c @@ -90,7 +90,7 @@ char *Strncat( static int viewFileUsedLength[N_LOG_FILES]; /* used length of file. */ static int viewFileMaxLength[N_LOG_FILES]; /* max length of file. */ -static unsigned char *viewFileString[N_LOG_FILES]; /* contents of file. */ +static char *viewFileString[N_LOG_FILES]; /* contents of file. */ static Widget viewTextWidget[N_LOG_FILES] = {0,0,0}; /* view text widget */ static Widget browserWidget; @@ -144,7 +144,7 @@ int i, l; *size += strlen(line) + *depth * 3; if ( *size+10 > *max ) { - *max = *size + 0.5 * *size; + *max = (int)(*size + 0.5 * *size); buf = (char *) XtRealloc( buf, *max ); } @@ -186,7 +186,7 @@ int i, l; *size += strlen("----------------------------\n") + *depth * 3; if ( *size+10 > *max ) { - *max = *size + 0.5 * *size; + *max = (int)(*size + 0.5 * *size); buf = (char *) XtRealloc( buf, *max ); } for ( i=0; i<*depth; i++ ) strcat( buf, " " ); @@ -194,7 +194,7 @@ int i, l; readFile( new, buf, max, size, depth ); *size += strlen("----------------------------\n") + *depth * 3; if ( *size+10 > *max ) { - *max = *size + 0.5 * *size; + *max = (int)(*size + 0.5 * *size); buf = (char *) XtRealloc( buf, *max ); } for ( i=0; i<*depth; i++ ) strcat( buf, " " ); @@ -291,7 +291,7 @@ void fileViewWindow(Widget w,int option,Widget menuButton) viewFileUsedLength[option] = 0; viewFileMaxLength[option] = 0; - XtFree((char *)viewFileString[option]); + XtFree(viewFileString[option]); viewFileString[option]=NULL; XtUnmanageChild(app_shell); @@ -317,8 +317,8 @@ void fileViewWindow(Widget w,int option,Widget menuButton) /* allocate space for the file string */ viewFileMaxLength[operandFile] = MAX(INITIAL_FILE_LENGTH, 2*viewFileUsedLength[operandFile]); - viewFileString[operandFile] = (unsigned char *) - XtCalloc(1,(unsigned)viewFileMaxLength[operandFile]); + viewFileString[operandFile] = (char *) + XtCalloc(1,viewFileMaxLength[operandFile]); if(!viewFileString[operandFile]) { XtVaSetValues(menuButton, XmNset, FALSE, NULL); createDialog(XtParent(w),XmDIALOG_ERROR,"no free memory",""); @@ -515,7 +515,7 @@ void fileViewWindow(Widget w,int option,Widget menuButton) XmStringFree(str); /* add the file string to the text widget */ - XmTextSetString(viewTextWidget[operandFile], (char *)viewFileString[operandFile]); + XmTextSetString(viewTextWidget[operandFile], viewFileString[operandFile]); if (operandFile == ALARM_FILE && alarmLogFileOffsetBytes ) { XtVaSetValues(viewTextWidget[operandFile], @@ -550,7 +550,7 @@ static void closeFileViewShell(Widget w,int operandFile,caddr_t call_data) viewFileUsedLength[operandFile] = 0; viewFileMaxLength[operandFile] = 0; - XtFree((char *)viewFileString[operandFile]); + XtFree(viewFileString[operandFile]); viewFileString[operandFile]=NULL; } @@ -568,7 +568,7 @@ caddr_t call_data) viewFileMaxLength[operandFile] = 0; - XtFree((char *)viewFileString[operandFile]); + XtFree(viewFileString[operandFile]); viewFileString[operandFile]=NULL; XtUnmanageChild(XtParent(w)); } @@ -610,16 +610,16 @@ void updateLog(int fileIndex,char *string) /* string doesn't fit - reallocate to get enough room */ viewFileMaxLength[fileIndex] = MAX(INITIAL_FILE_LENGTH, 2*viewFileMaxLength[fileIndex]); - tmp = (char *)XtCalloc(1,(unsigned)viewFileMaxLength[fileIndex]); + tmp = (char *)XtCalloc(1,viewFileMaxLength[fileIndex]); strcpy(tmp,(const char *)viewFileString[fileIndex]); - XtFree((char *)viewFileString[fileIndex]); - viewFileString[fileIndex] = (unsigned char*)tmp; + XtFree(viewFileString[fileIndex]); + viewFileString[fileIndex] = (char*)tmp; if (viewFileUsedLength[fileIndex] + stringLength <= viewFileMaxLength[fileIndex]) { /* string fits, insert */ - strcat((char *)viewFileString[fileIndex],string); + strcat(viewFileString[fileIndex],string); viewFileUsedLength[fileIndex] = viewFileUsedLength[fileIndex] + stringLength; XmTextReplace(viewTextWidget[fileIndex],oldUsedLength, @@ -651,7 +651,7 @@ void updateLog(int fileIndex,char *string) "updateLog: unable to close file %s.\n",filename); /* add the file string to the text widget */ - XmTextSetString(viewTextWidget[fileIndex], (char *)viewFileString[fileIndex]); + XmTextSetString(viewTextWidget[fileIndex], viewFileString[fileIndex]); #endif } @@ -688,9 +688,9 @@ void updateAlarmLog(int fileIndex,char *string) viewFileMaxLength[fileIndex]) { /* put string at end */ - strcat((char *)viewFileString[fileIndex],string); + strcat(viewFileString[fileIndex],string); viewFileUsedLength[fileIndex] = viewFileUsedLength[fileIndex] + stringLength; - XmTextSetString(viewTextWidget[fileIndex], (char *)viewFileString[fileIndex]); + XmTextSetString(viewTextWidget[fileIndex], viewFileString[fileIndex]); } else { @@ -726,6 +726,7 @@ void browser_fileViewWindow(Widget w,int option,Widget menuButton) char filename[120]; int operandFile=0; long operandFileLong; + long optionLong; /* definitions for search widgets: */ Arg al[20]; int ac; @@ -757,7 +758,7 @@ void browser_fileViewWindow(Widget w,int option,Widget menuButton) viewFileUsedLength[option] = 0; viewFileMaxLength[option] = 0; - XtFree((char *)viewFileString[option]); + XtFree(viewFileString[option]); viewFileString[option]=NULL; XtUnmanageChild(app_shell); XtVaSetValues(menuButton, XmNset, FALSE, NULL); @@ -803,8 +804,8 @@ void browser_fileViewWindow(Widget w,int option,Widget menuButton) if (alarmLogFileMaxRecords) viewFileMaxLength[operandFile] = alarmLogFileStringLength*alarmLogFileMaxRecords; - viewFileString[operandFile] = (unsigned char *) - XtCalloc(1,(unsigned)viewFileMaxLength[operandFile]); + viewFileString[operandFile] = (char *) + XtCalloc(1,viewFileMaxLength[operandFile]); if(!viewFileString[operandFile]) { XtVaSetValues(menuButton, XmNset, FALSE, NULL); @@ -1135,7 +1136,7 @@ void browser_fileViewWindow(Widget w,int option,Widget menuButton) xmPushButtonWidgetClass,rowcol2, NULL); XtAddCallback(showButton,XmNactivateCallback,showSelectedCallback,app_shell); - long optionLong=option; + optionLong=option; showAllButton=XtVaCreateManagedWidget("Show Current File", xmPushButtonWidgetClass,rowcol2, NULL); XtAddCallback(showAllButton, XmNactivateCallback,showAllCallback,(XtPointer)optionLong); @@ -1227,7 +1228,7 @@ void browser_fileViewWindow(Widget w,int option,Widget menuButton) XmStringFree(str); /* add the file string to the text widget */ - XmTextSetString(browserWidget, (char *)viewFileString[operandFile]); + XmTextSetString(browserWidget, viewFileString[operandFile]); XtVaSetValues(browserWidget, XmNcursorPosition, alarmLogFileOffsetBytes+1, NULL); @@ -1245,11 +1246,11 @@ static void showAllCallback(Widget w,XtPointer client_data,XtPointer call_data) switch (index) { case ALARM_FILE: XmTextSetString(browserWidget, - (char *)viewFileString[ALARM_FILE]); + viewFileString[ALARM_FILE]); break; case OPMOD_FILE: XmTextSetString(browserWidget, - (char *)viewFileString[OPMOD_FILE]); + viewFileString[OPMOD_FILE]); break; } diff --git a/showmask.c b/showmask.c index 72e101b..26d3b29 100644 --- a/showmask.c +++ b/showmask.c @@ -20,6 +20,11 @@ **********************************************************************/ #include +#include +/* If not MS Visual C++ or MS Visual C++ is 2010 or later */ +#if !defined(_MSC_VER) || _MSC_VER >= 1600 +#include +#endif #include #include @@ -236,6 +241,7 @@ ALINK *area; Widget currentMaskLabel, currentMaskStringLabelW; Widget resetMaskLabel, resetMaskStringLabelW; int i; + intptr_t iptr; XmString string; static ActionAreaItem mask_items[] = { { "Apply", forceMaskApplyCallback, NULL }, @@ -418,9 +424,9 @@ ALINK *area; if (_passive_flag && i == ALARMACKT ) { XtVaSetValues(alarmMaskToggleButtonW[i], XmNsensitive, FALSE, NULL); } - XtPointer ilong=i; + iptr=i; XtAddCallback(alarmMaskToggleButtonW[i], XmNvalueChangedCallback, - (XtCallbackProc)forceMaskChangeCallback, (XtPointer)ilong); + (XtCallbackProc)forceMaskChangeCallback, (XtPointer)iptr); } XtManageChild(rowcol); diff --git a/test.win32.alhConfig b/test.win32.alhConfig index f511971..fc1ee33 100644 --- a/test.win32.alhConfig +++ b/test.win32.alhConfig @@ -22,6 +22,12 @@ This is more guidance for Group1.SubGroup1. $END CHANNEL Group1.SubGroup1 jba:Example5 ----- CHANNEL Group1.SubGroup1 jba:Example6 ----- +GROUP Group1.SubGroup1 Group1.SubSubGroup1 +CHANNEL Group1.SubSubGroup1 jba:Example11 ----- +CHANNEL Group1.SubSubGroup1 jba:Example12 ----- +GROUP Group1.SubGroup1 Group1.SubSubGroup2 +CHANNEL Group1.SubSubGroup2 jba:Example13 ----- +CHANNEL Group1.SubSubGroup2 jba:Example14 ----- GROUP Group1 Group1.SubGroup2 $GUIDANCE This is the text guidance for Group1.SubGroup2. diff --git a/version.h b/version.h index d97b938..5c1c7b6 100644 --- a/version.h +++ b/version.h @@ -23,9 +23,9 @@ #define ALH_VERSION 1 #define ALH_REVISION 2 -#define ALH_MODIFICATION 24 +#define ALH_MODIFICATION 26 -#define ALH_VERSION_STRING "ALH Version 1.2.24" +#define ALH_VERSION_STRING "ALH Version 1.2.26" #define ALH_CREDITS_STRING \ "Developed at Argonne National Laboratory\n\n" \