You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sci-chemistry/molmol/files/wild.patch

1867 lines
49 KiB

include/cmd_dial.h | 1 +
include/cmd_io.h | 7 +-
include/cmd_struc.h | 1 +
include/curr_dir.h | 1 +
include/data_hand.h | 6 +
src/cip/cmd_tab.h | 3 +
src/cmddial/ExDialColor.c | 314 +++++++++++++++++++++++++++++++-----------
src/cmddial/ExDialRes.c | 340 ++++++++++++++++++++++++++++++++++++++++++++++
src/cmddial/Makefile | 2 +-
src/cmdio/ExPdb.c | 70 +++++++++-
src/cmdstruc/ExBuild.c | 123 +++++++++++++++++
src/data/DataHand.c | 114 +++++++++++++++-
src/iodev/IODev.c | 2 +
src/main/MolInit.c | 5 +-
src/main/MolMol.c | 2 +-
src/motif/MotifDial.c | 32 ++---
src/motogl/MotOGLDump.c | 2 +-
src/os/CurrDir.c | 46 ++-----
src/os/ProgDir.c | 25 +++-
src/win/WinDial.c | 255 +++++++++++++++++-----------------
src/winogl/WinOGLDump.c | 7 +-
21 files changed, 1073 insertions(+), 285 deletions(-)
diff --git a/include/cmd_dial.h b/include/cmd_dial.h
index f60e918..47fb8f8 100644
--- a/include/cmd_dial.h
+++ b/include/cmd_dial.h
@@ -29,6 +29,7 @@ extern ErrCode ExUserInterface(char *);
extern ErrCode ExDialColor(char *);
extern ErrCode ExDialMol(char *);
+extern ErrCode ExDialRes(char *);
extern ErrCode ExDialMeasure(char *);
extern ErrCode ExDialRmsd(char *);
extern ErrCode ExDialSelect(char *);
diff --git a/include/cmd_io.h b/include/cmd_io.h
index 79b173c..9a7b12c 100644
--- a/include/cmd_io.h
+++ b/include/cmd_io.h
@@ -30,15 +30,16 @@ extern ErrCode ExReadAng(char *);
extern ErrCode ExReadDg(char *);
extern ErrCode ExReadDump(char *);
extern ErrCode ExReadLib(char *);
-extern ErrCode ExReadPdb(char *);
-extern ErrCode ExReadSeq(char *);
-extern ErrCode ExReadShift(char *);
extern ErrCode ExReadLimit(char *);
extern ErrCode ExReadListAng(char *);
extern ErrCode ExReadListDg(char *);
extern ErrCode ExReadListPdb(char *);
+extern ErrCode ExReadOldPdb(char *);
extern ErrCode ExReadOmap(char *);
+extern ErrCode ExReadPdb(char *);
extern ErrCode ExReadPot(char *);
+extern ErrCode ExReadSeq(char *);
+extern ErrCode ExReadShift(char *);
extern ErrCode ExReadSybyl(char *);
extern ErrCode ExReadXyz(char *);
extern ErrCode ExWriteAng(char *);
diff --git a/include/cmd_struc.h b/include/cmd_struc.h
index e0d729f..f4950b9 100644
--- a/include/cmd_struc.h
+++ b/include/cmd_struc.h
@@ -33,6 +33,7 @@ extern ErrCode ExAddDist(char *);
extern ErrCode ExAddLimit(char *);
extern ErrCode ExAddPseudo(char *);
extern ErrCode ExAddRes(char *);
+extern ErrCode ExMakeMolCyclic(char *);
extern ErrCode ExChangeRes(char *);
extern ErrCode ExFirstMol(char *);
extern ErrCode ExFlipAtom(char *);
diff --git a/include/curr_dir.h b/include/curr_dir.h
index c7895c4..04e404d 100644
--- a/include/curr_dir.h
+++ b/include/curr_dir.h
@@ -26,6 +26,7 @@
#ifndef _CURR_DIR_H_
#define _CURR_DIR_H_
+extern void CurrDirSet(char *dir);
extern char *CurrDirGet(void);
#endif /* _CURR_DIR_H_ */
diff --git a/include/data_hand.h b/include/data_hand.h
index 4462328..74a716a 100644
--- a/include/data_hand.h
+++ b/include/data_hand.h
@@ -112,6 +112,7 @@ extern void DhMolMoveFirst(DhMolP);
extern void DhMolDestroy(DhMolP);
extern DhResP DhResNew(DhMolP, DhResDefP, DhSeqPos);
+extern DhResP DhResNewCyclic(DhMolP, DhResDefP, DhSeqPos);
extern void DhResMutate(DhResP, DhResDefP, DhMutationKind);
extern void DhResSetNeigh(DhResP, DhNeighChoice, DhResP);
extern BOOL DhResDestroy(DhResP);
@@ -287,6 +288,7 @@ extern void DhMolGetTransVect(DhMolP, Vec3);
extern MolAttrP DhMolGetAttr(DhMolP);
extern DSTR DhResGetName(DhResP);
+extern DhAtomP DhResGetAtomA(DhResP);
extern int DhResGetNumber(DhResP);
extern DSTR DhAtomGetName(DhAtomP);
@@ -335,6 +337,10 @@ extern void DhResAnglesChanged(DhResP);
extern void DhResDockPrev(DhResP);
extern void DhResDockNext(DhResP);
extern void DhResCalcAtom(DhResP, DSTR);
+extern DhResP DhResPrev(DhResP resP);
+extern DhResP DhResNext(DhResP resP);
+extern DhResP DhResFirst(DhMolP molP);
+extern DhResP DhResLast(DhMolP molP);
/* dump/undump */
diff --git a/src/cip/cmd_tab.h b/src/cip/cmd_tab.h
index 0b73f65..cf7bc2a 100644
--- a/src/cip/cmd_tab.h
+++ b/src/cip/cmd_tab.h
@@ -108,6 +108,7 @@ static CmdTabEntry BuiltinCmdTab[] = {
{"DialColor", ExDialColor, US_NONE},
{"DialMeasure", ExDialMeasure, US_NONE},
{"DialMol", ExDialMol, US_NONE},
+ {"DialRes", ExDialRes, US_NONE},
{"DialRmsd", ExDialRmsd, US_NONE},
{"DialSelect", ExDialSelect, US_NONE},
{"DialStyle", ExDialStyle, US_NONE},
@@ -164,6 +165,7 @@ static CmdTabEntry BuiltinCmdTab[] = {
{"ListSelectedDist", ExListSelected, US_NONE},
{"ListSelectedMol", ExListSelected, US_NONE},
{"ListSelectedRes", ExListSelected, US_NONE},
+ {"MakeMolCyclic", ExMakeMolCyclic, US_ALL},
{"MaterialAtom", ExMaterial, US_ALL},
{"MaterialBond", ExMaterial, US_ALL},
{"MaterialDist", ExMaterial, US_ALL},
@@ -213,6 +215,7 @@ static CmdTabEntry BuiltinCmdTab[] = {
{"ReadListDg", ExReadListDg, US_ALL},
{"ReadListPdb", ExReadListPdb, US_ALL},
{"ReadLol", ExReadLimit, US_ALL},
+ {"ReadOldPdb", ExReadOldPdb, US_ALL},
{"ReadOmap", ExReadOmap, US_ALL},
{"ReadPdb", ExReadPdb, US_ALL},
{"ReadPot", ExReadPot, US_ALL},
diff --git a/src/cmddial/ExDialColor.c b/src/cmddial/ExDialColor.c
index f960e1d..e827c4f 100644
--- a/src/cmddial/ExDialColor.c
+++ b/src/cmddial/ExDialColor.c
@@ -43,6 +43,9 @@
#define NAME_LEN 100
#define NUM_LEN 6
#define CMD_NO 7
+#define MAXRGBVALUE 255
+#define ICOLOR(c) (int) ((float)c * (float)MAXRGBVALUE)
+#define FCOLOR(c) (float) ((float)c / (float)MAXRGBVALUE)
#define EPS ((float) 1.0e-5)
@@ -56,8 +59,8 @@ typedef struct {
static ColorDesc *ColorList;
static int ColorNo = 0;
static BOOL DialOn = FALSE;
-static PuGizmo DialGizmo = NULL, NameGizmo, RGizmo, GGizmo, BGizmo, ColGizmo;
-static DSTR NameStr = NULL, RStr, GStr, BStr;
+static PuGizmo DialGizmo = NULL, NameGizmo, RGizmo, GGizmo, BGizmo, ColGizmo, rGizmo, gGizmo, bGizmo;
+static DSTR NameStr = NULL, RStr, GStr, BStr, rStr, gStr, bStr;
static char *LabelList[] = {
"Back",
@@ -136,22 +139,50 @@ editCB(PuGizmo g, char *name, void *clientData, void *callData)
char *field = clientData;
PuTextCBStruc *callP = callData;
- if (field[0] == 'N')
+ if (field[0] == 'N') {
DStrAssignStr(NameStr, callP->newText);
- else if (field[0] == 'R')
+ }
+ else if (field[0] == 'R') {
DStrAssignStr(RStr, callP->newText);
- else if (field[0] == 'G')
+ }
+ else if (field[0] == 'G') {
DStrAssignStr(GStr, callP->newText);
- else
+ }
+ else if (field[0] == 'B') {
DStrAssignStr(BStr, callP->newText);
+ }
+ else if (field[0] == 'r') {
+ DStrAssignStr(rStr, callP->newText);
+ }
+ else if (field[0] == 'g') {
+ DStrAssignStr(gStr, callP->newText);
+ }
+ else if (field[0] == 'b') {
+ DStrAssignStr(bStr, callP->newText);
+ }
}
static void
updateFields(int colorI)
{
+ char buf[10];
+ float f;
+
PuSetStr(RGizmo, PU_SC_TEXT, ColorList[colorI].r);
PuSetStr(GGizmo, PU_SC_TEXT, ColorList[colorI].g);
PuSetStr(BGizmo, PU_SC_TEXT, ColorList[colorI].b);
+
+ f = atof(ColorList[colorI].r);
+ (void) sprintf(buf, "%i", ICOLOR(f));
+ PuSetStr(rGizmo, PU_SC_TEXT, buf);
+
+ f = atof(ColorList[colorI].g);
+ (void) sprintf(buf, "%i", ICOLOR(f));
+ PuSetStr(gGizmo, PU_SC_TEXT, buf);
+
+ f = atof(ColorList[colorI].b);
+ (void) sprintf(buf, "%i", ICOLOR(f));
+ PuSetStr(bGizmo, PU_SC_TEXT, buf);
}
static void
@@ -190,17 +221,96 @@ activateCB(PuGizmo g, char *name, void *clientData, void *callData)
{
char *field = clientData;
int i;
+ float f;
+ char buf[10];
if (field[0] == 'N') {
for (i = 0; i < ColorNo; i++)
if (strcmp(ColorList[i].name, DStrToStr(NameStr)) == 0) {
- updateFields(i);
- break;
+ updateFields(i);
+ break;
}
} else {
+ if (field[0] == 'R') {
+ f = atof(DStrToStr(RStr));
+ if (f>1.0) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(RStr, buf);
+ PuSetStr(RGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(rStr, buf);
+ PuSetStr(rGizmo, PU_SC_TEXT, buf);
+ }
+ else if (field[0] == 'G') {
+ f = atof(DStrToStr(GStr));
+ if (f>1.0) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(GStr, buf);
+ PuSetStr(GGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(gStr, buf);
+ PuSetStr(gGizmo, PU_SC_TEXT, buf);
+ }
+ else if (field[0] == 'B') {
+ f = atof(DStrToStr(BStr));
+ if (f>1.0) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(BStr, buf);
+ PuSetStr(BGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(bStr, buf);
+ PuSetStr(bGizmo, PU_SC_TEXT, buf);
+ }
+ else if (field[0] == 'r') {
+ i = atoi(DStrToStr(rStr));
+ if (i>MAXRGBVALUE) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(rStr, buf);
+ PuSetStr(rGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(RStr, buf);
+ PuSetStr(RGizmo, PU_SC_TEXT, buf);
+ }
+ else if (field[0] == 'g') {
+ i = atoi(DStrToStr(gStr));
+ if (i>MAXRGBVALUE) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(gStr, buf);
+ PuSetStr(gGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(GStr, buf);
+ PuSetStr(GGizmo, PU_SC_TEXT, buf);
+ }
+ else if (field[0] == 'b') {
+ i = atoi(DStrToStr(bStr));
+ if (i>MAXRGBVALUE) {
+ f=1.0;
+ i=MAXRGBVALUE;
+ sprintf(buf,"%i", ICOLOR(f));
+ DStrAssignStr(bStr, buf);
+ PuSetStr(bGizmo, PU_SC_TEXT, buf);
+ }
+ sprintf(buf,"%1.3f", FCOLOR(i));
+ DStrAssignStr(BStr, buf);
+ PuSetStr(BGizmo, PU_SC_TEXT, buf);
+ }
showName();
}
-
showColor();
}
@@ -258,13 +368,20 @@ showAttr(AttrP attrP)
{
char buf[10];
- (void) sprintf(buf, "%5.3f", attrP->colR);
+ (void) sprintf(buf, "%1.3f", attrP->colR);
PuSetStr(RGizmo, PU_SC_TEXT, buf);
- (void) sprintf(buf, "%5.3f", attrP->colG);
+ (void) sprintf(buf, "%1.3f", attrP->colG);
PuSetStr(GGizmo, PU_SC_TEXT, buf);
- (void) sprintf(buf, "%5.3f", attrP->colB);
+ (void) sprintf(buf, "%1.3f", attrP->colB);
PuSetStr(BGizmo, PU_SC_TEXT, buf);
+ (void) sprintf(buf, "%i", ICOLOR(attrP->colR));
+ PuSetStr(rGizmo, PU_SC_TEXT, buf);
+ (void) sprintf(buf, "%i", ICOLOR(attrP->colG));
+ PuSetStr(gGizmo, PU_SC_TEXT, buf);
+ (void) sprintf(buf, "%i", ICOLOR(attrP->colB));
+ PuSetStr(bGizmo, PU_SC_TEXT, buf);
+
showName();
showColor();
}
@@ -315,107 +432,152 @@ buildDial(void)
PuGizmo g;
PuConstraints con;
int i;
-
- DialGizmo = PuCreateDialog("Color Dialog", 7, 5);
- PuSetBool(DialGizmo, PU_BC_PLACE_OUTSIDE, TRUE);
-
- con.x = 0;
- con.w = 1;
- con.h = 1;
-
- g = PuCreateLabel(DialGizmo, "Name");
- con.y = 0;
- PuSetConstraints(g, con);
- PuSwitchGizmo(g, TRUE);
-
- g = PuCreateLabel(DialGizmo, "Red");
- con.y = 1;
- PuSetConstraints(g, con);
- PuSwitchGizmo(g, TRUE);
-
- g = PuCreateLabel(DialGizmo, "Green");
- con.y = 2;
- PuSetConstraints(g, con);
- PuSwitchGizmo(g, TRUE);
-
- g = PuCreateLabel(DialGizmo, "Blue");
- con.y = 3;
- PuSetConstraints(g, con);
- PuSwitchGizmo(g, TRUE);
-
- con.x = 1;
- con.w = 2;
- con.h = 1;
-
NameStr = DStrNew();
+
RStr = DStrNew();
GStr = DStrNew();
BStr = DStrNew();
+ rStr = DStrNew();
+ gStr = DStrNew();
+ bStr = DStrNew();
+
DStrAssignStr(RStr, "0.0");
DStrAssignStr(GStr, "0.0");
DStrAssignStr(BStr, "0.0");
+ DStrAssignStr(rStr, "0");
+ DStrAssignStr(gStr, "0");
+ DStrAssignStr(bStr, "0");
+ DialGizmo = PuCreateDialog("Color Dialog", 3, 20);
+ PuSetBool(DialGizmo, PU_BC_PLACE_OUTSIDE, TRUE);
+
+ con.x = 1;
+ con.y = 0;
+ con.w = 2;
+ con.h = 3;
+ ColGizmo = PuCreateColorField(DialGizmo, "Color");
+ PuSetConstraints(ColGizmo, con);
+ PuSetConstraints(ColGizmo, con);
+ showColor();
+ PuSwitchGizmo(ColGizmo, TRUE);
+
+ con.x = 0;
+ con.y = 4;
+ con.w = 1;
+ con.h = 1;
+ g = PuCreateLabel(DialGizmo, "Name");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+ con.x = 1;
+ con.w = 2;
+ con.h = 1;
NameGizmo = PuCreateTextField(DialGizmo, "Name", DStrToStr(NameStr));
- con.y = 0;
PuSetConstraints(NameGizmo, con);
- PuSetInt(NameGizmo, PU_IC_TEXT_WIDTH, 13);
+ PuSetInt(NameGizmo, PU_IC_TEXT_WIDTH, 10);
PuAddGizmoCB(NameGizmo, PU_CT_MODIFY, editCB, "N", NULL);
PuAddGizmoCB(NameGizmo, PU_CT_ACTIVATE, activateCB, "N", NULL);
showName();
PuSwitchGizmo(NameGizmo, TRUE);
- RGizmo = PuCreateTextField(DialGizmo, "Red", DStrToStr(RStr));
- con.y = 1;
+ con.x = 1;
+ con.y = 5;
+ con.w = 2;
+ con.h = 5;
+ g = PuCreateList(DialGizmo, "Color List");
+ for (i = 0; i < ColorNo; i++)
+ PuAddListEntry(g, ColorList[i].name, FALSE);
+ PuSetConstraints(g, con);
+ PuSetBool(g, PU_BC_AUTO_DESEL, TRUE);
+ PuAddGizmoCB(g, PU_CT_SELECT, selectCB, NULL, NULL);
+ PuSwitchGizmo(g, TRUE);
+
+ con.x = 1;
+ con.y = 11;
+ con.w = 1;
+ con.h = 1;
+ g = PuCreateLabel(DialGizmo, "Float");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+ con.x = 2;
+ con.y = 11;
+ g = PuCreateLabel(DialGizmo, "RGB");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+
+ con.x = 0;
+ con.y = 12;
+ con.w = 1;
+ con.h = 1;
+ g = PuCreateLabel(DialGizmo, "Red");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+ con.x = 1;
+ RGizmo = PuCreateTextField(DialGizmo, "RED", DStrToStr(RStr));
PuSetConstraints(RGizmo, con);
PuSetInt(RGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
PuAddGizmoCB(RGizmo, PU_CT_MODIFY, editCB, "R", NULL);
PuAddGizmoCB(RGizmo, PU_CT_ACTIVATE, activateCB, "R", NULL);
PuSwitchGizmo(RGizmo, TRUE);
+ con.x = 2;
+ rGizmo = PuCreateTextField(DialGizmo, "red", DStrToStr(rStr));
+ PuSetConstraints(rGizmo, con);
+ PuSetInt(rGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
+ PuAddGizmoCB(rGizmo, PU_CT_MODIFY, editCB, "r", NULL);
+ PuAddGizmoCB(rGizmo, PU_CT_ACTIVATE, activateCB, "r", NULL);
+ PuSwitchGizmo(rGizmo, TRUE);
- GGizmo = PuCreateTextField(DialGizmo, "Green", DStrToStr(GStr));
- con.y = 2;
+ con.x = 0;
+ con.y = 13;
+ con.w = 1;
+ con.h = 1;
+ g = PuCreateLabel(DialGizmo, "Green");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+ con.x = 1;
+ GGizmo = PuCreateTextField(DialGizmo, "GREEN", DStrToStr(GStr));
PuSetConstraints(GGizmo, con);
PuSetInt(GGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
PuAddGizmoCB(GGizmo, PU_CT_MODIFY, editCB, "G", NULL);
PuAddGizmoCB(GGizmo, PU_CT_ACTIVATE, activateCB, "G", NULL);
PuSwitchGizmo(GGizmo, TRUE);
+ con.x = 2;
+ gGizmo = PuCreateTextField(DialGizmo, "green", DStrToStr(gStr));
+ PuSetConstraints(gGizmo, con);
+ PuSetInt(gGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
+ PuAddGizmoCB(gGizmo, PU_CT_MODIFY, editCB, "g", NULL);
+ PuAddGizmoCB(gGizmo, PU_CT_ACTIVATE, activateCB, "g", NULL);
+ PuSwitchGizmo(gGizmo, TRUE);
- BGizmo = PuCreateTextField(DialGizmo, "Blue", DStrToStr(BStr));
- con.y = 3;
+ con.x = 0;
+ con.y = 14;
+ con.w = 1;
+ con.h = 1;
+ g = PuCreateLabel(DialGizmo, "Blue");
+ PuSetConstraints(g, con);
+ PuSwitchGizmo(g, TRUE);
+ con.x = 1;
+ BGizmo = PuCreateTextField(DialGizmo, "BLUE", DStrToStr(BStr));
PuSetConstraints(BGizmo, con);
PuSetInt(BGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
PuAddGizmoCB(BGizmo, PU_CT_MODIFY, editCB, "B", NULL);
PuAddGizmoCB(BGizmo, PU_CT_ACTIVATE, activateCB, "B", NULL);
PuSwitchGizmo(BGizmo, TRUE);
+ con.x = 2;
+ bGizmo = PuCreateTextField(DialGizmo, "blue", DStrToStr(bStr));
+ PuSetConstraints(bGizmo, con);
+ PuSetInt(bGizmo, PU_IC_TEXT_WIDTH, NUM_LEN);
+ PuAddGizmoCB(bGizmo, PU_CT_MODIFY, editCB, "b", NULL);
+ PuAddGizmoCB(bGizmo, PU_CT_ACTIVATE, activateCB, "b", NULL);
+ PuSwitchGizmo(bGizmo, TRUE);
- ColGizmo = PuCreateColorField(DialGizmo, "Color");
- con.x = 3;
- con.y = 0;
- con.w = 2;
- con.h = 4;
- PuSetConstraints(ColGizmo, con);
- showColor();
- PuSwitchGizmo(ColGizmo, TRUE);
-
- g = PuCreateList(DialGizmo, "Color List");
- for (i = 0; i < ColorNo; i++)
- PuAddListEntry(g, ColorList[i].name, FALSE);
- con.x = 5;
- con.y = 0;
- con.w = 2;
- con.h = 4;
- PuSetConstraints(g, con);
- PuSetBool(g, PU_BC_AUTO_DESEL, TRUE);
- PuAddGizmoCB(g, PU_CT_SELECT, selectCB, NULL, NULL);
- PuSwitchGizmo(g, TRUE);
-
- con.y = 4;
+ con.x = 0;
+ con.y = 15;
con.w = 1;
con.h = 1;
-
for (i = 0; i < CMD_NO; i++) {
g = PuCreateButton(DialGizmo, LabelList[i]);
- con.x = i;
+ con.x = i%3;
+ if (i%3 == 0) con.y++;
PuSetConstraints(g, con);
PuAddGizmoCB(g, PU_CT_ACTIVATE, cmdCB, NULL, NULL);
PuSwitchGizmo(g, TRUE);
diff --git a/src/cmddial/ExDialRes.c b/src/cmddial/ExDialRes.c
new file mode 100644
index 0000000..06925ff
--- /dev/null
+++ b/src/cmddial/ExDialRes.c
@@ -0,0 +1,340 @@
+/*
+************************************************************************
+*
+* ExDialMol.c - DialMol command
+*
+* Copyright (c) 1994-98
+*
+* ETH Zuerich
+* Institut fuer Molekularbiologie und Biophysik
+* ETH-Hoenggerberg
+* CH-8093 Zuerich
+*
+* SPECTROSPIN AG
+* Industriestr. 26
+* CH-8117 Faellanden
+*
+* All Rights Reserved
+*
+* Date of last modification : 98/08/17
+* Pathname of SCCS file : /tmp_mnt/net/sn/homeb/rkoradi/molmol-master/src/cmddial/SCCS/s.ExDialMol.c
+* SCCS identification : 1.10
+*
+************************************************************************
+*/
+
+#include <cmd_dial.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <break.h>
+#include <pu.h>
+#include <arg.h>
+#include <cip.h>
+#include <data_hand.h>
+
+#define PROP_NO 3
+
+typedef struct {
+ char *label;
+ char *propName;
+ char *cmd;
+} PropDesc;
+typedef struct {
+ char *name;
+ BOOL active;
+} Residue;
+
+static BOOL DialOn = FALSE;
+static PuGizmo DialGizmo = NULL, ListGizmo;
+static int CurrProp;
+static PropRefP CurrRefP;
+static int MolNo, MolI;
+static BOOL *MolStateA;
+static BOOL SuppressUpdate = FALSE;
+static PropDesc PropTab[] = {
+ {"sel", PROP_SELECTED, "SelectRes"},
+ {"disp", PROP_DISPLAYED, "DefPropRes 'displayed'"},
+ {"move", PROP_MOVABLE, "DefProRes 'movable'"}
+};
+static Residue ResidueTab[] = {
+ {"ARG", FALSE},
+ {"CYS", FALSE},
+ {"PRO", FALSE},
+ {"ASP", FALSE},
+ {"PHE", FALSE},
+ {"LEU", FALSE},
+ {"GLU", FALSE},
+ {"PRO", FALSE},
+ {"TYR", FALSE},
+ {"GLY", FALSE},
+ {"ASN", FALSE},
+ {"ALA", FALSE},
+ {"SER", FALSE},
+ {"THR", FALSE},
+ {"LYS", FALSE},
+ {"ILE", FALSE}
+};
+
+static void
+countMol(DhResP molP, void *clientData)
+{
+ MolNo++;
+}
+
+
+
+static void
+addMol(DhResP molP, void *clientData)
+{
+
+
+ DSTR name;
+ DSTR residue;
+ char buf[10];
+ char buf2[5];
+ BOOL propVal;
+ int j;
+ name = DStrNew();
+ residue = DStrNew();
+
+
+ j= DhResGetNumber(molP);
+ (void) sprintf(buf, "%5d " , j);
+
+ DStrAssignStr(name, buf);
+ DStrAssignStr(residue, buf2);
+ DStrAppStr(name, " ");
+
+ DStrAppDStr(residue, DhResGetName(molP));
+ DStrAppDStr(name, DhResGetName(molP));
+ propVal = DhResGetProp(CurrRefP, molP);
+
+
+
+ if (! BreakCheck(10)){
+ PuAddListEntry(ListGizmo, DStrToStr(name), propVal);
+
+ }
+
+
+
+ MolStateA[MolI] = propVal;
+
+ DStrFree(name);
+
+ MolI++;
+}
+
+static void
+selectMolCB(PuGizmo g, char *name, void *clientData, void *callData)
+{
+ PuSelectCBStruc *callP = callData;
+ DSTR cmd;
+ BOOL isFirst;
+ char buf[10];
+ int num, startI, i;
+
+ (void) sscanf(name, "%d", &num);
+ MolStateA[num - 1] = callP->onOff;
+
+ if (! callP->last)
+ return;
+
+ cmd = DStrNew();
+ DStrAssignStr(cmd, PropTab[CurrProp].cmd);
+ isFirst = TRUE;
+
+ for (i = 0; i < MolNo; i++) {
+ if (i == 0 || ! MolStateA[i - 1])
+ startI = i;
+ if (MolStateA[i] && (i == MolNo - 1 || ! MolStateA[i + 1])) {
+ if (isFirst)
+ DStrAppStr(cmd, " 'num = ");
+ else
+ DStrAppStr(cmd, ",");
+ (void) sprintf(buf, "%d", startI + 1);
+ DStrAppStr(cmd, buf);
+ if (i > startI) {
+ DStrAppStr(cmd, "..");
+ (void) sprintf(buf, "%d", i + 1);
+ DStrAppStr(cmd, buf);
+ }
+
+ isFirst = FALSE;
+ }
+ }
+
+ if (isFirst)
+ DStrAppStr(cmd, " '0'");
+ else
+ DStrAppStr(cmd, "'");
+
+ SuppressUpdate = TRUE;
+ CipExecCmd(DStrToStr(cmd));
+ SuppressUpdate = FALSE;
+
+ DStrFree(cmd);
+}
+
+static void
+buildList(void)
+{
+ int lineNo;
+
+ MolNo = 0;
+ DhApplyRes(PropGetRef(PROP_ALL, FALSE), countMol, NULL);
+ if (MolNo > 0) {
+ if (MolStateA == NULL)
+ MolStateA = malloc(MolNo * sizeof(*MolStateA));
+ else
+ MolStateA = realloc(MolStateA, MolNo * sizeof(*MolStateA));
+ lineNo = MolNo;
+ if (lineNo > 40)
+ lineNo = 40;
+ } else {
+ lineNo = 1;
+ }
+
+ PuSetInt(ListGizmo, PU_IC_ENTRY_NO, lineNo);
+
+ MolI = 0;
+ BreakActivate(TRUE);
+ DhApplyRes(PropGetRef(PROP_ALL, FALSE), addMol, NULL);
+ BreakActivate(FALSE);
+
+ PuSwitchGizmo(ListGizmo, TRUE);
+}
+
+static void
+updateList(void)
+{
+ if (SuppressUpdate)
+ return;
+
+ PuSwitchGizmo(ListGizmo, FALSE);
+ PuRemoveListEntries(ListGizmo, 0, MolNo);
+ buildList();
+}
+
+static void
+selectPropCB(PuGizmo g, char *name, void *clientData, void *callData)
+{
+ PuSelectCBStruc *callP = callData;
+ PropRefP newPropP;
+ int i;
+
+ if (! callP->onOff)
+ return;
+
+ for (i = 0; i < PROP_NO; i++)
+ if (strcmp(name, PropTab[i].label) == 0)
+ break;
+
+ newPropP = PropGetRef(PropTab[i].propName, FALSE);
+
+ if (newPropP != CurrRefP) {
+ CurrRefP = newPropP;
+ CurrProp = i;
+ updateList();
+ }
+}
+
+static void
+popdownCB(PuGizmo g, char *name, void *clientData, void *callData)
+{
+ PuSwitchGizmo(DialGizmo, FALSE);
+ DialOn = FALSE;
+}
+
+static void
+listCB(void *clientData)
+{
+ updateList();
+}
+
+static void
+helpCB(PuGizmo g, char *name, void *clientData, void *callData)
+{
+ CipShowHelpFile(DialGizmo, "DialMol");
+}
+
+static void
+buildDial(void)
+{
+
+ PuGizmo g;
+ int i;
+
+ CurrProp = 0;
+ CurrRefP = PropGetRef(PropTab[CurrProp].propName, FALSE);
+
+ DialGizmo = PuCreateDialog("Residue Dialog", 0, 0);
+ PuSetBool(DialGizmo, PU_BC_PLACE_OUTSIDE, TRUE);
+
+ g = PuCreateRadioBox(DialGizmo, "Property");
+ for (i = 0; i < PROP_NO; i++)
+ PuAddToggle(g, PropTab[i].label, i == 0);
+ PuAddGizmoCB(g, PU_CT_SELECT, selectPropCB, NULL, NULL);
+ PuSwitchGizmo(g, TRUE);
+
+ ListGizmo = PuCreateList(DialGizmo, "Molecules");
+ PuAddGizmoCB(ListGizmo, PU_CT_SELECT, selectMolCB, NULL, NULL);
+ PuSetBool(ListGizmo, PU_BC_MULT_SEL, TRUE);
+ buildList();
+
+ PuAddGizmoCB(DialGizmo, PU_CT_CLOSE, popdownCB, NULL, NULL);
+ PuAddGizmoCB(DialGizmo, PU_CT_HELP, helpCB, NULL, NULL);
+
+}
+
+ErrCode
+ExDialRes(char *cmd)
+{
+ ArgDescr arg;
+ EnumEntryDescr enumEntry[2];
+ ErrCode errCode;
+
+ arg.type = AT_ENUM;
+
+ ArgInit(&arg, 1);
+
+ arg.prompt = "Residue Dialog";
+ arg.u.enumD.entryP = enumEntry;
+ arg.u.enumD.n = 2;
+
+ enumEntry[0].str = "off";
+ enumEntry[1].str = "on";
+
+ enumEntry[0].onOff = DialOn;
+ enumEntry[1].onOff = ! DialOn;
+ if (DialOn)
+ arg.v.intVal = 0;
+ else
+ arg.v.intVal = 1;
+
+ errCode = ArgGet(&arg, 1);
+ if (errCode != EC_OK) {
+ ArgCleanup(&arg, 1);
+ return errCode;
+ }
+
+ DialOn = (arg.v.intVal == 1);
+
+ ArgCleanup(&arg, 1);
+
+ if (DialOn) {
+ if (DialGizmo == NULL) {
+ buildDial();
+ DhAddMolListCB(listCB, NULL);
+ }
+ PuSwitchGizmo(DialGizmo, TRUE);
+ } else {
+ if (DialGizmo != NULL)
+ PuSwitchGizmo(DialGizmo, FALSE);
+ }
+
+ return EC_OK;
+}
\ No newline at end of file
diff --git a/src/cmddial/Makefile b/src/cmddial/Makefile
index d94609d..66fdea9 100644
--- a/src/cmddial/Makefile
+++ b/src/cmddial/Makefile
@@ -8,7 +8,7 @@ CPPFLAGS = $(INCLUDES) $(MCPPFLAGS)
CFLAGS = $(CPPFLAGS) $(MCFLAGS)
OBJ = ExDialColor.o ExDialSelect.o ExDialStyle.o ExDialMol.o ExDialMeas.o \
- ExDialRmsd.o ExUserInterf.o ExRecordMac.o
+ ExDialRes.o ExDialRmsd.o ExUserInterf.o ExRecordMac.o
SRC = $(OBJ:.o=.c)
default: $(LIBDIR)/libcmd.a
diff --git a/src/cmdio/ExPdb.c b/src/cmdio/ExPdb.c
index 8447c4c..fde9c73 100644
--- a/src/cmdio/ExPdb.c
+++ b/src/cmdio/ExPdb.c
@@ -1,7 +1,7 @@
/*
************************************************************************
*
-* ExPdb.c - ReadPdb, ReadListPdb and WritePdb commands
+* ExPdb.c - ReadPdb, ReadOldPdb, ReadListPdb and WritePdb commands
*
* Copyright (c) 1994-98
*
@@ -105,7 +105,7 @@ compFunc(void *p1, void *p2)
}
static void
-readTransTab(BOOL pdbToIntern)
+readTransTab(BOOL pdbToIntern, BOOL isNewNomenclature)
{
GFile gf;
GFileRes res;
@@ -114,7 +114,7 @@ readTransTab(BOOL pdbToIntern)
TransTab = TreeOpen(sizeof(TransTabEntry), compFunc);
gf = SetupOpen(PN_PDB_ATOMS, "PdbAtoms", FALSE);
- if (gf == NULL)
+ if (gf == NULL || isNewNomenclature)
return;
if (pdbToIntern) {
@@ -675,7 +675,7 @@ ExReadPdb(char *cmd)
return errCode;
}
- readTransTab(TRUE);
+ readTransTab(TRUE, TRUE);
UnknownErrInit();
if (replace) {
@@ -755,7 +755,7 @@ ExReadListPdb(char *cmd)
FileNamePath(fileName);
- readTransTab(TRUE);
+ readTransTab(TRUE,TRUE);
UnknownErrInit();
inName = DStrNew();
pdbName = DStrNew();
@@ -932,7 +932,7 @@ ExWritePdb(char *cmd)
if (gf == NULL)
return EC_ERROR;
- readTransTab(FALSE);
+ readTransTab(FALSE,TRUE);
CHECK_RES(GFileWriteStr(gf, "HEADER Structure from"));
CHECK_RES(GFileWriteStr(gf, PROG_NAME));
@@ -987,3 +987,61 @@ ExWritePdb(char *cmd)
return EC_OK;
}
+
+ErrCode
+ExReadOldPdb(char *cmd)
+{
+ BOOL replace;
+ DSTR name;
+ int molNo, readNo;
+ DhMolP *molPA;
+ ErrCode errCode;
+ DSTR errStr;
+
+ replace = (strncmp(cmd, "Replace", 7) == 0);
+
+ name = DStrNew();
+ errCode = ArgGetFilename(name, CurrDirGet(), "*.pdb", TRUE);
+ if (errCode != EC_OK) {
+ DStrFree(name);
+ return errCode;
+ }
+
+ readTransTab(TRUE, FALSE);
+ UnknownErrInit();
+
+ if (replace) {
+ molNo = SelMolGet(NULL, 0);
+ if (molNo > 0) {
+ molPA = malloc(molNo * sizeof(*molPA));
+ (void) SelMolGet(molPA, molNo);
+ }
+ } else {
+ molNo = 0;
+ molPA = NULL;
+ }
+
+ BreakActivate(TRUE);
+ errCode = readFile(molPA, molNo, name, &readNo);
+ BreakActivate(FALSE);
+
+ DStrFree(name);
+ TreeClose(TransTab);
+ if (molNo > 0)
+ free(molPA);
+
+ if (errCode != EC_OK)
+ return EC_ERROR;
+
+ if (replace)
+ GraphMolChanged(PROP_SELECTED);
+
+ errStr = UnknownErrGet();
+ if (errStr != NULL) {
+ CipSetError(DStrToStr(errStr));
+ DStrFree(errStr);
+ return EC_WARNING;
+ }
+
+ return EC_OK;
+}
diff --git a/src/cmdstruc/ExBuild.c b/src/cmdstruc/ExBuild.c
index 32bc650..7f003b2 100644
--- a/src/cmdstruc/ExBuild.c
+++ b/src/cmdstruc/ExBuild.c
@@ -31,11 +31,16 @@
#include <data_hand.h>
#include <data_sel.h>
#include <graph_draw.h>
+#include <pu.h>
#define ARG_NUM 1
static int CurrPos = 1;
static int CurrKind = 0;
+static PuTextWindow TextW;
+static DhMolP LastMolP=NULL;
+static BOOL messageWindowCreated=FALSE;
+static BOOL cyclicResidueFound=FALSE;
ErrCode
ExNewMol(char *cmd)
@@ -206,3 +211,121 @@ ExChangeRes(char *cmd)
return EC_OK;
}
+
+static void
+writeInt(int num)
+{
+ char buf[10];
+ (void) sprintf(buf, "%5d ", num);
+ PuWriteStr(TextW, buf);
+}
+
+static void
+checkMolCyclic(DhMolP molP, void *clientData)
+{
+ DhResP resP;
+ DSTR resName = DStrNew();
+ DStrAssignStr(resName, "XXX");
+
+ resP = DhResFirst(molP);
+ while (resP != NULL) {
+ if (DStrCmp(resName, DhResGetName(resP)) == 0) {
+ cyclicResidueFound=TRUE;
+ }
+ resP = DhResNext(resP);
+ }
+
+ if (cyclicResidueFound && !messageWindowCreated) {
+ TextW = PuCreateTextWindow("MakeMolCyclic");
+ PuWriteStr(TextW, "--------------------------------------------------\n");
+ messageWindowCreated=TRUE;
+ }
+ if (cyclicResidueFound) {
+ PuWriteStr(TextW, "Error -");
+ writeInt(DhMolGetNumber(molP) + 1);
+ PuWriteStr(TextW, DStrToStr(DhMolGetName(molP)));
+ PuWriteStr(TextW, " already made cyclic!\n");
+ }
+}
+
+static void
+makeMolCyclic(DhMolP molP, void *clientData)
+{
+ DhResP xResP, yResP;
+ Vec3 firstCoord, lastCoord, midCoord;
+ DhResP firstResP, lastResP;
+ DhAtomP caAtomP;
+ DSTR atomName = DStrNew();
+ DhResDefP resDefP = (DhResDefP) clientData;
+
+ DStrAssignStr(atomName, "CA");
+
+ xResP = DhResNewCyclic(molP, resDefP, SP_FIRST);
+ DhResInit(xResP);
+ yResP = DhResNewCyclic(molP, resDefP, SP_LAST);
+ DhResInit(yResP);
+
+ xResP = DhResFirst(molP);
+
+ firstResP = DhResNext(xResP);
+ caAtomP = NULL;
+ while (caAtomP == NULL && firstResP != NULL) {
+ caAtomP = DhAtomFindName(firstResP, atomName, FALSE);
+ firstResP = DhResNext(firstResP);
+ }
+ if (caAtomP == NULL) {
+ return;
+ }
+ DhAtomGetCoord(caAtomP, firstCoord);
+
+ yResP = DhResLast(molP);
+ lastResP = DhResPrev(yResP);
+ caAtomP = NULL;
+ while (caAtomP == NULL && lastResP != NULL) {
+ caAtomP = DhAtomFindName(lastResP, atomName, FALSE);
+ lastResP = DhResPrev(lastResP);
+ }
+ if (caAtomP == NULL) {
+ return;
+ }
+
+ DhAtomGetCoord(caAtomP, lastCoord);
+
+ midCoord[0] = (firstCoord[0]+lastCoord[0])/2;
+ midCoord[1] = (firstCoord[1]+lastCoord[1])/2;
+ midCoord[2] = (firstCoord[2]+lastCoord[2])/2;
+
+ DhAtomSetCoord(DhResGetAtomA(xResP), midCoord);
+ DhAtomSetCoord(DhResGetAtomA(yResP), midCoord);
+}
+
+ErrCode
+ExMakeMolCyclic(char *cmd)
+{
+ int ind=0;
+ DhResDefP resDefP;
+ DSTR resName = DStrNew();
+
+ messageWindowCreated=FALSE;
+ cyclicResidueFound=FALSE;
+ DhApplyMol(PropGetRef(PROP_SELECTED, FALSE), checkMolCyclic, NULL);
+ if (cyclicResidueFound) {
+ DSTR msg = DStrNew();
+ DStrAssignStr(msg, "Error cyclic molecules selected");
+ PuSetTextField(PU_TF_STATUS, DStrToStr(msg));
+ DStrFree(msg);
+ return EC_OK;
+ }
+
+ DStrAssignStr(resName, "XXX");
+ resDefP = DhResDefGet(resName);
+ if (resDefP == NULL) {
+ CipSetError("error cyclic marker residue 'XXX' not found in residue library");
+ return EC_ERROR;
+ }
+
+ DhApplyMol(PropGetRef(PROP_SELECTED, FALSE), makeMolCyclic, resDefP);
+ GraphMolChanged(PROP_SELECTED);
+ GraphRedrawNeeded();
+ return EC_OK;
+}
diff --git a/src/data/DataHand.c b/src/data/DataHand.c
index 368aad3..d020c20 100644
--- a/src/data/DataHand.c
+++ b/src/data/DataHand.c
@@ -994,9 +994,11 @@ BOOL
DhResDestroy(DhResP resP)
{
/* can only destroy first or last residue of molecule! */
+ DhMolP molP;
if (resP == ListFirst(resP->molP->resL)) {
+ molP = resP->molP;
ListRemove(resP->molP->resL, resP);
- setEquivI(ListFirst(resP->molP->resL), NULL);
+ setEquivI((DhResP)ListFirst(molP->resL), NULL);
return TRUE;
} else if (resP == ListLast(resP->molP->resL)) {
ListRemove(resP->molP->resL, resP);
@@ -2842,6 +2844,18 @@ DhResGetName(DhResP resP)
return resP->defP->name;
}
+DhAtomP
+DhResGetAtomA(DhResP resP)
+{
+ return resP->atomA;
+}
+
+DhResDefP
+DhResGetDefP(DhResP resP)
+{
+ return resP->defP;
+}
+
int
DhResGetNumber(DhResP resP)
{
@@ -3313,3 +3327,101 @@ DhAltCoordListGet(void)
{
return AltCoordList;
}
+
+static void
+initResCyclic(DhResP resP)
+{
+ DhResDefP defP;
+ DhResP prevResP, nextResP;
+ DhAtomP atomP, equivAtomP;
+ int i;
+
+ defP = resP->defP;
+
+ resP->neighLeftP = NULL;
+ resP->neighRightP = NULL;
+
+ resP->atomA = malloc(defP->atomNo * sizeof(*resP->atomA));
+ resP->bondA = malloc(defP->bondNo * sizeof(*resP->bondA));
+ resP->angleA = malloc(defP->angleNo * sizeof(*resP->angleA));
+
+ for (i = 0; i < defP->atomNo; i++)
+ initAtom(resP->atomA + i, resP);
+
+ for (i = defP->firstBondI; i <= defP->lastBondI; i++)
+ initBond(resP->bondA + i, resP);
+
+ for (i = 0; i < defP->angleNo; i++) {
+ resP->angleA[i].resP = resP;
+ resP->angleA[i].val = 0.0f;
+ resP->angleA[i].minVal = DH_ANGLE_MIN;
+ resP->angleA[i].maxVal = DH_ANGLE_MAX;
+ resP->angleA[i].changed = FALSE;
+ resP->angleA[i].propTab = PropNewTab(FALSE);
+ }
+
+ resP->propTab = PropNewTab(FALSE);
+
+ for (i = 0; i < EQUIV_NO; i++) {
+ resP->equivI[i] = -1;
+ }
+
+ prevResP = ListPrev(resP->molP->resL, resP);
+ nextResP = ListNext(resP->molP->resL, resP);
+}
+
+DhResP
+DhResNewCyclic(DhMolP molP, DhResDefP defP, DhSeqPos pos)
+{
+ struct DhResS resS;
+ DhResP resP, prevResP, nextResP;
+
+ resS.molP = molP;
+ resS.defP = defP;
+
+ if (pos == SP_FIRST) {
+ nextResP = ListFirst(molP->resL);
+ if (nextResP == NULL)
+ resS.num = 1;
+ else
+ resS.num = nextResP->num - 1;
+
+ resP = ListInsertFirst(molP->resL, &resS);
+ } else {
+ prevResP = ListLast(molP->resL);
+ if (prevResP == NULL)
+ resS.num = 1;
+ else
+ resS.num = prevResP->num + 1;
+
+ resP = ListInsertLast(molP->resL, &resS);
+ }
+
+ initResCyclic(resP);
+
+ return resP;
+}
+
+DhResP
+DhResPrev(DhResP resP)
+{
+ return (DhResP) ListPrev(resP->molP->resL, resP);
+}
+
+DhResP
+DhResNext(DhResP resP)
+{
+ return (DhResP) ListNext(resP->molP->resL, resP);
+}
+
+DhResP
+DhResFirst(DhMolP molP)
+{
+ return (DhResP) ListFirst(molP->resL);
+}
+
+DhResP
+DhResLast(DhMolP molP)
+{
+ return (DhResP) ListLast(molP->resL);
+}
diff --git a/src/iodev/IODev.c b/src/iodev/IODev.c
index aa4f9a7..9c04ce8 100644
--- a/src/iodev/IODev.c
+++ b/src/iodev/IODev.c
@@ -44,6 +44,7 @@ extern void IOMotifGLDSetDev(void);
#endif
#ifdef IO_DEV_MOTIF_OGL
extern void IOMotifOGLSetDev(void);
+extern void IOMotifOGLDSetDev(void);
#endif
#ifdef IO_DEV_MOTIF_XGL
extern void IOMotifXGLSetDev(void);
@@ -75,6 +76,7 @@ static DevListEntry DevList[] = {
#endif
#ifdef IO_DEV_MOTIF_OGL
{"Motif/OpenGL", IOMotifOGLSetDev},
+ {"Motif/OpenGLD", IOMotifOGLDSetDev},
#endif
#ifdef IO_DEV_MOTIF_XGL
{"Motif/XGL", IOMotifXGLSetDev},
diff --git a/src/main/MolInit.c b/src/main/MolInit.c
index a7c467a..fccccd3 100644
--- a/src/main/MolInit.c
+++ b/src/main/MolInit.c
@@ -313,8 +313,9 @@ MolInit(char *defaultDev, int argc, char *argv[], char *macroName)
SgSetDoubleBuffer(TRUE);
- ProgDirSet("MOLMOLHOME", "/usr/molmol");
+ ProgDirSet("MOLMOLHOME", argv[0]);
SetupSetDir("setup");
+ CurrDirSet(getenv("HOME"));
- UserFileSetDir(CurrDirGet(), "molmol");
+ UserFileSetDir(CurrDirGet(), ".molmol");
GFileSetErrorHandler(handleFileError);
@@ -326,7 +327,7 @@ MolInit(char *defaultDev, int argc, char *argv[], char *macroName)
IOSetErrorHandler(handleIOError);
PuSetTextField(PU_TF_TITLE,
- "MOLMOL - MOLecule analysis and MOLecule display");
+ "MOLMOL - MOLecule analysis and MOLecule display - JCU V1.0.8");
gf = UserFileOpenRead("par");
if (gf != NULL) {
diff --git a/src/main/MolMol.c b/src/main/MolMol.c
index 6f825e8..902b50a 100644
--- a/src/main/MolMol.c
+++ b/src/main/MolMol.c
@@ -30,5 +30,5 @@
int
main(int argc, char *argv[])
{
- return MolInit("Motif/X11", argc, argv, NULL);
+ return MolInit("Motif/OpenGL", argc, argv, NULL);
}
diff --git a/src/motif/MotifDial.c b/src/motif/MotifDial.c
index 6e3bfd7..8fe0c5a 100644
--- a/src/motif/MotifDial.c
+++ b/src/motif/MotifDial.c
@@ -1115,26 +1115,24 @@ PuMotifSetStr(PuGizmo gizmo, PuStrChoice choice, char *val)
void
PuMotifSetColor(PuGizmo gizmo, float r, float g, float b)
{
- Display *dpy;
- int screen;
- Pixel pix;
- XColor col;
+ Display *display;
+ Pixel pixel;
+ XColor color;
+ Colormap colormap;
- dpy = XtDisplay(gizmo);
- screen = DefaultScreen(dpy);
- XtVaGetValues(gizmo,
- XmNbackground, &pix,
- NULL);
+ display = XtDisplay(gizmo);
+ XtVaGetValues(gizmo, XmNbackground, &pixel, NULL);
+ colormap = DefaultColormapOfScreen(XtScreen(gizmo));
- if (pix == BlackPixel(dpy, screen))
- return;
+ color.pixel = pixel;
+ color.red = FLOAT2SHORT(r);
+ color.green = FLOAT2SHORT(g);
+ color.blue = FLOAT2SHORT(b);
+ color.flags = DoRed | DoGreen | DoBlue;
- col.pixel = pix;
- col.red = FLOAT2SHORT(r);
- col.green = FLOAT2SHORT(g);
- col.blue = FLOAT2SHORT(b);
- col.flags = DoRed | DoGreen | DoBlue;
- XStoreColor(dpy, DefaultColormap(dpy, screen), &col);
+ XFreeColors(display, colormap, &pixel, 1, 0);
+ XAllocColor(display, colormap, &color);
+ XtVaSetValues(gizmo, XmNbackground, color.pixel, NULL);
}
void
diff --git a/src/motogl/MotOGLDump.c b/src/motogl/MotOGLDump.c
index 54a4222..3bc25cc 100644
--- a/src/motogl/MotOGLDump.c
+++ b/src/motogl/MotOGLDump.c
@@ -302,7 +302,7 @@ writeImg(void)
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
if (Quality < 100)
- TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS);
+ TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
else
TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
diff --git a/src/os/CurrDir.c b/src/os/CurrDir.c
index edee778..7d2b242 100644
--- a/src/os/CurrDir.c
+++ b/src/os/CurrDir.c
@@ -26,9 +26,9 @@
#include <curr_dir.h>
#include <stdlib.h>
-#ifdef WIN32
-#include <direct.h>
#include <string.h>
+#ifdef WIN32
+#include <direct.h>
#else
#include <unistd.h>
#include <errno.h>
@@ -36,43 +36,15 @@
static char *CurrDir = NULL;
+void
+CurrDirSet(char *dir)
+{
+ CurrDir = malloc(strlen(dir) + 1);
+ (void) strcpy(CurrDir, dir);
+}
+
char *
CurrDirGet(void)
{
-#ifdef WIN32
- int len, i;
-#else
- int size = 10;
-#endif
-
- if (CurrDir != NULL)
- return CurrDir;
-
-#ifdef WIN32
- CurrDir = _getcwd(NULL, 0);
- if (CurrDir != NULL) {
- len = strlen(CurrDir);
- for (i = 0; i < len; i++)
- if (CurrDir[i] == '\\')
- CurrDir[i] = '/';
- return CurrDir;
- }
-#else
- CurrDir = malloc(size);
- for (;;) {
- if (getcwd(CurrDir, size) != NULL)
- return CurrDir;
- if (errno != ERANGE)
- break;
- size *= 2;
- CurrDir = realloc(CurrDir, size);
- }
-#endif
-
- /* cannot get current directory, return root directory */
- CurrDir = realloc(CurrDir, 2);
- CurrDir[0] = '/';
- CurrDir[1] = '\0';
-
return CurrDir;
}
diff --git a/src/os/ProgDir.c b/src/os/ProgDir.c
index 7abb08d..79ede45 100644
--- a/src/os/ProgDir.c
+++ b/src/os/ProgDir.c
@@ -45,10 +45,6 @@ ProgDirSet(char *envVar, char *defVal)
dir = getenv(envVar);
if (dir == NULL) {
len = GetModuleFileName(NULL, exePath, sizeof(exePath));
- if (len == 0) {
- ProgDir = defVal;
- return;
- }
len--;
while (len > 0 && exePath[len] != '\\')
len--;
@@ -65,9 +61,24 @@ ProgDirSet(char *envVar, char *defVal)
if (ProgDir[i] == '\\')
ProgDir[i] = '/';
#else
- ProgDir = getenv(envVar);
- if (ProgDir == NULL)
- ProgDir = defVal;
+ char *dir;
+ char *exePath;
+ int len;
+ dir = getenv(envVar);
+ if (dir == NULL) {
+ exePath = defVal;
+ len = strlen(exePath);
+ len--;
+ while (len > 0 && exePath[len] != '/')
+ len--;
+ dir = exePath;
+ } else {
+ len = strlen(dir);
+ }
+
+ ProgDir = malloc(len + 1);
+ (void) strncpy(ProgDir, dir, len);
+
#endif
}
diff --git a/src/win/WinDial.c b/src/win/WinDial.c
index 61d6432..e880559 100644
--- a/src/win/WinDial.c
+++ b/src/win/WinDial.c
@@ -1072,148 +1072,143 @@ dialProc(HWND w, UINT msgKind, WPARAM wParam, LPARAM lParam)
childP = (GizmoInfo *) GetWindowLong(childW, GWL_USERDATA);
switch (notifyCode) {
- case BN_CLICKED:
- if (childId < infoP->u.dial.childNo) {
+ case BN_CLICKED:
+ if (childId < infoP->u.dial.childNo) {
childP = (GizmoInfo *) GetWindowLong(GetFocus(), GWL_USERDATA);
- if (childP->type == GIZMO_TOGGLE) {
- boxP = childP->u.toggle.boxP;
- if (boxP->type == GIZMO_RADIO_BOX) {
- for (i = 0; i < infoP->u.dial.childNo; i++) {
- cP = infoP->u.dial.childPA[i];
- if (cP->type != GIZMO_TOGGLE)
- continue;
- if (cP->u.toggle.boxP != boxP)
- continue;
- onOff = SendMessage(cP->w, BM_GETCHECK, 0, 0);
- if (onOff && cP != childP) {
- cP->u.toggle.onOff = FALSE;
- SendMessage(cP->w, BM_SETCHECK, FALSE, 0);
- selectStruc.onOff = FALSE;
- callCB(boxP, PU_CT_SELECT, cP->name, &selectStruc);
- break;
- }
- }
- if (cP != childP) {
- childP->u.toggle.onOff = TRUE;
- SendMessage(childP->w, BM_SETCHECK, TRUE, 0);
- selectStruc.onOff = TRUE;
- callCB(boxP, PU_CT_SELECT, childP->name, &selectStruc);
- }
- } else {
- onOff = ! SendMessage(childP->w, BM_GETCHECK, 0, 0);
- childP->u.toggle.onOff = onOff;
- SendMessage(childP->w, BM_SETCHECK, onOff, 0);
- selectStruc.onOff = onOff;
- callCB(boxP, PU_CT_SELECT, childP->name, &selectStruc);
- }
- } else {
- callCB(childP, PU_CT_ACTIVATE, childP->name, NULL);
- if (childP->type == GIZMO_TEXT_FIELD &&
- childP->u.text.historySize > 0)
- childP->u.text.firstMod = TRUE;
- }
- } else {
- buttonI = childId - infoP->u.dial.childNo;
- callCB(infoP, BUTTON_FIRST + buttonI, ButtonLabelA[buttonI], NULL);
- }
+ if (childP->type == GIZMO_TOGGLE) {
+ boxP = childP->u.toggle.boxP;
+ if (boxP->type == GIZMO_RADIO_BOX) {
+ for (i = 0; i < infoP->u.dial.childNo; i++) {
+ cP = infoP->u.dial.childPA[i];
+ if (cP->type != GIZMO_TOGGLE) continue;
+ if (cP->u.toggle.boxP != boxP) continue;
+ onOff = SendMessage(cP->w, BM_GETCHECK, 0, 0);
+ if (onOff && cP != childP) {
+ cP->u.toggle.onOff = FALSE;
+ SendMessage(cP->w, BM_SETCHECK, FALSE, 0);
+ selectStruc.onOff = FALSE;
+ callCB(boxP, PU_CT_SELECT, cP->name, &selectStruc);
+ break;
+ }
+ }
+ if (cP != childP) {
+ childP->u.toggle.onOff = TRUE;
+ SendMessage(childP->w, BM_SETCHECK, TRUE, 0);
+ selectStruc.onOff = TRUE;
+ callCB(boxP, PU_CT_SELECT, childP->name, &selectStruc);
+ }
+ } else {
+ onOff = ! SendMessage(childP->w, BM_GETCHECK, 0, 0);
+ childP->u.toggle.onOff = onOff;
+ SendMessage(childP->w, BM_SETCHECK, onOff, 0);
+ selectStruc.onOff = onOff;
+ callCB(boxP, PU_CT_SELECT, childP->name, &selectStruc);
+ }
+ } else {
+ callCB(childP, PU_CT_ACTIVATE, childP->name, NULL);
+ if (childP->type == GIZMO_TEXT_FIELD && childP->u.text.historySize > 0) childP->u.text.firstMod = TRUE;
+ }
+ } else {
+ buttonI = childId - infoP->u.dial.childNo;
+ callCB(infoP, BUTTON_FIRST + buttonI, ButtonLabelA[buttonI], NULL);
+ }
return TRUE;
- case EN_UPDATE:
- textEdit(childP);
- return TRUE;
- case LBN_SELCHANGE:
- for (i = 0; i < childP->u.list.entryNo; i++)
- if (SendMessage(childW, LB_GETSEL, i, 0) !=
- childP->u.list.entryA[i].onOff)
- lastI = i;
- for (i = 0; i < childP->u.list.entryNo; i++) {
- onOff = SendMessage(childW, LB_GETSEL, i, 0);
- if (onOff != childP->u.list.entryA[i].onOff) {
- if (! childP->u.list.autoDesel)
+ case EN_UPDATE:
+ textEdit(childP);
+ return TRUE;
+
+ case LBN_SELCHANGE:
+ for (i = 0; i < childP->u.list.entryNo; i++)
+ if (SendMessage(childW, LB_GETSEL, i, 0) != childP->u.list.entryA[i].onOff)
+ lastI = i;
+
+ for (i = 0; i < childP->u.list.entryNo; i++) {
+ onOff = SendMessage(childW, LB_GETSEL, i, 0);
+ if (onOff != childP->u.list.entryA[i].onOff) {
+ if (! childP->u.list.autoDesel)
childP->u.list.entryA[i].onOff = onOff;
- selectStruc.onOff = onOff;
- selectStruc.last = (i == lastI);
- callCB(childP, PU_CT_SELECT,
- childP->u.list.entryA[i].str, &selectStruc);
- }
- }
-
- if (childP->u.list.autoDesel)
- SendMessage(childW, LB_SETCURSEL, -1, 0);
-
- return TRUE;
+ selectStruc.onOff = onOff;
+ selectStruc.last = (i == lastI);
+ callCB(childP, PU_CT_SELECT,
+ childP->u.list.entryA[i].str, &selectStruc);
+ }
+ }
+ if (childP->u.list.autoDesel)
+ SendMessage(childW, LB_SETCURSEL, -1, 0);
+ return TRUE;
}
+ break;
- break;
- case WM_VSCROLL:
- childW = (HWND) lParam;
- childP = (GizmoInfo *) GetWindowLong(childW, GWL_USERDATA);
- scrollCode = LOWORD(wParam);
+ case WM_VSCROLL:
+ childW = (HWND) lParam;
+ childP = (GizmoInfo *) GetWindowLong(childW, GWL_USERDATA);
+ scrollCode = LOWORD(wParam);
- if (scrollCode == SB_LINEUP) {
- upHistory(childP->u.scroll.textP);
- } else if (scrollCode == SB_LINEDOWN) {
- downHistory(childP->u.scroll.textP);
- } else {
- return FALSE;
- }
- return TRUE;
- case WM_HSCROLL:
- scrollCode = LOWORD(wParam);
- if (scrollCode != SB_THUMBPOSITION && scrollCode != SB_THUMBTRACK)
- return FALSE;
+ if (scrollCode == SB_LINEUP) {
+ upHistory(childP->u.scroll.textP);
+ } else if (scrollCode == SB_LINEDOWN) {
+ downHistory(childP->u.scroll.textP);
+ } else {
+ return FALSE;
+ }
+ return TRUE;
+ case WM_HSCROLL:
+ scrollCode = LOWORD(wParam);
+ if (scrollCode != SB_THUMBPOSITION && scrollCode != SB_THUMBTRACK)
+ return FALSE;
- scrollPos = (int)(short)HIWORD(wParam);
- childW = (HWND) lParam;
- childP = (GizmoInfo *) GetWindowLong(childW, GWL_USERDATA);
+ scrollPos = (int)(short)HIWORD(wParam);
+ childW = (HWND) lParam;
+ childP = (GizmoInfo *) GetWindowLong(childW, GWL_USERDATA);
- floatStruc.oldVal = childP->u.slider.val;
- childP->u.slider.val = scrollPos / childP->u.slider.factor;
- SetScrollPos(childW, SB_CTL,
- (int) (childP->u.slider.val * childP->u.slider.factor),
- TRUE);
+ floatStruc.oldVal = childP->u.slider.val;
+ childP->u.slider.val = scrollPos / childP->u.slider.factor;
+ SetScrollPos(childW, SB_CTL,
+ (int) (childP->u.slider.val * childP->u.slider.factor), TRUE);
- if (childP->u.slider.valuatorCB == NULL) {
- floatStruc.newVal = childP->u.slider.val;
- callCB(childP, PU_CT_MODIFY, childP->name, &floatStruc);
- } else {
- valStruc.act = PU_MA_ACTIVATE;
- valStruc.name = childP->name;
- valStruc.val = childP->u.slider.val;
- childP->u.slider.valuatorCB(childP, childP->u.slider.clientData, &valStruc);
- }
+ if (childP->u.slider.valuatorCB == NULL) {
+ floatStruc.newVal = childP->u.slider.val;
+ callCB(childP, PU_CT_MODIFY, childP->name, &floatStruc);
+ } else {
+ valStruc.act = PU_MA_ACTIVATE;
+ valStruc.name = childP->name;
+ valStruc.val = childP->u.slider.val;
+ childP->u.slider.valuatorCB(childP, childP->u.slider.clientData, &valStruc);
+ }
+ return TRUE;
- return TRUE;
- case WM_PAINT:
- for (childId = 0; childId < infoP->u.dial.childNo; childId++) {
- childP = infoP->u.dial.childPA[childId];
- if (childP->type == GIZMO_COLOR_FIELD)
- paintColor(childP->w,
- childP->u.color.r, childP->u.color.g, childP->u.color.b);
- }
- break;
- case WM_MOVE:
- if (infoP->u.dial.outside) {
- WinPlaceChanged(infoP->w);
- return TRUE;
- }
- break;
- case WM_CLOSE:
- buttonNo = 0;
- for (i = 0; i < BUTTON_NO; i++)
- if (infoP->u.dial.buttonSwitchA[i])
- buttonNo++;
- if (buttonNo == 0)
- ShowWindow(infoP->w, SW_HIDE);
- return TRUE;
- case WM_DESTROY:
- WinRemoveDialog(w);
- for (childId = 0; childId < infoP->u.dial.childNo; childId++)
- freeInfo(infoP->u.dial.childPA[childId]);
- freeInfo(infoP);
- return TRUE;
- }
+ case WM_PAINT:
+ for (childId = 0; childId < infoP->u.dial.childNo; childId++) {
+ childP = infoP->u.dial.childPA[childId];
+ if (childP->type == GIZMO_COLOR_FIELD)
+ paintColor(childP->w,
+ childP->u.color.r, childP->u.color.g, childP->u.color.b);
+ }
+ break;
+ case WM_MOVE:
+ if (infoP->u.dial.outside) {
+ WinPlaceChanged(infoP->w);
+ return TRUE;
+ }
+ break;
+ case WM_CLOSE:
+ buttonNo = 0;
+ for (i = 0; i < BUTTON_NO; i++) {
+ if (infoP->u.dial.buttonSwitchA[i]) buttonNo++;
+ if (buttonNo == 0) {
+ ShowWindow(infoP->w, SW_HIDE);
+ }
+ }
+ return TRUE;
+ case WM_DESTROY:
+ WinRemoveDialog(w);
+ for (childId = 0; childId < infoP->u.dial.childNo; childId++)
+ freeInfo(infoP->u.dial.childPA[childId]);
+ freeInfo(infoP);
+ return TRUE;
+ }
return FALSE;
}
diff --git a/src/winogl/WinOGLDump.c b/src/winogl/WinOGLDump.c
index 0a7d61a..a8ce850 100644
--- a/src/winogl/WinOGLDump.c
+++ b/src/winogl/WinOGLDump.c
@@ -44,6 +44,7 @@
#endif
#ifdef PNG_SUPPORT
#include <png.h>
+#include <pngpriv.h>
#endif
#include "winogl_int.h"
@@ -251,7 +252,7 @@ static void
pngErrHand(png_structp pngStrucP, char *errMsg)
{
IORaiseError(errMsg);
- longjmp(pngStrucP->jmpbuf, 1);
+ longjmp(pngStrucP->longjmp_buffer, 1);
}
#endif
@@ -314,7 +315,7 @@ writeImg(void)
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
if (Quality < 100)
- TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS);
+ TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
else
TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
@@ -369,7 +370,7 @@ writeImg(void)
return IO_RES_ERR;
}
- if (setjmp(pngStrucP->jmpbuf)) {
+ if (setjmp(pngStrucP->longjmp_buffer)) {
if (cBuf != NULL)
free(cBuf);
if (fBuf != NULL)