|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 3643 (0xe3b)
Types: TextFile
Names: »commands.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/others/max/commands.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/others/max/commands.c«
/* commands.c - max -- built-in commands */
#include <stdio.h>
#include "max.h"
/* \f
*/
static int direction = 1;
/* \f
*/
/* ARGSUSED */
void doSelect (tag, reason)
caddr_t tag;
unsigned long reason;
{
int value = (int) tag;
Arg args[1];
register FI fi;
remove_message (0);
for (fi = curDI -> di_parts.fi_forw;
fi != &curDI -> di_parts;
fi = fi -> fi_forw)
if (fi -> fi_selected != value) {
if (fi -> fi_selected = value)
fi -> fi_selectpos = ++numselected;
XtSetArg (args[0], XtNvalue, &fi -> fi_selected);
XtBooleanSetValues (fi -> fi_button, args, 1);
}
if (!value)
numselected = 0;
}
/* \f
*/
/* ARGSUSED */
void doInvert (tag, reason)
caddr_t tag;
unsigned long reason;
{
Arg args[1];
register FI fi;
remove_message (0);
numselected = 0;
for (fi = curDI -> di_parts.fi_forw;
fi != &curDI -> di_parts;
fi = fi -> fi_forw) {
if (fi -> fi_selected = !fi -> fi_selected)
fi -> fi_selectpos = ++numselected;
XtSetArg (args[0], XtNvalue, &fi -> fi_selected);
XtBooleanSetValues (fi -> fi_button, args, 1);
}
}
/* \f
*/
/* ARGSUSED */
void doAdvance (tag, reason)
caddr_t tag;
unsigned long reason;
{
int next = (int) tag;
char *cp;
Arg args[1];
register FI fi,
gi;
UFexecMode mode;
remove_message (0);
if (next == 2) {
next = direction;
mode = (UFexecMode) reason;
}
else {
direction = next;
mode = UFexecEachFile;
}
switch (numselected) {
case 0:
fi = NULLFI;
gi = next ? curDI -> di_parts.fi_forw : curDI -> di_parts.fi_back;
break;
case 1:
if (next) {
for (fi = curDI -> di_parts.fi_forw;
fi != &curDI -> di_parts;
fi = fi -> fi_forw)
if (fi -> fi_selected) {
gi = fi -> fi_forw;
break;
}
}
else
for (fi = curDI -> di_parts.fi_back;
fi != &curDI -> di_parts;
fi = fi -> fi_back)
if (fi -> fi_selected) {
gi = fi -> fi_back;
break;
}
break;
default:
display_message (NULLCP, "multiple selections");
return;
}
switch (mode) {
case UFexecEachRegular:
case UFexecAllRegulars:
cp = "no appropriate selections";
while (gi != &curDI -> di_parts) {
if (!FI_ISDIR (gi))
break;
gi = next ? gi -> fi_forw : gi -> fi_back;
}
break;
case UFexecEachDirectory:
case UFexecAllDirectories:
cp = "no appropriate selections";
while (gi != &curDI -> di_parts) {
if (FI_ISDIR (gi))
break;
gi = next ? gi -> fi_forw : gi -> fi_back;
}
break;
default:
cp = next ? "no next selection" : "no previous selection";
break;
}
if (gi == &curDI -> di_parts) {
display_message (NULLCP, "%s", cp);
return;
}
if (fi != NULLFI) {
fi -> fi_selected = 0;
XtSetArg (args[0], XtNvalue, &fi -> fi_selected);
XtBooleanSetValues (fi -> fi_button, args, 1);
numselected--;
}
gi -> fi_selected = gi -> fi_selectpos = 1;
XtSetArg (args[0], XtNvalue, &gi -> fi_selected);
XtBooleanSetValues (gi -> fi_button, args, 1);
numselected++;
}
/* \f
*/
/* ARGSUSED */
void doCD (tag, reason)
caddr_t tag;
unsigned long reason;
{
register FI fi;
if (numselected != 1) {
display_message (NULLCP, numselected ? "too many selections"
: "nothing selected");
return;
}
for (fi = curDI -> di_parts.fi_forw;
fi != &curDI -> di_parts;
fi = fi -> fi_forw)
if (fi -> fi_selected) {
if (FI_ISDIR (fi))
CDfnx ((caddr_t) fi, (unsigned long) 0);
else
display_message (NULLCP, "not a directory");
break;
}
}