/*
 * $Id: dasm.c,v 1.7 1997/01/03 17:26:08 root Exp root $
 *
 * $Log: dasm.c,v $
 * Revision 1.7  1997/01/03 17:26:08  root
 * moved several functions to rgsadmin.c
 * Added extra form in showdasm_select.
 *
 * Revision 1.6  1996/12/21 00:17:22  root
 * Added:
 * showdasm_select_ok()
 * Changed:
 * In showdasm_select():
 * Dialog is now custom.
 *
 * Revision 1.5  1996/12/12 19:07:03  root
 * Added:
 * showdasm_select()
 *
 * Revision 1.4  1996/12/06 20:33:13  root
 * In get dasm_device_list():
 *    Changed to take char *** as arg and return int.
 * In sense_dasm():
 *    Changed to take char ** as arg and return int.
 * In showdasm():
 *    Changed to take char ** as arg and return int.
 * In get_dasm_list():
 *    Changed to take char *** as arg and return int.
 *
 * Revision 1.3  1996/11/21 23:18:36  root
 * Added #include "config.h"
 *
 * Changed get_dasm_list() to get_dasm_device_list()
 * Fixed memory corruption bug.
 *
 * Added sense_dasm()
 *
 * Changed showdasm() to use getpwnam()
 *
 * Revision 1.2  1996/11/19 22:14:37  root
 * Added function showdasm().
 *
 * Revision 1.1  1996/11/18 21:39:35  root
 * Initial revision
 *
 */

#include "common.h"
#include "dasm.h"
#include "config.h"
#include "util.h"


static int showdasm(char *, char **);
static void showdasm_select_ok(Widget, XtPointer, XtPointer);



static int
showdasm(char *device, char **ptr)
{

  FILE *show;
  char buf[BUFSIZ], cmd[BUFSIZ];
  struct passwd *pwd;

  *ptr = (char *) XtMalloc(1);
  
  if ((pwd = getpwnam(SPOOLER_USER)) != NULL) {
    sprintf(cmd, "%s/bin/%s /dev/dasm/%s", pwd->pw_dir, SHOWDASM_CMD, device);
    
    if ((show = popen(cmd, "r")) != NULL) {
      while((fgets(buf, BUFSIZ, show)) != NULL) {
	*ptr = (char *) XtRealloc((char *) *ptr, strlen(*ptr) + strlen(buf));
	strcat(*ptr, buf);
	handle_pending_x_events();
      }
      pclose(show);
      return 0;
    } else
      return PIPE_ERROR;
  } else
    return BAD_USER;
}


static void
showdasm_select_ok(Widget w, XtPointer client_data, XtPointer call_data)
{
  XtPopdown((Widget) client_data);
}


void 
showdasm_select(Widget w, XtPointer client_data, XtPointer call_data)
{
  Widget showdasm_dialog, showdasm_form;
  Widget sep, device_label, dasm, messagebox;
  char *dasm_data, *selected_item, message[30], *device;
  XmString str, *sel_item; 


  watch_cursor(GetTopShell(w), True);

  showdasm_dialog = XtVaCreatePopupShell("showdasm_dialog",
					 xmDialogShellWidgetClass,
					 GetAppShell(w),
					 NULL);

  messagebox = XmCreateMessageBox(showdasm_dialog, "messagebox", NULL, 0);
  XtVaSetValues(messagebox,
		XmNmarginWidth, 0,
		XmNtopAttachment, XmATTACH_WIDGET,
		XmNtopWidget, dasm,
		XmNleftAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);
		
  XtUnmanageChild(XmMessageBoxGetChild(messagebox, 
				       XmDIALOG_HELP_BUTTON));
  XtUnmanageChild(XmMessageBoxGetChild(messagebox, 
				       XmDIALOG_CANCEL_BUTTON));

  XtAddCallback(XmMessageBoxGetChild(messagebox, XmDIALOG_OK_BUTTON), 
		XmNactivateCallback, showdasm_select_ok, (XtPointer) showdasm_dialog);

  showdasm_form = XtVaCreateWidget ("showdasm_form", xmFormWidgetClass,
				    messagebox, NULL);

  XtVaGetValues((Widget) client_data,
		XmNselectedItems, &sel_item,
		NULL);
  XmStringGetLtoR (sel_item[0], XmFONTLIST_DEFAULT_TAG, &selected_item);
  device = strtok(selected_item, " ");

  /* Free memory allocated in XmStringGetLtoR() */

  XtFree(selected_item);

  sprintf(message, "Dasm Device %s", device);

  str = XmStringCreateLocalized(message);
  device_label = XtVaCreateManagedWidget("device_label", xmLabelGadgetClass,
					 showdasm_form,
					 XmNlabelString, str,
					 XmNtopAttachment, XmATTACH_FORM,
					 XmNleftAttachment, XmATTACH_FORM,
					 XmNleftOffset, 13,
					 XmNrightAttachment, XmATTACH_FORM,
					 XmNrightOffset, 13,
					 NULL);

  XmStringFree(str);

  sep = XtVaCreateManagedWidget("separator", xmSeparatorWidgetClass,
				showdasm_form,
				XmNtopAttachment, XmATTACH_WIDGET,
				XmNtopWidget, device_label,
				XmNtopOffset, 10,
				XmNleftAttachment, XmATTACH_FORM,
				XmNrightAttachment, XmATTACH_FORM,
				NULL);

  showdasm(device, &dasm_data);
  str = XmStringCreateLocalized(dasm_data);

  /* Free memory allocated in showdasm() */

  XtFree(dasm_data);

  dasm = XtVaCreateManagedWidget("dasm", xmLabelGadgetClass, showdasm_form,
				 XmNlabelString, str,
				 XmNalignment, XmALIGNMENT_BEGINNING,
				 XmNtopAttachment, XmATTACH_WIDGET,
				 XmNtopWidget, sep,
				 XmNtopOffset, 20,
				 XmNleftAttachment, XmATTACH_FORM,
				 XmNleftOffset, 13,
				 XmNrightAttachment, XmATTACH_FORM,
				 XmNrightOffset, 13,
				 NULL);

  XmStringFree(str);
    
  XtManageChild(showdasm_form);
  XtManageChild(messagebox);
  XtPopup(showdasm_dialog, XtGrabNone);

  watch_cursor(GetTopShell(w), False);
}


