home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!wupost!cs.utexas.edu!swrinde!network.ucsd.edu!mvb.saic.com!vmsnet-sources
- From: tanner@cerritos.edu
- Newsgroups: vmsnet.sources
- Subject: DWProfile V3.3, part 03/06
- Message-ID: <9908592@MVB.SAIC.COM>
- Date: Mon, 04 Jan 1993 20:47:05 GMT
- Organization: Cerritos College, Norwalk CA
- Lines: 1408
- Approved: Mark.Berryman@Mvb.Saic.Com
-
- Submitted-by: tanner@cerritos.edu
- Posting-number: Volume 4, Issue 28
- Archive-name: dwprofile/part03
-
- -+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+
- X ident_dsc.dsc$w_length = strlen(select_ptr->name);
- X switch (select_data`5Bselect_index`5D.type) `7B
- X case DWP_ALPHA:
- X if (select_data`5Bselect_index`5D.code == UAI$_USERNAME) `7B
- X matched = (str$match_wild(&ident_dsc, &select_dsc) == STR$_MATCH
- V);
- X break;
- X `7D
- X else `7B
- X itmlst`5B0`5D.buflen = select_data`5Bselect_index`5D.size;
- X itmlst`5B0`5D.itmcode = select_data`5Bselect_index`5D.code;
- X itmlst`5B0`5D.bufadr = match_string;
- X itmlst`5B0`5D.retadr = 0;
- X itmlst`5B1`5D.buflen = 0;
- X itmlst`5B1`5D.itmcode = 0;
- X status = sys$getuai(0, 0, &ident_dsc, &itmlst, 0, 0, 0);
- X if ((status & 7) != SS$_NORMAL) `7B
- X sprintf(message, "Username %s does not exist", select_ptr->n
- Vame);
- X DWPerror("Find", message, resource_data.find_interval);
- X break;
- X `7D
- X match_string`5B8`5D = ' '; /* make sure ' ' */
- X match_string`5B9`5D = '\0'; /* make sure null */
- X sptr = strchr(match_string, ' ');
- X if (sptr) *sptr = '\0';
- X match_dsc.dsc$w_length = strlen(match_string);
- X matched = (str$match_wild(&match_dsc, &select_dsc) == STR$_MATCH
- V);
- X break;
- X `7D
- X case DWP_LALPHA:
- X itmlst`5B0`5D.buflen = select_data`5Bselect_index`5D.size;
- X itmlst`5B0`5D.itmcode = select_data`5Bselect_index`5D.code;
- X itmlst`5B0`5D.bufadr = match_string;
- X itmlst`5B0`5D.retadr = &length;
- X itmlst`5B1`5D.buflen = 0;
- X itmlst`5B1`5D.itmcode = 0;
- X status = sys$getuai(0, 0, &ident_dsc, &itmlst, 0, 0, 0);
- X if ((status & 7) != SS$_NORMAL) `7B
- X sprintf(message, "Username %s does not exist", select_ptr->name)
- V;
- X DWPerror("Find", message, resource_data.find_interval);
- X break;
- X `7D
- X match_string`5Blength`5D = ' '; /* make sure ' ' */
- X match_string`5Blength+1`5D = '\0'; /* make sure null */
- X strcpy(match_string, unpad(match_string)); /* get rid of length byt
- Ve */
- X match_dsc.dsc$w_length = strlen(match_string);
- X matched = (str$match_wild(&match_dsc, &select_dsc) == STR$_MATCH);
- X break;
- X case DWP_UIC:
- X itmlst`5B0`5D.buflen = select_data`5Bselect_index`5D.size;
- X itmlst`5B0`5D.itmcode = select_data`5Bselect_index`5D.code;
- X itmlst`5B0`5D.bufadr = &uic;
- X itmlst`5B0`5D.retadr = &length;
- X itmlst`5B1`5D.buflen = 0;
- X itmlst`5B1`5D.itmcode = 0;
- X status = sys$getuai(0, 0, &ident_dsc, &itmlst, 0, 0, 0);
- X if ((status & 7) != SS$_NORMAL) `7B
- X sprintf(message, "Username %s does not exist", select_ptr->name)
- V;
- X DWPerror("Find", message, resource_data.find_interval);
- X break;
- X `7D
- X /* convert UIC to text and do text wildcard match */
- X sprintf(match_string, "`5B%o,%o`5D", uic >> 16, uic & 0xFFFF);
- X match_dsc.dsc$w_length = strlen(match_string);
- X matched = (str$match_wild(&match_dsc, &select_dsc) == STR$_MATCH);
- X break;
- X case DWP_DATE:
- X itmlst`5B0`5D.buflen = select_data`5Bselect_index`5D.size;
- X itmlst`5B0`5D.itmcode = select_data`5Bselect_index`5D.code;
- X itmlst`5B0`5D.bufadr = match_string;
- X itmlst`5B0`5D.retadr = 0;
- X itmlst`5B1`5D.buflen = 0;
- X itmlst`5B1`5D.itmcode = 0;
- X status = sys$getuai(0, 0, &ident_dsc, &itmlst, 0, 0, 0);
- X if ((status & 7) != SS$_NORMAL) `7B
- X sprintf(message, "Username %s does not exist", select_ptr->name)
- V;
- X DWPerror("Find", message, resource_data.find_interval);
- X break;
- X `7D
- X matched = (!memcmp(match_string, select_string,
- X select_data`5Bselect_index`5D.size));
- X break;
- X case DWP_RINT:
- X /* special test - the only test of a RINT is logfails > 0 */
- X itmlst`5B0`5D.buflen = select_data`5Bselect_index`5D.size;
- X itmlst`5B0`5D.itmcode = select_data`5Bselect_index`5D.code;
- X itmlst`5B0`5D.bufadr = &logfails;
- X itmlst`5B0`5D.retadr = &length;
- X itmlst`5B1`5D.buflen = 0;
- X itmlst`5B1`5D.itmcode = 0;
- X status = sys$getuai(0, 0, &ident_dsc, &itmlst, 0, 0, 0);
- X if ((status & 7) != SS$_NORMAL) `7B
- X sprintf(message, "Username %s does not exist", select_ptr->name)
- V;
- X DWPerror("Find", message, resource_data.find_interval);
- X break;
- X `7D
- X matched = logfails;
- X break;
- X `7D
- X if (matched) `7B
- X if (found_add)
- X found_add = found_add->next = XtNew(ident);
- X else
- X found_add = found_list.next = XtNew(ident);
- X found_add->name = XtNewString(select_ptr->name);
- X found_add->next = NULL;
- X `7D
- X if (select_ptr = select_ptr->next)
- X return FALSE;
- X else `7B
- X if (!found_ptr->next) `7B /* no more to display */
- X XtSetSensitive(button_array`5Bfind_button`5D, OFF); /* 'find' b
- Vutton is inactive */
- X XtSetSensitive(button_array`5Bfind_menu`5D, OFF);
- X `7D
- X progress(NULL);
- X find_work_proc_id = (XtWorkProcId) 0;
- X return TRUE;
- X `7D
- X`7D
- X
- X
- X/*
- X * Parse textual date to 64 bit binary value`20
- X * Returns false if illegal date
- X */
- X
- Xstatic Boolean parse_date(Cardinal value)
- X`7B
- X Cardinal status, count = 0;
- X String str;
- X $DESCRIPTOR(time_dsc, uafdata`5Bvalue`5D.sdata);
- X
- X if (!strlen(uafdata`5Bvalue`5D.sdata)) `7B /* empty date means (none) */
- X memset(uafdata`5Bvalue`5D.sdata, 0, 8); /* make date 'none' */
- X return TRUE;
- X `7D
- X /* default expiration date to midnight instead of current time */
- X for (str = uafdata`5Bvalue`5D.sdata; str;) `7B
- X if((str = strchr(str, ':')) == NULL)
- X break; /* no more colons */
- X count++; /* count the colons in date */
- X str++; /* skip over the colon we just counted */
- X `7D
- X if (count < 1) /* no hh:mm:ss.cc */
- X strcat(uafdata`5Bvalue`5D.sdata, " 00:00:00.00");
- X else if (count < 2) /* no ss.cc */
- X strcat(uafdata`5Bvalue`5D.sdata, ":00.00");
- X time_dsc.dsc$w_length = strlen(uafdata`5Bvalue`5D.sdata);
- X status = sys$bintim(&time_dsc, &uafdata`5Bvalue`5D.sdata);
- X /* .sdata will now contain the 64-bit system time */
- X return (status == SS$_NORMAL);
- X`7D
- X
- X
- X/*
- X * Parse textual UIC to binary value`20
- X * Returns false if illegal UIC format
- X */
- X
- Xstatic Boolean parse_uic(int code)
- X`7B
- X Cardinal status, grp = 0, mem = 0;
- X
- X status = sscanf(uafdata`5Bcode`5D.sdata, "`5B%o,%o`5D", &grp, &mem);
- X if (status != 2) /* try without `5B`5D */
- X status = sscanf(uafdata`5Bcode`5D.sdata, "%o,%o", &grp, &mem);
- X uafdata`5BUAI$_UIC`5D.idata = (grp << 16) + mem;
- X return (status == 2);
- X`7D
- X
- X
- X/*
- X * Build the list of accounts for accounts_box
- X */
- X
- Xstatic void build_accounts()
- X`7B
- X ident *ptr;
- X XmString *items;
- X Widget list;
- X Cardinal ind;
- X
- X if (!accounts_box `7C`7C !XtIsManaged(accounts_box))
- X return; /* box isn't there */
- X
- X list = XmSelectionBoxGetChild(accounts_box, XmDIALOG_LIST);
- X XmListDeleteAllItems(list);
- X items = (XmString *)XtCalloc(account_count, sizeof(XmString));
- X for (ptr = ident_list, ind = 0; ptr; ptr = ptr->next)
- X if (ptr->status == account)
- X items`5Bind++`5D = XmStringCreateSimple(ptr->name);
- X XmListAddItems(list, items, ind, 0);
- X for (ind = 0; ind < account_count; ind++)
- X XmStringFree(items`5Bind`5D);
- X XtFree(items);
- X`7D
- X
- X
- X/*
- X * Show the progress of 'Find Next'
- X */
- X
- Xstatic void progress(ident *location)
- X`7B
- X static Widget progress_box = NULL;
- X XmString xmstr;
- X char str`5B80`5D;
- X Cardinal ac, count, pct;
- X static int old_pct = -1;
- X Arg arglist`5B10`5D;
- X ident *ptr;
- X Display *display;
- X Window window;
- X
- X if (progress_id) `7B
- X XtRemoveTimeOut(progress_id); /* clear out any old timers */
- X progress_id = (XtIntervalId) 0;
- X `7D
- X
- X if (!location) `7B /* location = null means pop down box */
- X if (progress_box && XtIsManaged(progress_box))
- X XtUnmanageChild(progress_box);
- X return;
- X `7D
- X
- X if (!progress_box) `7B
- X ac = 0;
- X xmstr = XmStringCreateSimple("DWProfile: Find progress");
- X XtSetArg(arglist`5Bac`5D, XmNheight, 112); ac++;
- X XtSetArg(arglist`5Bac`5D, XmNwidth, 224); ac++;
- X XtSetArg(arglist`5Bac`5D, XmNresizePolicy, XmRESIZE_NONE); ac++;
- X XtSetArg(arglist`5Bac`5D, XmNdialogTitle, xmstr); ac++;
- X progress_box = XmCreateWorkingDialog(dwprofile_main, "progress_box",
- V arglist, ac);
- X XmStringFree(xmstr);
- X XtUnmanageChild(XmMessageBoxGetChild(progress_box, XmDIALOG_OK_BUTTO
- VN));
- X XtUnmanageChild(XmMessageBoxGetChild(progress_box, XmDIALOG_HELP_BUT
- VTON));
- X XtAddCallback(progress_box, XmNcancelCallback, FindCancelCallback, N
- VULL);
- X `7D
- X
- X if (!XtIsManaged(progress_box))
- X XtManageChild(progress_box); /* pop up progress box */
- X
- X if (location->next) `7B
- X for (ptr = ident_list, count = 0; ptr != location; ptr = ptr->next)
- X if (ptr->status == uic_ident)
- X count++; /* count idents read so far */
- X pct = (count * 100) / uic_count; /* idents read as a percent */
- X if (pct != old_pct) `7B
- X old_pct = pct;
- X sprintf(str, "%d%% of identifiers searched", pct);
- X xmstr = XmStringCreateSimple(str);
- X ac = 0;
- X XtSetArg(arglist`5Bac`5D, XmNmessageString, xmstr); ac++;
- X XtSetValues(progress_box, arglist, ac);
- X XmStringFree(xmstr);
- X `7D
- X /* leave this dialog box up, call Find in 1 second */
- X progress_id = XtAppAddTimeOut(context, 1000, Find, NULL);
- X
- X `7D
- X else /* this is the last item, pop down the box */
- X XtUnmanageChild(progress_box);
- X`7D
- X
- X
- X
- X/*** Event Handlers ***/
- X
- X/*
- X * Called by mouse button and exposure events in access windows
- X */
- X
- Xstatic XtEventHandler access_handler(Widget w, XtPointer data,
- X XButtonEvent *event, Boolean *dispatch)
- X`7B
- X Cardinal wi, hour;
- X static Boolean mode;
- X
- X /* find the uai code for this event */
- X for (wi = UAI$_NETWORK_ACCESS_P;
- X widget_array`5Bwi`5D != w && wi <= UAI$_REMOTE_ACCESS_S; wi++)
- X /* just calc index */ ;
- X
- X switch (event->type) `7B
- X case Expose :
- X update_time(wi); /* update the exposed window */
- X break;
- X case ButtonPress :
- X uafdata`5Bwi`5D.changed = TRUE;
- X hour = event->x / resource_data.hour_size;
- X mode = uafdata`5Bwi`5D.idata >> hour & 1 `5E 1; /* flip current *
- V/
- X case MotionNotify: /* common code for ButtonPress, Motion */
- X hour = event->x / resource_data.hour_size;
- X XFillRectangle(event->display, event->window,
- X mode ? gc_clear : gc_draw,
- X hour * resource_data.hour_size, 0,
- X resource_data.hour_size, k_hours_height);
- X if (mode)
- X uafdata`5Bwi`5D.idata `7C= 1 << hour;
- X else
- X uafdata`5Bwi`5D.idata &= `7E(1 << hour);
- X break;
- X `7D
- X`7D
- X
- X
- X/*
- X * Called by event handler on MB3 push
- X */
- X
- Xstatic XtEventHandler popup_handler(Widget widget, Widget popup_menu,
- X XButtonPressedEvent *event, Boolean *dis
- Vpatch)
- X`7B
- X if (event->button != Button3)
- X return;
- X XmMenuPosition(popup_menu, event); /* position popup menu */
- X XtManageChild(popup_menu); /* manage it */
- X`7D
- X
- X
- X/*
- X * Called when a return is pressed in a text widget
- X */
- X
- Xstatic XtActionProc return_key(Widget widget, XKeyPressedEvent *event, `2
- V0
- X String *str, Cardinal *args)
- X`7B
- X if (widget == widget_array`5BUAI$_USERNAME`5D)
- X Read(NULL, NULL, NULL); /* read new username */
- X else if (widget == widget_array`5BUAI$_ACCOUNT`5D) `7B
- X calc_uic(); /* figure out a new uic */
- X trans_uic(uafdata`5BUAI$_UIC`5D.idata); /* in case calc_uic didn't *
- V/
- X `7D
- X`7D
- X
- X
- X/*
- X * Select menu shortcut
- X * Set up select_data index for call to Select()
- X */
- X
- Xstatic XtActionProc select_key(Widget widget, XKeyPressedEvent *event, `2
- V0
- X String *str, Cardinal *args)
- X`7B
- X Cardinal wi, si;
- X
- X /* find the widget_array index */
- X for(wi = 0; items`5Bwi`5D.code; wi++)
- X if (widget == widget_array`5Bwi`5D)
- X break;
- X /* find the select_data index */
- X for(si = 0; select_data`5Bsi`5D.code; si++)
- X if (wi == select_data`5Bsi`5D.code)
- X break;
- X /* call Select() with the index */
- X if (select_data`5Bsi`5D.code)
- X Select(NULL, &si, NULL);
- X`7D
- X
- X
- X
- X/*** Callbacks ***/
- X
- X/*
- X * Called by 'Quit' menu item
- X */
- X
- Xstatic XtCallbackProc Quit(Widget widget, XtPointer data, `20
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X exit();
- X`7D
- X
- X
- X/*
- X * Read in the uaf entry specified by username; if error, load DEFAULT
- X * Called by 'Read' menu or return_key from username text widget
- X */
- X
- Xstatic XtCallbackProc Read(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X String str;
- X
- X XDefineCursor(top_display, top_window, wait_cursor);
- X XFlush(top_display);
- X str = XmTextGetString(widget_array`5BUAI$_USERNAME`5D);
- X if (!get_record(str)) `7B
- X if (get_record("DEFAULT")) `7B
- X set_defaults(str);
- X DWPerror("Read", "Username does not exist, defaults applied",
- X resource_data.read_interval);
- X `7D
- X else
- X DWPerror("Read", "Cannot read username DEFAULT", 0);
- X `7D
- X XtFree(str);
- X XUndefineCursor(top_display, top_window);
- X`7D
- X
- X
- X/*
- X * Find the next UAF entry that matches the current criteria
- X *
- X * Note: UAF entry is defined as a UIC-type identifier.
- X * If a UAF entry does not have an identifier of the same
- X * name, it will not be searched.
- X *
- X * Called by 'Find' menu item
- X */
- X
- Xstatic XtCallbackProc Find(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X
- X /* if nothing found yet and still looking, mark time */
- X if (!found_ptr->next && find_work_proc_id) `7B
- X progress(select_ptr);
- X return;
- X `7D
- X
- X#ifdef DEBUG
- X if (!XtIsSensitive(button_array`5Bfind_button`5D)) `7B /* stray timer c
- Vallback */
- X printf("Find() callback with button insensitive\n");
- X return;
- X `7D
- X#endif
- X
- X progress(NULL); /* something is found or search done, get rid of progre
- Vss box */
- X
- X /* get next found ident and display it */
- X if (found_ptr->next) `7B
- X found_ptr = found_ptr->next;
- X get_record(found_ptr->name);
- X if (!found_ptr->next && !find_work_proc_id) `7B /* last item
- V on found list? */
- X XtSetSensitive(button_array`5Bfind_button`5D, OFF);
- X XtSetSensitive(button_array`5Bfind_menu`5D, OFF);
- X `7D
- X `7D
- X /* we get here when something allows a Find Next with nothing to get */
- X else `7B
- X#ifdef DEBUG
- X printf("This shouldn't happen, tell me\n");
- X#endif
- X XtSetSensitive(button_array`5Bfind_button`5D, OFF); /* turn off but
- Vton */
- X XtSetSensitive(button_array`5Bfind_menu`5D, OFF);
- X `7D
- X`7D
- X
- X
- X/*
- X * Update the UAF record for 'username'
- X * Called by 'Write' menu item
- X */
- X
- Xstatic XtCallbackProc Write(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X Cardinal ind, pad, item, value, status, dd, hh, mm, ss, cc,
- X holder`5B2`5D = `7B0, 0`7D;
- X ident *ptr, *prev, *next;
- X held_ident *hptr, *prev_hptr, *tmp_hptr;
- X char command`5B200`5D = "", temp`5B100`5D;
- X $DESCRIPTOR(acct_dsc, uafdata`5BUAI$_USERNAME`5D.sdata);
- X
- X XDefineCursor(top_display, top_window, wait_cursor);
- X XFlush(top_display);
- X
- X /* make sure uafdata`5Buai$_uic`5D.idata matches the text */
- X if (!parse_uic(UAI$_UIC)) /* if not good uic */
- X uafdata`5BUAI$_UIC`5D.idata = 0; /* force error */
- X `20
- X if (!strlen(uafdata`5BUAI$_OWNER`5D.sdata) `7C`7C
- X !strncmp(uafdata`5BUAI$_ACCOUNT`5D.sdata, "DEFAULT", 7) `7C`7C
- X !strncmp(uafdata`5BUAI$_DEFDIR`5D.sdata, "`5BUSER`5D", 6) `7C`7C
- X !strlen(unpad(uafdata`5BUAI$_DEFDEV`5D.sdata)) `7C`7C
- X !strlen(unpad(uafdata`5BUAI$_DEFDIR`5D.sdata)) `7C`7C
- X !uafdata`5BUAI$_UIC`5D.idata) `7B
- X DWPerror("Write","Bad Owner, Account, UIC or Directory name", 0)
- V;
- X XUndefineCursor(top_display, top_window);
- X return;
- X `7D
- X /* item code UAI$_USERNAME is never used by sys$setuai */
- X if (uafdata`5BUAI$_USERNAME`5D.changed) `7B
- X if (uafdata`5BUAI$_USERNAME`5D.sdata`5B0`5D &&
- X uafdata`5BUAI$_UIC`5D.idata) `7B /* create a new user */
- X sprintf(temp, "$ UAF ADD %s/UIC=%s", uafdata`5BUAI$_USERNAME`5D.
- Vsdata,
- X uafdata`5BUAI$_UIC`5D.sdata);
- X strcpy(command, temp);
- X uafdata`5BUAI$_USERNAME`5D.changed = FALSE;
- X uafdata`5BUAI$_UIC`5D.changed = FALSE;
- X if (uafdata`5BUAI$_ACCOUNT`5D.sdata`5B0`5D) `7B
- X sprintf(temp, "/ACCOUNT=%s", uafdata`5BUAI$_ACCOUNT`5D.sdata
- V);
- X strcat(command, temp);
- X uafdata`5BUAI$_ACCOUNT`5D.changed = FALSE;
- X `7D
- X if (uafdata`5BUAI$_PWD`5D.sdata`5B0`5D) `7B
- X sprintf(temp, "/PASSWORD=%s", uafdata`5BUAI$_PWD`5D.sdata);
- X strcat(command, temp);
- X uafdata`5BUAI$_PWD`5D.changed = FALSE;
- X `7D
- X spawn_dcl(command);
- X `7D
- X else `7B
- X DWPerror("Write","No username or no UIC", 0);
- X XUndefineCursor(top_display, top_window);
- X return;
- X `7D
- X `7D
- X else `7B
- X /* check for password change; is setuai able to do this now? */
- X if (uafdata`5BUAI$_PWD`5D.changed &&
- X uafdata`5BUAI$_USERNAME`5D.sdata`5B0`5D &&
- X uafdata`5BUAI$_PWD`5D.sdata`5B0`5D) `7B
- X sprintf(temp, "$ UAF MODIFY %s/PASSWORD=%s\n",
- X uafdata`5BUAI$_USERNAME`5D.sdata, uafdata`5BUAI$_PWD`5D.
- Vsdata);
- X strcat(command, temp);
- X uafdata`5BUAI$_PWD`5D.changed = FALSE;
- X `7D
- X /* check for device/directory change; the directory tree needs to be
- V moved */
- X if ((uafdata`5BUAI$_DEFDEV`5D.changed && strlen(uafdata`5BUAI$_DEFDE
- VV`5D.sdata))
- X `7C`7C (uafdata`5BUAI$_DEFDIR`5D.changed && strlen(uafdata`5BUAI
- V$_DEFDIR`5D.sdata))) `7B
- X sprintf(temp, "$ @DWPUID:MOVE_DIRECTORY %s %s %s %s\n",
- X unpad(uafdata`5BUAI$_DEFDEV`5D.odata),
- X unpad(uafdata`5BUAI$_DEFDIR`5D.odata),
- X unpad(uafdata`5BUAI$_DEFDEV`5D.sdata),
- X unpad(uafdata`5BUAI$_DEFDIR`5D.sdata));
- X strcat(command, temp);
- X /* update the old values */
- X strcpy(uafdata`5BUAI$_DEFDEV`5D.odata, unpad(uafdata`5BUAI$_DEFD
- VEV`5D.sdata));
- X strcpy(uafdata`5BUAI$_DEFDIR`5D.odata, unpad(uafdata`5BUAI$_DEFD
- VIR`5D.sdata));
- X `7D
- X /* check for UIC change; old identifier must be deleted, new ident
- V created */
- X /* let authorize handle it. new UIC will be added to idents list be
- Vlow */
- X if (uafdata`5BUAI$_UIC`5D.changed &&
- X uafdata`5BUAI$_UIC`5D.idata) `7B
- X sprintf(temp, "$ UAF MODIFY %s/UIC=%s\n",
- X uafdata`5BUAI$_USERNAME`5D.sdata, uafdata`5BUAI$_UIC`5D.
- Vsdata);
- X strcat(command, temp);
- X uafdata`5BUAI$_UIC`5D.changed = FALSE;
- X sprintf(temp, "$ @DWPUID:RESETOWNER %s%s %s\n",
- X unpad(uafdata`5BUAI$_DEFDEV`5D.sdata),
- X unpad(uafdata`5BUAI$_DEFDIR`5D.sdata),
- X uafdata`5BUAI$_USERNAME`5D.sdata);
- X strcat(command, temp);
- X `7D
- X /* any of these generated a DCL command? */
- X if (strlen(command))
- X spawn_dcl(command);
- X `7D
- X item = 0;
- X for (ind = 0; value = items`5Bind`5D.code; ind++) `7B
- X if (value && uafdata`5Bvalue`5D.changed) `7B
- X uafdata`5Bvalue`5D.changed = FALSE;
- X itmlst`5Bitem`5D.itmcode = value;
- X itmlst`5Bitem`5D.buflen = items`5Bind`5D.size;
- X switch (items`5Bind`5D.type) `7B
- X case DWP_LALPHA: /* if it's been changed, it has no length byte
- V */
- X if (value == UAI$_DEFDIR && strlen(uafdata`5Bvalue`5D.sdata)
- V) `7B
- X if (uafdata`5Bvalue`5D.sdata`5B0`5D != '`5B') `7B
- X sprintf(temp, "`5B%s", uafdata`5Bvalue`5D.sdata);
- X strcpy(uafdata`5Bvalue`5D.sdata, temp);
- X `7D
- X if (uafdata`5Bvalue`5D.sdata`5Bstrlen(uafdata`5Bvalue`5D
- V.sdata)-1`5D
- X != '`5D')
- X strcat(uafdata`5Bvalue`5D.sdata, "`5D"); /* dir h
- Vas `5B`5D */
- X `7D
- X if (value == UAI$_DEFDEV &&
- X strlen(uafdata`5Bvalue`5D.sdata) &&
- X uafdata`5Bvalue`5D.sdata`5Bstrlen(uafdata`5Bvalue`5D
- V.sdata)-1`5D
- X != ':')
- X strcat(uafdata`5Bvalue`5D.sdata, ":"); /* ends with '
- V:' */
- X strcpy(temp, uafdata`5Bvalue`5D.sdata);
- X uafdata`5Bvalue`5D.sdata`5B0`5D = strlen(temp); /* make le
- Vngth byte */
- X for (pad = strlen(temp); pad < items`5Bind`5D.size; pad++)
- X temp`5Bpad`5D = ' '; /* pad with spaces, no null */
- X strncpy(&uafdata`5Bvalue`5D.sdata`5B1`5D, temp, items`5Bind`
- V5D.size);
- X itmlst`5Bitem`5D.bufadr = uafdata`5Bvalue`5D.sdata;
- X break;
- X case DWP_ALPHA: /* account */
- X for (pad = 0; pad < items`5Bind`5D.size && uafdata`5Bvalue`5
- VD.sdata`5Bpad`5D;)
- X pad++; /* skip over string */
- X for (; pad < items`5Bind`5D.size; pad++)
- X uafdata`5Bvalue`5D.sdata`5Bpad`5D = ' '; /* pad with spa
- Vces, no null */
- X case DWP_PRIV: /* common code for all alphabetic, priv */
- X itmlst`5Bitem`5D.bufadr = uafdata`5Bvalue`5D.sdata;
- X break;
- X case DWP_INT:
- X sscanf(uafdata`5Bvalue`5D.sdata, "%d", &uafdata`5Bvalue`5D.i
- Vdata);
- X case DWP_TIME: /* these have correct data in .idata */
- X case DWP_FLAG:
- X case DWP_PRIME:
- X itmlst`5Bitem`5D.bufadr = &uafdata`5Bvalue`5D.idata;
- X break;
- X case DWP_CPU:
- X dd = hh = mm = ss = cc = 0;
- X status = sscanf(uafdata`5Bvalue`5D.sdata, "%d %02d:%02d:%02d
- V.%02d",
- X &dd, &hh, &mm, &ss, &c
- Vc);
- X if (status < 4) `7B /* try hh:mm:ss */
- X dd = hh = mm = ss = cc = 0;
- X status = sscanf(uafdata`5Bvalue`5D.sdata, "%02d:%02d:%02
- Vd.%02d",
- X &hh, &mm, &ss, &
- Vcc);
- X `7D
- X if (status < 3) `7B /* try mm:ss */
- X dd = hh = mm = ss = cc = 0;
- X status = sscanf(uafdata`5Bvalue`5D.sdata, "%02d:%02d.%02
- Vd",
- X &mm, &ss, &cc);
- X `7D
- X if (status < 2) `7B /* try ss */
- X dd = hh = mm = ss = cc = 0;
- X status = sscanf(uafdata`5Bvalue`5D.sdata, "%d.%02d",
- X &ss, &cc);
- X `7D
- X uafdata`5Bvalue`5D.idata = dd * 8640000 + hh * 360000 +
- X mm * 6000 + ss * 100 + cc;
- X itmlst`5Bitem`5D.bufadr = &uafdata`5Bvalue`5D.idata;
- X break;
- X case DWP_DATE: `7B
- X /* This one's kinda tricky, .sdata can contain a 64-bit */
- X /* system time or a string. At this point it should contain
- V */
- X /* a string, since .changed is set only in WidgetChanged */
- X if (parse_date(value))
- X itmlst`5Bitem`5D.bufadr = &uafdata`5Bvalue`5D.sdata;
- X else `7B
- X DWPerror("Write","Illegal date format", 0);
- X --item;
- X `7D
- X break;
- X `7D
- X case DWP_UIC:
- X itmlst`5Bitem`5D.bufadr = &uafdata`5Bvalue`5D.idata;
- X break;
- X `7D
- X itmlst`5Bitem`5D.retadr = 0;
- X item++;
- X `7D
- X `7D
- X itmlst`5Bitem`5D.itmcode = itmlst`5Bitem`5D.buflen = 0; /* end the li
- Vst */
- X acct_dsc.dsc$w_length = strlen(uafdata`5BUAI$_USERNAME`5D.sdata);
- X if (item) `7B
- X status = sys$setuai(0, 0, &acct_dsc, &itmlst, 0, 0, 0);
- V `20
- X if (status != SS$_NORMAL)
- X DWPmsg("Write/SETUAI", status);
- X else
- X DWPerror("Write", "SETUAI successful", resource_data.write_inter
- Vval);
- X `7D
- X update_strings(); /* undo the padding of strings done above */
- X
- X holder`5B0`5D = uafdata`5BUAI$_UIC`5D.idata;
- X for (hptr = held_list, prev_hptr = NULL; hptr;) `7B
- X tmp_hptr = NULL;
- X switch (hptr->status) `7B
- X case add_ident: /* ident flagged for pending add */
- X status = sys$add_holder(hptr->identifier, &holder, 0);
- X if (status != SS$_NORMAL)
- X DWPmsg("Write/ADD_HOLDER", status);
- X else
- X DWPerror("Write","ADD_HOLDER successful", resource_data.writ
- Ve_interval);
- X hptr->status = original; /* ident is now permanently held */
- X break;
- X case del_orig: /* ident flagged for pending delete */
- X status = sys$rem_holder(hptr->identifier, &holder);
- X if (status != SS$_NORMAL)
- X DWPmsg("Write/REM_HOLDER", status);
- X else
- X DWPerror("Write","REM_HOLDER successful", resource_data.writ
- Ve_interval);
- X if (prev_hptr)
- X prev_hptr->next = hptr->next; /* remove node from list */
- X else
- X held_list = hptr->next;
- X tmp_hptr = hptr;
- X break;
- X case original: /* originally held id, no need to add it again */
- X break;
- X `7D
- X prev_hptr = hptr;
- X hptr = hptr->next;
- X if (tmp_hptr)
- X XtFree(tmp_hptr);
- X `7D
- X
- X /* add identifier to list */
- X for (ptr = ident_list, prev = NULL; ptr; prev = ptr, ptr = ptr->next
- V)
- X if (strcmp(ptr->name, uafdata`5BUAI$_USERNAME`5D.sdata) >= 0) br
- Veak;
- X /* if ptr = 0, no identifier was higher than username
- X if strcmp > 0, ptr->name is the next higher name
- X if strcmp = 0, names matched; don't insert
- X */
- X if (!ptr `7C`7C strcmp(ptr->name, uafdata`5BUAI$_USERNAME`5D.sdata))
- V `7B
- X next = ptr;
- X ptr = XtNew(ident);
- X if (prev)
- X prev->next = ptr;
- X else
- X ident_list = ptr;
- X ptr->name = XtNewString(uafdata`5BUAI$_USERNAME`5D.sdata);
- X ptr->next = next;
- X ptr->identifier = uafdata`5BUAI$_UIC`5D.idata;
- X ptr->status = uic_ident;
- X uic_count++;
- X `7D
- X /* add group identifier to list */
- X for (ptr = ident_list, prev = NULL; ptr; prev = ptr, ptr = ptr->next
- V)`20
- X if (strcmp(ptr->name, uafdata`5BUAI$_ACCOUNT`5D.sdata) >= 0) bre
- Vak;
- X if (!ptr `7C`7C strcmp(ptr->name, uafdata`5BUAI$_ACCOUNT`5D.sdata))
- V `7B
- X next = ptr;
- X ptr = XtNew(ident);
- X if (prev)
- X prev->next = ptr;
- X else
- X ident_list = ptr;
- X ptr->name = XtNewString(uafdata`5BUAI$_ACCOUNT`5D.sdata);
- X ptr->next = next;
- X ptr->identifier = (uafdata`5BUAI$_UIC`5D.idata `7C 0xFFFF);
- X ptr->status = account;
- X account_count++;
- X if (accounts_box && XtIsManaged(accounts_box)) `7B
- X build_accounts(); /* reload accounts info */
- X `7D
- X `7D
- X
- X XUndefineCursor(top_display, top_window);
- X`7D
- X
- X
- X/*
- X * Delete a UAF record
- X * Called by 'Remove' menu item
- X */
- X
- Xstatic XtCallbackProc Remove(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X Cardinal ac;
- X Arg arglist`5B5`5D;
- X char msg`5B30`5D;
- X XmString xmstr;
- X String str;
- X static Widget caution_box = NULL;
- X
- X str = XmTextGetString(widget_array`5BUAI$_USERNAME`5D);
- X strcpy(msg, str);
- X XtFree(str);
- X if (!get_record(msg)) `7B
- X sprintf(msg, "User %s doesn't exist", uafdata`5BUAI$_USERNAME`5D.sda
- Vta);
- X DWPerror("Remove", msg, 0);
- X return;
- X `7D
- X if (!caution_box) `7B
- X ac = 0;
- X xmstr = XmStringCreateSimple("DWProfile: Remove");
- X XtSetArg(arglist`5Bac`5D, XmNdialogTitle, xmstr); ac++;
- X XtSetArg(arglist`5Bac`5D, XmNdialogStyle, XmDIALOG_APPLICATION_MODAL
- V); ac++;
- X caution_box = XmCreateWarningDialog(dwprofile_main, "caution_box", a
- Vrglist, ac);
- X XmStringFree(xmstr);
- X XtUnmanageChild(XmMessageBoxGetChild(caution_box, XmDIALOG_HELP_BUTT
- VON));
- X XtAddCallback(caution_box, XmNokCallback, CautionCallback, NULL);
- X `7D
- X ac = 0;
- X sprintf(msg, "Remove user %s?", uafdata`5BUAI$_USERNAME`5D.sdata);
- X xmstr = XmStringCreateSimple(msg);
- X XtSetArg(arglist`5Bac`5D, XmNmessageString, xmstr); ac++;
- X XtSetValues(caution_box, arglist, ac);
- X XmStringFree(xmstr);
- X XtManageChild(caution_box); /* popup modal caution box */
- X`7D
- X
- X
- X/*
- X * Issue REMOVE UAF command if OK button pressed in caution box
- X */
- X
- Xstatic XtCallbackProc CautionCallback(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X char command`5B20`5D;
- X
- X XtUnmanageChild(widget);
- X XDefineCursor(top_display, top_window, wait_cursor);
- X XFlush(top_display);
- X if (reason->reason == XmCR_OK
- X && uafdata`5BUAI$_USERNAME`5D.sdata`5B0`5D) `7B
- X sprintf(command, "$ UAF REMOVE %s", uafdata`5BUAI$_USERNAME`5D.sdata
- V);
- X spawn_dcl(command);
- X get_record("");
- X `7D
- X XUndefineCursor(top_display, top_window);
- X`7D
- X
- X
- X/*
- X * Remove the error message widget when ack'ed or timed out
- X */
- X
- Xstatic XtTimerCallbackProc MessageCallback(Widget widget, XtPointer data)
- X`7B
- X XtUnmanageChild(widget); /* popdown message box */
- X XtRemoveTimeOut(timeout_id); /* clear out timer */
- X`7D
- X
- X
- X/*
- X * Stop the idents work proc when 'reading idents' WorkingDialog widget is
- V cancelled
- X */
- X
- Xstatic XtCallbackProc IdentsCancelCallback(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X XtRemoveWorkProc(idents_work_proc_id);
- X idents_work_proc_id = (XtWorkProcId) 0;
- X`7D
- X
- X
- X/*
- X * Stop find() when 'find progress' WorkingDialog widget is cancelled
- X */
- X
- Xstatic XtCallbackProc FindCancelCallback(Widget widget, XtPointer data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X XtRemoveWorkProc(find_work_proc_id);
- X find_work_proc_id = (XtWorkProcId) 0;
- X if (progress_id) `7B
- X XtRemoveTimeOut(progress_id); /* cancel pending timeout */
- X progress_id = (XtIntervalId) 0;
- X `7D
- X
- X if (!found_ptr->next) `7B /* nothing left on found list? */
- X XtSetSensitive(button_array`5Bfind_button`5D, OFF);
- X XtSetSensitive(button_array`5Bfind_menu`5D, OFF);
- X `7D
- X`7D
- X
- X
- X/*
- X * Pop up (or remove) the access dialog box
- X * Called by 'Access' menu item
- X */
- X
- Xstatic XtCallbackProc Access(Widget widget, XtPointer data,
- X XmToggleButtonCallbackStruct *reason)
- X`7B
- X Cardinal wi, ac;
- X Arg arglist`5B2`5D;
- X
- X if (!access_box) `7B
- X if ((MrmFetchWidget(Hierarchy, "access_box", toplevel,
- X &access_box, &class)) != MrmSUCCESS)
- X XtAppError(context, "Error Fetching Access main widget");
- X /* adjust drawing area using hourSize resource */
- X for (wi = UAI$_NETWORK_ACCESS_P; wi <= UAI$_REMOTE_ACCESS_S; wi++) `
- V7B
- X ac = 0;
- X XtSetArg(arglist`5Bac`5D, XmNwidth, resource_data.hour_size * 24
- V); ac++; `20
- X if (widget_array`5Bwi`5D)
- X XtSetValues(widget_array`5Bwi`5D, arglist, ac);
- X `7D
- X `7D
- X if (XtIsManaged(access_box)) `7B
- X XtUnmanageChild(access_box);
- X XmToggleButtonSetState(button_array`5Baccess_menu`5D, OFF, NO);
- X `7D
- X else `7B
- X XtManageChild(access_box);
- X XmToggleButtonSetState(button_array`5Baccess_menu`5D, ON, NO);
- X update_prime(); /* may not have existed */
- X set_handlers(); /* set window event handlers */
- X `7D
- X`7D
- X
- X
- X/*
- X * Pop up (or remove) the privs dialog box
- X * Called by 'Privs' menu item
- X */
- X
- Xstatic XtCallbackProc Privs(Widget widget, XtPointer data,
- X XmToggleButtonCallbackStruct *reason)
- X`7B
- X if (!privs_box)
- X if ((MrmFetchWidget(Hierarchy, "privs_box", toplevel,
- X &privs_box, &class)) != MrmSUCCESS)
- X XtAppError(context, "Error Fetching Privs main widget");
- X if (XtIsManaged(privs_box)) `7B
- X XtUnmanageChild(privs_box);
- X XmToggleButtonSetState(button_array`5Bprivs_menu`5D, OFF, NO);
- X `7D
- X else `7B
- X XtManageChild(privs_box);
- X XmToggleButtonSetState(button_array`5Bprivs_menu`5D, ON, NO);
- X update_privs(); /* may not have existed */
- X `7D
- X`7D
- X
- X
- X/*
- X * Activation callback on Select menu item
- X * also called by select_key()
- X * widget, reason not referenced
- X */
- X
- Xstatic XtCallbackProc Select(Widget widget, int *data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X Cardinal ind, ac;
- X Arg arglist`5B10`5D;
- X ident *ptr, *tptr;
- X char str`5B80`5D;
- X XmString xmstr;
- X
- X if (found_list.next `7C`7C *data < 100) `7B /* skip if 100 and nothing
- V on list */
- X XtSetSensitive(button_array`5Bfind_button`5D, ON); /* 'find' button
- V is now active */
- X XtSetSensitive(button_array`5Bfind_menu`5D, ON); /* 'find' menu i
- Vtem is now active */
- X `7D
- X if (*data == 100) `7B /* 100 means re-enable found_list */
- X found_ptr = &found_list;
- X return;
- X `7D
- X
- X sprintf(str, "Reset %s search", select_data`5B*data`5D.name);
- X xmstr = XmStringCreateSimple(str);
- X ac = 0;
- X XtSetArg(arglist`5Bac`5D, XmNlabelString, xmstr); ac++;
- X XtSetArg(arglist`5Bac`5D, XmNsensitive, TRUE); ac++;
- X XtSetValues(button_array`5Brestart_button`5D, arglist, ac);
- X XmStringFree(xmstr);
- X
- X for (ptr = found_list.next; ptr;) `7B /* free old found list */
- X XtFree(ptr->name);
- X tptr = ptr;
- X ptr = ptr->next;
- X XtFree(tptr);
- X `7D
- X select_index = *data; /* which field to match */
- X if (select_string)
- X XtFree(select_string); /* free memory used by old string */
- X switch (select_data`5B*data`5D.type) `7B
- X case DWP_ALPHA: /* username, account */
- X case DWP_LALPHA: /* other text fields */
- X case DWP_UIC: /* use the text of UIC */
- X /* we could parse_dev(), parse_dir(), etc. here to ensure match */
- X select_string = XtNewString(unpad(uafdata`5Bselect_data`5B*data`5D.c
- Vode`5D.sdata));
- X break;
- X case DWP_DATE: /* pwdlifetime, expiration; text string or 64 bit date *
- V/
- X if (uafdata`5Bselect_data`5B*data`5D.code`5D.changed) /* text was e
- Vntered */
- X if (!parse_date(select_data`5B*data`5D.code)) /* convert text t
- Vo binary */
- X DWPerror("Select","Illegal date format", 0);
- X select_string = XtMalloc(select_data`5B*data`5D.size);
- X memcpy(select_string, uafdata`5Bselect_data`5B*data`5D.code`5D.sdata
- V,
- X select_data`5B*data`5D.size);
- X break;
- X default:
- X select_string = XtNewString(""); /* so find_work_proc won't blow up
- V */
- X `7D
- X select_ptr = found_add = NULL; /* restart find from the beginning */
- X found_list.next = NULL;
- X found_ptr = &found_list;
- X if (find_work_proc_id) /* is there one going on now? */
- X XtRemoveWorkProc(find_work_proc_id); /* stop it */
- X find_work_proc_id = XtAppAddWorkProc(context, find_work_proc, NULL);
- X /* note: to be run first, read_identifiers must be called after AppAddWo
- VrkProc */
- X read_identifiers(FALSE); /* set up ident_list if necessary */
- X`7D
- X
- X
- X/*
- X * Creation callback; save the widget using the UAI code as the index
- X */
- X
- Xstatic XtCallbackProc WidgetCreated(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X widget_array`5B*data`5D = widget;
- X`7D
- X
- X
- X/*
- X * Creation callback; save the save menu button widget in button_array
- X */
- X
- Xstatic XtCallbackProc ButtonCreated(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X button_array`5B*data`5D = widget;
- X`7D
- X
- X
- X/*
- X * Called whenever a key is pressed in a text widget
- X */
- X
- Xstatic XtCallbackProc WidgetChanged(Widget widget, XtPointer data,
- X XmTextVerifyCallbackStruct *reason)
- X`7B
- X String str;
- X Cardinal pos;
- X
- X if (setting_widgets) return;
- X pos = XmTextGetInsertionPosition(widget);
- X str = XmTextGetString(widget);
- X uafdata`5B*data`5D.changed = TRUE; /* element has changed */
- X if (*data != UAI$_OWNER)
- X uppercase(str);
- X strcpy(uafdata`5B*data`5D.sdata, str);
- X setting_widgets = TRUE; /* Don't allow recursion */
- X XmTextSetString(widget, str);
- X XmTextSetInsertionPosition(widget, pos);
- X setting_widgets = FALSE;
- X XtFree(str);
- X`7D
- X
- X
- X/*
- X * Called when flag toggle button is created
- X */
- X
- Xstatic XtCallbackProc FlagsCreated(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X flags_array`5B*data`5D = widget;
- X`7D
- X
- X
- X/*
- X * Called whenever a flag toggle button is pressed
- X */
- X
- Xstatic XtCallbackProc FlagsChanged(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X if (setting_flags) return;
- X uafdata`5BUAI$_FLAGS`5D.changed = TRUE; /* element has changed */
- X uafdata`5BUAI$_FLAGS`5D.idata `5E= 1 << *data; /* toggle flag bit */
- X`7D
- X
- X
- X/*
- X * Called when a primary day toggle button is created
- X */
- X
- Xstatic XtCallbackProc PrimeCreated(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X prime_array`5B*data`5D = widget;
- X`7D
- X
- X
- X/*
- X * Called whenever a prime day toggle button is pressed
- X */
- X
- Xstatic XtCallbackProc PrimeChanged(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X if (setting_prime) return;
- X uafdata`5BUAI$_PRIMEDAYS`5D.changed = TRUE; /* element has change
- Vd */
- X uafdata`5BUAI$_PRIMEDAYS`5D.idata `5E= 1 << *data; /* toggle bit in p
- Vrimedays */
- X`7D
- X
- X
- X/*
- X * Called when a privs toggle button is created
- X */
- X
- Xstatic XtCallbackProc PrivsCreated(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X privs_array`5B*data`5D = widget;
- X`7D
- X
- X
- X/*
- X * Called whenever a privs toggle button is pressed
- X */
- X
- Xstatic XtCallbackProc PrivsChanged(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X if (setting_privs) return;
- X if (*data < PRIVS_BIAS) `7B
- X uafdata`5BUAI$_PRIV`5D.sdata`5B*data >> 3`5D `5E= 1 << (*data & 7);
- X uafdata`5BUAI$_PRIV`5D.changed = TRUE; /* element has changed */
- X `7D
- X else `7B
- X uafdata`5BUAI$_DEF_PRIV`5D.sdata`5B(*data - PRIVS_BIAS) >> 3`5D `5E=
- X 1 << (*data - PRIVS_BIAS & 7);
- X uafdata`5BUAI$_DEF_PRIV`5D.changed = TRUE;
- X `7D
- X`7D
- X
- X
- X/*
- X * Read selection box widget to get account name
- X * Create new UIC
- X */
- X
- Xstatic XtCallbackProc AccountChanged(Widget widget, XtPointer data,
- X XmSelectionBoxCallbackStruct *reason)
- X`7B
- X String str;
- X Cardinal ind;
- X
- X if (reason->reason == XmCR_CANCEL) `7B
- X XmTextSetString(widget_array`5BUAI$_ACCOUNT`5D, "");
- X uafdata`5BUAI$_ACCOUNT`5D.changed = TRUE;
- X strcpy(uafdata`5BUAI$_ACCOUNT`5D.sdata, "");
- X return;
- X `7D
- X
- X XmStringGetLtoR(reason->value, XmSTRING_DEFAULT_CHARSET, &str);
- X XmTextSetString(widget_array`5BUAI$_ACCOUNT`5D, str);
- X uafdata`5BUAI$_ACCOUNT`5D.changed = TRUE;
- X strcpy(uafdata`5BUAI$_ACCOUNT`5D.sdata, str);
- X uppercase(uafdata`5BUAI$_ACCOUNT`5D.sdata);
- X XtFree(str);
- X strcpy(uafdata`5BUAI$_UIC`5D.sdata, "`5B0,0`5D"); /* force UIC recalc
- V */
- X calc_uic();
- X trans_uic(uafdata`5BUAI$_UIC`5D.idata);
- X`7D
- X
- X
- X/*
- X * Called by 'Read Identifiers' menu item
- X */
- X
- Xstatic XtCallbackProc ReadIdentifiers(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X read_identifiers(TRUE);
- X`7D
- X
- X
- X/*
- X * Pop up accounts selection box widget
- X * Called by 'Accounts' menu item
- X */
- X
- Xstatic XtCallbackProc Accounts(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X Cardinal ac;
- X Arg arglist`5B5`5D;
- X XmString xmstr;
- X
- X /* make accounts_box */
- X /* this could be fetched from a UID file, but it's easier here */
- X if (!accounts_box) `7B
- X ac = 0;
- X xmstr = XmStringCreateSimple("DWProfile: Accounts");
- X XtSetArg(arglist`5Bac`5D, XmNdialogTitle, xmstr); ac++;
- X`09XtSetArg(arglist`5Bac`5D, XmNdefaultPosition, FALSE); ac++;
- X accounts_box = XmCreateSelectionDialog(toplevel, "accounts_box", arg
- Vlist, ac);
- X XmStringFree(xmstr);
- X XtAddCallback(accounts_box, XmNapplyCallback, AccountChanged, NULL);
- X XtAddCallback(accounts_box, XmNhelpCallback, Help, "menus windows ac
- Vcounts");
- X XtUnmanageChild(XmSelectionBoxGetChild(accounts_box, XmDIALOG_OK_BUT
- VTON));
- X XtUnmanageChild(XmSelectionBoxGetChild(accounts_box, XmDIALOG_CANCEL
- V_BUTTON));
- X `7D
- X if (XtIsManaged(accounts_box)) `7B
- X XtUnmanageChild(accounts_box);
- X XmToggleButtonSetState(button_array`5Baccounts_menu`5D, OFF, NO);
- X return;
- X `7D
- X XtManageChild(accounts_box);
- X XmToggleButtonSetState(button_array`5Baccounts_menu`5D, ON, NO);
- X if (ident_list)
- X build_accounts(); /* build list from idents */
- X else
- X read_identifiers(FALSE); /* get idents, build list when done */
- X`7D
- X
- X
- X/*
- X * Pop up (or remove) the idents dialog box
- X * Called by 'Idents' menu item
- X */
- X
- Xstatic XtCallbackProc Idents(Widget widget, XtPointer data,
- X XmAnyCallbackStruct *reason)
- X`7B
- X if (!idents_box)
- X if ((MrmFetchWidget(Hierarchy, "idents_box", toplevel,
- X &idents_box, &class)) != MrmSUCCESS)
- X XtAppError(context, "Error Fetching Idents main widget");
- X if (XtIsManaged(idents_box)) `7B
- X XtUnmanageChild(idents_box);
- X XmToggleButtonSetState(button_array`5Bidents_menu`5D, OFF, NO);
- X return;
- X `7D
- X XtManageChild(idents_box);
- X XmToggleButtonSetState(button_array`5Bidents_menu`5D, ON, NO);
- X if (ident_list)
- X update_held(); /* build list from idents */
- X else
- X read_identifiers(FALSE); /* get idents, build list when done */
- X`7D
- X
- X
- X/*
- X * Add (or remove) the identifier for the user
- X * Called by selecting identifier from list box
- X */
- X
- Xstatic XtCallbackProc ListSelect(Widget widget, XtPointer data,
- X XmListCallbackStruct *list)
- X`7B
- X Cardinal count, ind;
- X ident *ptr;
- X held_ident *hptr, *prev_hptr, *tmp_hptr;
- X String str;
- X
- X switch(*data) `7B
- X case k_widget_all_list:
- X XmStringGetLtoR(list->item, XmSTRING_DEFAULT_CHARSET, &str);
- X /* find the identifier that matches the selected item */
- X for (ptr = ident_list; ptr; ptr = ptr->next)
- X if (!strcmp(ptr->name, str)) break;
- X XtFree(str);
- X for (hptr = held_list, prev_hptr = NULL; hptr; prev_hptr = hptr, hpt
- Vr = hptr->next) /* find deleted id or end */
- X if (hptr->identifier == ptr->identifier) break;
- X if (!hptr) `7B /* not in held list, make new node */
- X hptr = XtNew(held_ident);
- X hptr->name = XtNewString(ptr->name);
- X hptr->identifier = NULL;
- X hptr->next = NULL;
- X if (prev_hptr)
- X prev_hptr->next = hptr; /* point prev node to new node */
- X else
- X held_list = hptr; /* or start list with first new nod
- Ve */
- X `7D
- X if (!hptr->identifier) `7B
- X hptr->status = add_ident; /* not found */
- X hptr->identifier = ptr->identifier;
- X `7D
- X else
- X hptr->status = original; /* orig ident deleted then added back *
- V/
- X break;
- X case k_widget_held_list:
- X count = 0;
- X for (hptr = held_list, prev_hptr = NULL; hptr;) `7B
- X tmp_hptr = NULL;
- X if (hptr->status == original `7C`7C
- X hptr->status == add_ident) count++;
- X if (count == list->item_position) `7B /* is this the list item
- V selected ? */
- X if (hptr->status == add_ident) `7B /* if this is a pending
- V add */
- X if (prev_hptr) /* remove it from held_lis
- Vt */
- X prev_hptr->next = hptr->next;
- X else
- X held_list = hptr->next;
- X tmp_hptr = hptr; /* and flag it for delete
- V */
- X `7D
- X hptr->status = del_orig; /* original ident marked for remova
- Vl */
- X break;
- X `7D
- X prev_hptr = hptr;
- X hptr = hptr->next;
- X if (tmp_hptr)
- X XtFree(tmp_hptr);
- X `7D
- X break;
- X `7D
- X update_held();
- X`7D
- X
- X`20
- X/*
- X * Activation callback on a help menu or help callback
- X */
- X
- Xstatic XtCallbackProc Help(Widget widget, String data,
- X XmPushButtonCallbackStruct *reason)
- X`7B
- X
- X Cardinal ac;
- X Arg arglist`5B10`5D;
- X XmString appname, glossarytopic, overviewtopic, libspec, topic;
- X static Widget help_box = NULL;
- X Widget temp_help_box;
- X
- X if (!strcmp(data, "context")) `7B
- X /* context sensitive help mode, we'll get back here via helpcallback
- V */
- X DXmHelpOnContext(toplevel, FALSE);`09
- X return;
- X `7D
- X
- X topic = XmStringCreateSimple(data);
- X
- X if (!help_box `7C`7C XtIsManaged(help_box)) `7B
- X /* We're going to create a help widget */
- X ac = 0;
- X appname = XmStringCreateSimple("DWProfile");
- X overviewtopic = XmStringCreateSimple("overview");
- X libspec = XmStringCreateSimple(HELP_LIBRARY);
- X XtSetArg(arglist`5Bac`5D, DXmNapplicationName, appname); ac++;
- X XtSetArg(arglist`5Bac`5D, DXmNoverviewTopic, overviewtopic); ac++;
- X XtSetArg(arglist`5Bac`5D, DXmNlibrarySpec, libspec); ac++;
- X `7D
- X
- X if (!help_box) `7B /* create the help box */
- X help_box = DXmCreateHelpDialog (toplevel, "help_box", arglist, ac);
- X XmStringFree(appname);
- X XmStringFree(overviewtopic);
- X XmStringFree(libspec);
- X `7D
- X
- +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-
- --
- Bruce Tanner (310) 860-2451 x 596 Tanner@Cerritos.EDU
- Cerritos College Norwalk, CA DoD #0161 NOMAD #007
-