summaryrefslogtreecommitdiff
path: root/usr/src/cmd/fmli/wish/global.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/fmli/wish/global.c')
-rw-r--r--usr/src/cmd/fmli/wish/global.c627
1 files changed, 0 insertions, 627 deletions
diff --git a/usr/src/cmd/fmli/wish/global.c b/usr/src/cmd/fmli/wish/global.c
deleted file mode 100644
index 4ba5dededf..0000000000
--- a/usr/src/cmd/fmli/wish/global.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/* Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
-/* All Rights Reserved */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h> /* for glob_time() */
-#include "wish.h"
-#include "token.h"
-#include "slk.h"
-#include "actrec.h"
-#include "ctl.h"
-#include "terror.h"
-#include "moremacros.h"
-#include "message.h"
-
-#define MAX_OBJNAME 15
-
-/*
- * Caution: MAX_ARGS is defined in other files and should ultimately reside
- * in wish.h
- */
-#define MAX_ARGS 25
-
-static char Objtype[MAX_OBJNAME];
-char Release[] = "FMLI Release 4.0 (id=K18.2)";
-
-/* The global stream handler. Handles most tokens */
-
-int Arg_count;
-char *Args[MAX_ARGS];
-
-/* some strings that are used several times in this source file */
-
-static char Open[] = "OPEN";
-static char Menu[] = "MENU";
-static char Form[] = "FORM";
-static char Text[] = "TEXT";
-static char Any[] = "Any";
-static char Extra_args[] = "Extra arguments ignored";
-
-char *path_to_full();
-struct actrec *window_arg(), *wdw_to_ar();
-extern time_t time(); /* EFT abs k16 */
-extern struct tm *localtime(); /* abs k16 */
-
-static char *cur_path(void);
-static token gotoarg(char *s, token t);
-static void glob_time(void);
-static char *path_arg(void);
-static int objop_args(token t);
-
-token
-global_stream(t)
-token t;
-{
- register int i;
- char *path, *name, *p;
- struct actrec *a;
- extern char *Filesys;
- char *tok_to_cmd();
- char *bsd_path_to_title();
- struct actrec *path_to_ar();
- char *expand();
-
-#ifdef _DEBUG5
- _debug5(stderr, "global_stream(%o)\n", t);
-#endif
- /*
- * no more flashing token message (yuk!)
- *
- * if (p = tok_to_cmd(t))
- * {
- * mess_flash(p);
- * doupdate();
- * }
- */
- switch (t) {
- /* commands which process objects */
- case TOK_HELP:
- working(TRUE);
- if (Arg_count <= 1) {
- extern char *Pending_op;
-
- if (Pending_op)
- objop(Open, Text, "$VMSYS/OBJECTS/Text.help",
- Pending_op, Pending_op, NULL);
- else
- t = (token) ar_help(ar_get_current());
- }
- else
- t = cmd_help(Args[1]);
- if (t == TOK_OPEN)
- goto openit;
- return TOK_NOP;
- case TOK_SHOW_PATH: /* checkprint */
- working(TRUE);
-
- if (Arg_count > 1)
- (void) mess_temp(Extra_args);
- if (ar_ctl(ar_get_current(), CTGETARG, &p, NULL, NULL, NULL, NULL, NULL) != FAIL && p && *p)
- (void) objop(Open, Text, "$VMSYS/OBJECTS/Text.show", p, NULL);
- else
- (void) mess_temp("The current frame must be a non-empty folder to use this command.");
-
- return TOK_NOP;
- case TOK_SECURITY: /* security */
- working(TRUE);
- if (path = path_arg()) {
- if ( access(path,00) == FAIL )
- mess_temp("object does not exist");
- else
- objop(Open, Form, "$VMSYS/OBJECTS/Form.sec",
- path, bsd_path_to_title(path, 0), NULL);
- return TOK_NOP;
- }
- break;
- case TOK_ORGANIZE: /* organize */
- working(TRUE);
- if (a = window_arg(Arg_count - 1, Args + 1, 1)) {
- bool b;
-
- if (ar_ctl(a, CTISDEST, &b, NULL, NULL, NULL, NULL, NULL) == FAIL || b == FALSE)
- mess_temp("You may only organize File folders");
- else if (access(a->path,02) == FAIL)
- mess_temp("You do not have write permission to organize this folder");
- else {
- objop(Open, Form, "$VMSYS/OBJECTS/Form.org", a->path,
- bsd_path_to_title(a->path, 0), NULL);
- return TOK_NOP;
- }
- } else
- mess_temp("You must open the File folder to organize");
- break;
- case TOK_FIND: /* find */
- working(TRUE);
- if (parse_n_in_fold(&name, &path) == SUCCESS) {
- if (name == NULL)
- objop(Open, Form, "$VMSYS/OBJECTS/Form.find", path, NULL);
- else
- objop(Open, Menu, "$VMSYS/OBJECTS/Menu.find", path,
- name, Any, Any, Any, NULL);
- return TOK_NOP;
- }
- break;
-
- /* commands which are activation record functions */
-
- case TOK_CLEANUP: /* cleanup */
- working(TRUE);
- (void) ar_cleanup(AR_LONGTERM);
- return TOK_NOP;
- case TOK_GOTO: /* goto */
- if (Arg_count <= 1)
- get_string(gotoarg, "Enter a frame number or path: ",
- nil, 0, FALSE, "goto", "goto");
- else
- gotoarg(NULL, t);
- return TOK_NOP;
-/* case TOK_TAB: tab Removed this mapping abs k16 */
- case TOK_NEXT_WDW: /* next_wdw */
- ar_cur_next();
- return TOK_NOP;
-/* case TOK_BTAB: backtab Removed this mapping abs k16 */
- case TOK_PREV_WDW: /* prev_wdw */
- ar_cur_prev();
- return TOK_NOP;
- case TOK_LOGOUT: /* logout */
- working(TRUE);
- arf_noncur(AR_cur, AR_cur); /* clean up $ARGs */
- ar_cleanup(AR_INITIAL);
- break;
- case TOK_DEBUG:
- /* les
- mdump();
- */
- return TOK_NOP;
- case TOK_REREAD:
- working(TRUE);
- if (Arg_count <= 1)
- ar_reread(ar_get_current());
- else {
- struct actrec *destar, *savear;
- int save_life;
-
- savear = ar_get_current();
- if (destar = window_arg(Arg_count - 1, Args + 1, 2)) {
- if (destar == savear)
- ar_reread(savear);
- else {
- bool restore_ar = FALSE;
-
- if ((Arg_count < 3) || strCcmp(Args[2], "true")) /* abs k15 */
- {
- restore_ar = TRUE;
- /* don't let lifetime re-evaluate or frame close if
- shortterm when destar is made current. abs k15*/
- save_life = savear->lifetime;
- savear->lifetime = AR_INITIAL;
- }
- /*
- * - make the destination AR current
- * (to update the window immediately)
- * - if there is no third argument then
- * make the save AR current
- */
- ar_current(destar, FALSE); /* abs k15 */
- ar_reread(destar);
- if (restore_ar == TRUE)
- {
- ar_current(savear, FALSE); /* abs k15 */
- savear->lifetime = save_life;
- }
- }
- }
- }
- return TOK_NOP;
- case TOK_CLOSE:
- {
- struct actrec *a;
- register int i;
- char buf[BUFSIZ];
-
- working(TRUE);
- if (Arg_count <= 1) {
- a = ar_get_current();
- if (!a)
- mess_temp("Can't find any frames\n");
-
- /* commented out by njp for F15 - this code was
- moved to actrec.c in ar_close.
-
- else if (a->lifetime == AR_IMMORTAL ||
- a->lifetime == AR_INITIAL)
- mess_temp("Can't close this frame\n", Args + i);
- */
-
- else {
- ar_close(a, FALSE);
- init_modes();
- ar_checkworld(TRUE);
- }
- return(TOK_NOP);
- }
- for (i = 1; i < Arg_count; i++) {
- a = window_arg(1, Args + i, 1);
- if (!a) {
- sprintf(buf, "Can't find frame \"%s\"\n", Args[i]);
- mess_temp(buf);
- }
-/** test is now in ar_close. abs k17
- else if (a->lifetime == AR_IMMORTAL ||
- a->lifetime == AR_INITIAL) {
- sprintf(buf, "Can't close frame \"%s\"\n", Args[i]);
- mess_temp(buf);
- }
-**/
- else {
- ar_close(a, FALSE);
- init_modes();
- ar_checkworld(TRUE);
- }
- }
- return TOK_NOP;
- }
- break;
- case TOK_CHECKWORLD: /* force the world to be checked */
- ar_checkworld(TRUE);
- return TOK_NOP;
- case TOK_UNK_CMD: /* unknown command, if number, goto, else like open */
- if ((i = atoi(Args[0])) && wdw_to_ar(i) &&
- strspn(Args[0], "0123456789") == strlen(Args[0]))
- {
- ar_current(wdw_to_ar(i), TRUE); /* abs k15 */
- return(TOK_NOP);
- } else {
- if (Args[MAX_ARGS-1])
- free(Args[MAX_ARGS-1]); /* les */
-
- for (i = MAX_ARGS-1; i > 0; i--)
- Args[i] = Args[i-1];
-
- Args[0] = strsave(Open);
-
- Arg_count++;
- t = TOK_OPEN;
- /* fall through to open - no break!! */
- }
-
- /* object operations */
-
- openit:
- case TOK_OPEN: /* open */
- case TOK_ENTER:
- case TOK_COPY: /* copy */
- case TOK_MOVE: /* move */
- case TOK_REPLACE: /* rename */
- case TOK_SCRAMBLE: /* scramble */
- case TOK_UNSCRAMBLE: /* unscramble */
- case TOK_PRINT: /* print */
- case TOK_DELETE: /* delete */
- case TOK_UNDELETE: /* undelete */
- case TOK_OBJOP: /* any other object operation */
- working(TRUE);
-#ifdef _DEBUG
- _debug(stderr, "In global handling object operation\n");
-#endif
- if (objop_args(t) != FAIL)
- if (objopv(tok_to_cmd(t), Objtype, &Args[1]) == FAIL)
- ar_current(AR_cur, FALSE); /* undo damage done. abs k14,k15 */
- ar_checkworld(TRUE);
- return TOK_NOP;
- case TOK_SREPLACE: /* redescribe */
- working(TRUE);
- if (objop_args(t) != FAIL) {
- if (Arg_count <= 2)
- enter_getname("redescribe", NULL, &Args[1]);
- else {
- redescribe(&Args[1]);
- ar_checkworld(TRUE);
- }
- }
- return TOK_NOP;
- case TOK_DISPLAY: /* display */
- working(TRUE);
- if (objop_args(t) != FAIL)
- (void) glob_display(Args[1]);
- return TOK_NOP;
- case TOK_RUN:
- working(TRUE);
- if (objop_args(t) != FAIL) {
- objopv(Open, "EXECUTABLE", &Args[1]);
- ar_checkworld(TRUE);
- return(TOK_NOP);
- }
- break;
- case TOK_CREATE: /* create */
- working(TRUE);
- return glob_create();
-
- /* system functions */
-
- case TOK_SELECT: /* select */
- glob_select();
- return TOK_NOP;
- case TOK_CANCEL: /* cancel out of a browse */
- mess_perm(NULL);
- glob_browse_cancel();
- return TOK_NOP;
- case TOK_REFRESH: /* refresh the screen */
- vt_redraw();
- return TOK_NOP;
- case TOK_TIME: /* time */
- glob_time();
- return TOK_NOP;
- case TOK_UNIX: /* unix */
- working(TRUE);
- (void) proc_open(0, "UNIX_System", NULL, "sh", "-c",
- "echo \"To return, type 'exit' or control-d\nYou are in `pwd`\"; exec ${SHELL:-/bin/sh}", NULL);
- ar_checkworld(TRUE); /* always check after a unix escape! */
- return TOK_NOP;
- case TOK_WDWMGMT: /* wdw_mgmt */
- working(TRUE);
- if (Arg_count <= 1)
- mgmt_create(NULL);
- else
- mgmt_create(Args[1]);
- return TOK_NOP;
- case TOK_CMD:
- working(TRUE);
- cmd_create();
- return TOK_NOP;
- case TOK_SET:
- working(TRUE);
- if (Arg_count < 3) {
- mess_temp("Not enough arguments");
- break;
- } else {
- char buf[MESSIZ];
-
- strcpy(buf, Args[2]);
- for (i = 3; Args[i]; i++) {
- strcat(buf, " ");
- strcat(buf, Args[i]);
- }
- chgepenv(Args[1], buf);
- mess_temp(nstrcat(Args[1], " ==> ", buf, NULL));
- return TOK_NOP;
- }
- case TOK_TOGSLK:
- slk_toggle();
- return TOK_NOP;
- case TOK_RELEASE:
- working(TRUE);
- mess_temp(Release);
- return TOK_NOP;
- case TOK_NOP:
- default:
- break;
- }
- return t;
-}
-
-
-/*
- * This function looks at its arglist, and parses its argument into an
- * activation record. The argument could be either a window number or a path
- */
-struct actrec *
-window_arg(argc, argv, maxargs)
-int argc;
-char *argv[];
-int maxargs;
-{
- char *p;
- int n;
- struct actrec *ret;
- struct actrec *path_to_ar();
- struct actrec *wdw_to_ar();
-
- if (argc <= 0) {
- ret = ar_get_current();
- return(ret);
- }
- else {
- if (argc > maxargs)
- mess_temp(Extra_args);
- if ((n = atoi(argv[0])) &&
- (strspn(argv[0], "0123456789") == strlen(argv[0])) &&
- (ret = wdw_to_ar(n)))
- return(ret);
- else {
- p = path_to_full(argv[0]);
- ret = path_to_ar(p);
- free(p);
- return ret;
- }
- }
-}
-
-/*
- * this is used for those functions that require an argument that is
- * a path inside a window by default, or a full path.
- */
-static char *
-path_arg(void)
-{
- char *p;
- extern char *Filecabinet;
-
- if (Arg_count > 2)
- mess_temp(Extra_args);
- if (Arg_count >= 2)
- return path_to_full(Args[1]);
- else if (ar_ctl(ar_get_current(), CTGETARG, &p, NULL, NULL, NULL, NULL, NULL) != FAIL && p && *p)
- return path_to_full(p);
- return Filecabinet;
-}
-
-/*
- * These should really go in separate source files when they are
- * finally finished.
- */
-static void
-glob_time(void)
-{
- char buf[12];
- time_t t; /* EFT abs k16 */
- register struct tm *tp;
-
- t = time((time_t)0L); /* EFT abs k16 */
- tp = localtime(&t);
- sprintf(buf, "%d:%02.2d:%02.2d %cM",
- tp->tm_hour % 12 ? tp->tm_hour % 12 : 12,
- tp->tm_min, tp->tm_sec, tp->tm_hour >= 12 ? 'P' : 'A');
- mess_temp(buf);
-}
-
-/* prepare the argument array for an impending object operation */
-
-static int
-objop_args(token t)
-{
- char *p;
- register int i;
-
- strcpy(Objtype, "OBJECT");
- if (Arg_count <= 1) { /* current object is the arg */
- if (ar_ctl(ar_get_current(), CTGETARG, &Args[1], NULL, NULL, NULL, NULL, NULL) == FAIL) {
- glob_mess_nosrc(t);
- return(FAIL);
- }
-
- Args[1] = strsave(Args[1]);
- if ( Args[2] )
- free( Args[ 2 ] ); /* les */
- Args[2] = NULL;
- Arg_count = 2;
- return(SUCCESS);
- }
- if (Arg_count > 2 &&
- (is_objtype(Args[1]) || strCcmp("OBJECT", Args[1]) == 0)) {
- strncpy(Objtype, Args[1], MAX_OBJNAME);
- for (p = &Objtype[0]; *p; p++)
- if (islower(*p))
- *p = toupper(*p);
- free(Args[1]);
- for (i = 1; Args[i] = Args[i+1]; i++)
- ;
- Arg_count--;
- }
- if (Arg_count >= 3 && strCcmp(Args[1], "to") == 0) {
- free(Args[1]);
- if (ar_ctl(ar_get_current(), CTGETARG, &Args[1], NULL, NULL, NULL, NULL, NULL) == FAIL) {
- glob_mess_nosrc(t);
- return(FAIL);
- }
- }
-
- p = Args[1];
- Args[1] = path_to_full(Args[1]);
- if (p)
- free(p);
- return SUCCESS;
-}
-
-static token
-gotoarg(char *s, token t)
-{
- struct actrec *a;
-
- if (t == TOK_CANCEL)
- return t;
- if (s) {
- if (Args[1] && Arg_count > 1)
- free(Args[1]);
- Args[1] = strsave(s);
- if (Arg_count < 2)
- Arg_count = 2;
- }
- if ((a = window_arg(Arg_count - 1, Args + 1, 1)) == NULL) {
- mess_temp("Unable to find a frame with that name");
- return t;
- }
- else
- ar_current(a, TRUE); /* abs k15 */
- return TOK_NOP;
-}
-
-/* parse for arguments of the form: command [name] [in folder] */
-
-int
-parse_n_in_fold(name, folder)
-char **name, **folder;
-{
- switch (Arg_count) {
- case 0:
- case 1:
- *name = NULL;
- *folder = cur_path();
- break;
- case 2:
- *name = Args[1];
- *folder = cur_path();
- break;
- default:
- mess_temp(Extra_args);
- sleep(2);
- case 4:
- if (strCcmp(Args[2], "in") != 0) {
- mess_temp(Extra_args);
- return(FAIL);
- }
- *folder = path_to_full(Args[3]);
- *name = Args[1];
- break;
- case 3:
- *folder = path_to_full(Args[2]);
- if (strCcmp(Args[1], "in") == 0)
- *name = NULL;
- else
- *name = Args[1];
- break;
- }
- return SUCCESS;
-}
-
-static char *
-cur_path(void)
-{
- bool arg;
- char *path;
- extern char *Filecabinet;
-
- if (ar_ctl(ar_get_current(), CTISDEST, &arg, NULL, NULL, NULL, NULL, NULL) == FAIL || arg == FALSE)
- path = Filecabinet;
- else
- path = ar_get_current()->path;
- return(path);
-}