void contract(int u, int v){
  int anc = lca(u, v);
  if(rt(u)!=anc) frm[u] = v;
  if(rt(v)!=anc) frm[v] = u;
  contractPath(u, anc);
  contractPath(v, anc);
}
Example #2
0
void fileOpenCb(Widget w, XEvent *event, String *params, Cardinal *num_params)
{
 FileWindowRec *fw;
 FileRec *file;
 int item;
 char path[MAXPATHLEN];
 String *argv, push_action;

 if (!(fw = findFileWidget(w, &item)))  return;
 zzz();
 file = fw->files[item];
 strcpy(path, fw->directory);
 if (path[strlen(path)-1] != '/')  strcat(path, "/");
 strcat(path, file->name);
 if (S_ISDIR(file->stats.st_mode))
 {
     contractPath(path);
     chFileDir(fw, path);
 }
 else if (file->stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))
 {
     String arguments = XtNewString(file->name);
     String action = (String) XtMalloc((strlen(path) + 6) * sizeof(char));

     strcat(strcpy(action, "exec "), path);
     argv = makeArgv(action, 1, &arguments);
     executeApplication(user.shell, fw->directory, argv);
     XTFREE(action);
     freeArgv(argv);
 }
 else if (file->type)
 {
     if (*(push_action = file->type->push_action))
     {
	 if (!(strcmp(push_action, "EDIT")))
	     doEdit(fw->directory, file->name);
	 else if (!(strcmp(push_action, "VIEW")))
	     doView(fw->directory, file->name);
	 else if (!(strcmp(push_action, "LOAD")))
	 {
	     zzz();
	     newApplicationWindow(path, NULL);
	     wakeUp();
	 }
	 else
	 {
	     argv = (String *) XtMalloc(sizeof(String));
	     argv[0] = XtNewString(file->name);
	     performAction(fw->shell, file->type->icon_pm.bm, push_action, fw->directory, 1, argv);
	     XTFREE(argv);
	 }
     }
 }
 else doEdit(fw->directory, file->name);
 wakeUp();
}
Example #3
0
void goUpCb(Widget w, XtPointer client_data, XtPointer call_data)
{
 FileWindowRec *fw = (FileWindowRec *) client_data;
 char path[MAXPATHLEN];

 if (strcmp(fw->directory, "/"))
 {
     strcpy(path, fw->directory);
     strcat(path, "/..");
     contractPath(path);
     chFileDir(fw, path);
 }
}
Example #4
0
void dirOpenCb(Widget w, XtPointer client_data, XtPointer call_data)
{
 FileWindowRec *fw = (FileWindowRec *) client_data;
 char path[MAXPATHLEN];
 int item;

 zzz();
 XtVaGetValues(fw->form, XmNuserData, (XtPointer) &item, NULL);
 strcpy(path, fw->directory);
 if (path[strlen(path)-1] != '/')  strcat(path, "/");
 strcat(path, fw->files[item]->name);
 fnexpand(path);
 contractPath(path);
 newFileWindow(path, fw, NULL);
 wakeUp();
}
Example #5
0
void changeDirCb(Widget w, XtPointer client_data, XtPointer calldata)
{
 FileWindowRec *fw = (FileWindowRec *) client_data;
 char *newpath, dir[MAXPATHLEN];

 newpath = XmTextFieldGetString(w);
 if (newpath[0] != '/' && newpath[0] != '~' && newpath[0] != 0)
 {
     strcpy(dir, fw->directory);
     if (dir[strlen(dir)-1] != '/')  strcat(dir, "/");
 }
 else dir[0] = 0;
 strcat(dir, newpath);
 XTFREE(newpath);
 fnexpand(dir);
 contractPath(dir);
 if (!chFileDir(fw, dir))
     XmTextFieldSetString(fw->dirfield, fw->directory);
}