|
|
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 f
Length: 13668 (0x3564)
Types: TextFile
Names: »ftam-mgmt.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/ftam2/ftam-mgmt.c«
/* ftam-mgmt.c - interactive initiator FTAM -- file management */
#ifndef lint
static char *rcsid = "$Header: /f/osi/ftam2/RCS/ftam-mgmt.c,v 6.0 89/03/18 23:31:17 mrose Rel $";
#endif
/*
* $Header: /f/osi/ftam2/RCS/ftam-mgmt.c,v 6.0 89/03/18 23:31:17 mrose Rel $
*
*
* $Log: ftam-mgmt.c,v $
* Revision 6.0 89/03/18 23:31:17 mrose
* Release 5.0
*
*/
/*
* NOTICE
*
* Acquisition, use, and distribution of this module and related
* materials are subject to the restrictions of a license agreement.
* Consult the Preface in the User's Manual for the full terms of
* this agreement.
*
*/
#include <stdio.h>
#include "ftamuser.h"
/* \f
*/
int f_mv (vec)
char **vec;
{
#ifdef BRIDGE
register char *src;
#else
int sglobbed;
register char *bp,
**gp,
**src;
char *freedst = NULL,
buffer[BUFSIZ];
#endif
register char *dst;
if (*++vec == NULL) {
#ifdef BRIDGE
return NOTOK;
#else
if (getline ("source: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
return OK;
dst = NULL;
#endif
}
#ifdef BRIDGE
src = *vec;
if (*++vec == NULL)
return NOTOK;
dst = *vec;
#else
else {
register char **ap;
for (ap = vec; *ap; ap++)
continue;
if (--ap != vec)
dst = *ap, *ap = NULL;
else
dst = NULL;
}
#endif
#ifndef BRIDGE
if (!(src = xglob (vec, 1)))
return OK;
sglobbed = xglobbed;
if (dst == NULL) {
if (getline ("destination: ", buffer) == NOTOK) {
blkfree (src);
return OK;
}
switch (str2vec (buffer, vec)) {
case 0:
switch (realstore) {
case RFS_UNIX:
dst = ".";
break;
default:
advise (NULLCP, "need a destination");
goto out;
}
break;
case 1:
dst = *vec;
break;
default:
advise (NULLCP, "too many destinations");
goto out;
}
}
if (!(dst = freedst = xglob1val (dst, 1)))
goto out;
if (src[1] == NULL) {
if (interrupted)
goto out;
switch (realstore) {
case RFS_UNIX:
if (isdir (dst, NULLCP, 1) == NOTOK)
break;
#ifdef apollo
if (*dst == '/')
(void) sprintf (bp = buffer, "%s", dst);
else
#endif
(void) sprintf (bp = buffer, "%s/", dst);
bp += strlen (bp);
if (dst = rindex (*src, '/'))
dst++;
if (dst == NULL || *dst == NULL)
dst = *src;
(void) strcpy (bp, dst);
dst = buffer;
switch (ask ("mv %s %s", *src, dst)) {
case NOTOK:
goto out;
case OK:
default:
break;
case DONE:
goto out;
}
break;
default:
break;
}
(void) mv (*src, dst, 0);
goto out;
}
switch (realstore) {
case RFS_UNKNOWN:
advise (NULLCP, "%s", rs_unknown);
goto out;
case RFS_UNIX:
#ifdef apollo
if (*dst == '/')
(void) sprintf (bp = buffer, "%s", dst);
else
#endif
(void) sprintf (bp = buffer, "%s/", dst);
bp += strlen (bp);
break;
default:
advise (NULLCP, "%s", rs_support);
goto out;
}
if (isdir (dst, NULLCP, 0) == NOTOK)
goto out;
for (gp = src; *gp; gp++) {
switch (realstore) {
case RFS_UNIX:
if (dst = rindex (*gp, '/'))
dst++;
if (dst == NULL || *dst == NULL)
dst = *gp;
break;
default:
dst = *gp;
}
(void) strcpy (bp, dst);
dst = str2file (buffer);
if (sglobbed) {
if (query)
switch (ask ("mv %s %s", *gp, dst)) {
case NOTOK:
continue;
case OK:
default:
break;
case DONE:
goto out;
}
else
advise (NULLCP, "mv %s %s", *gp, dst);
}
(void) mv (*gp, dst, 1);
if (ftamfd == NOTOK)
break;
}
#else
return mv (src, dst, 0);
#endif
#ifndef BRIDGE
out: ;
blkfree (src);
if (freedst)
free (freedst);
return OK;
#endif
}
/* \f
*/
static int mv (src, dst, multi)
char *src,
*dst;
int multi;
{
struct FTAMgroup ftgs;
register struct FTAMgroup *ftg = &ftgs;
struct FTAMindication ftis;
register struct FTAMindication *fti = &ftis;
bzero ((char *) ftg, sizeof *ftg);
ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
ftg -> ftg_threshold = 0;
ftg -> ftg_flags |= FTG_SELECT;
{
register struct FTAMselect *ftse = &ftg -> ftg_select;
register struct FTAMattributes *fa = &ftse -> ftse_attrs;
fa -> fa_present = FA_FILENAME;
fa -> fa_nfile = 0;
fa -> fa_files[fa -> fa_nfile++] = src;
ftse -> ftse_access = FA_PERM_CHNGATTR;
FCINIT (&ftse -> ftse_conctl);
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_CHATTR;
{
register struct FTAMchngattr *ftca = &ftg -> ftg_chngattr;
register struct FTAMattributes *fa = &ftca -> ftca_attrs;
fa -> fa_present = FA_FILENAME;
fa -> fa_nfile = 0;
fa -> fa_files[fa -> fa_nfile++] = dst;
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_DESELECT;
ftg -> ftg_threshold++;
if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
return NOTOK;
}
ftg = &fti -> fti_group;
if (ftg -> ftg_flags & FTG_SELECT) {
register struct FTAMselect *ftse = &ftg -> ftg_select;
if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
printf ("%s\n", src);
ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1,
ftse -> ftse_action);
if (ftse -> ftse_state != FSTATE_SUCCESS)
goto you_lose;
}
if (ftg -> ftg_flags & FTG_CHATTR) {
register struct FTAMchngattr *ftca = &ftg -> ftg_chngattr;
ftam_diag (ftca -> ftca_diags, ftca -> ftca_ndiag, 1,
ftca -> ftca_action);
}
if (ftg -> ftg_flags & FTG_DESELECT) {
register struct FTAMdeselect *ftde = &ftg -> ftg_deselect;
ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
ftde -> ftde_action);
ftam_chrg (&ftde -> ftde_charges);
}
FTGFREE (ftg);
return OK;
you_lose: ;
FTGFREE (ftg);
return NOTOK;
}
/* \f
*/
int f_rm (vec)
char **vec;
{
#ifndef BRIDGE
int multi;
char buffer[BUFSIZ];
#endif
if (*++vec == NULL) {
#ifdef BRIDGE
return NOTOK;
#else
if (getline ("file: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
return OK;
#endif
}
#ifdef BRIDGE
return rm (*vec, 0);
#else
if (vec = xglob (vec, 1)) {
register char **gp;
multi = vec[1] ? 1 : 0;
for (gp = vec; *gp && !interrupted; gp++) {
if (xglobbed && query)
switch (ask ("rm %s", *gp)) {
case NOTOK:
continue;
case OK:
default:
break;
case DONE:
goto out;
}
(void) rm (*gp, multi);
if (ftamfd == NOTOK)
break;
}
out: ;
blkfree (vec);
}
return OK;
#endif
}
/* \f
*/
static int rm (file, multi)
char *file;
int multi;
{
struct FTAMgroup ftgs;
register struct FTAMgroup *ftg = &ftgs;
struct FTAMindication ftis;
register struct FTAMindication *fti = &ftis;
bzero ((char *) ftg, sizeof *ftg);
ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
ftg -> ftg_threshold = 0;
ftg -> ftg_flags |= FTG_SELECT;
{
register struct FTAMselect *ftse = &ftg -> ftg_select;
register struct FTAMattributes *fa = &ftse -> ftse_attrs;
fa -> fa_present = FA_FILENAME;
fa -> fa_nfile = 0;
fa -> fa_files[fa -> fa_nfile++] = file;
ftse -> ftse_access = FA_PERM_DELETE;
FCINIT (&ftse -> ftse_conctl);
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_DELETE;
ftg -> ftg_threshold++;
if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
return NOTOK;
}
ftg = &fti -> fti_group;
if (ftg -> ftg_flags & FTG_SELECT) {
register struct FTAMselect *ftse = &ftg -> ftg_select;
if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
printf ("%s\n", file);
ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1,
ftse -> ftse_action);
if (ftse -> ftse_state != FSTATE_SUCCESS)
goto you_lose;
}
if (ftg -> ftg_flags & FTG_DELETE) {
register struct FTAMdelete *ftxe = &ftg -> ftg_delete;
ftam_diag (ftxe -> ftxe_diags, ftxe -> ftxe_ndiag, 1,
ftxe -> ftxe_action);
ftam_chrg (&ftxe -> ftxe_charges);
}
FTGFREE (ftg);
return OK;
you_lose: ;
FTGFREE (ftg);
return NOTOK;
}
/* \f
*/
#ifndef BRIDGE
int f_chgrp (vec)
char **vec;
{
int multi;
char group[8 + 1];
char buffer[BUFSIZ];
if (!(attrs & FATTR_STORAGE)) {
advise (NULLCP, "no support for storage attributes");
return OK;
}
if (*++vec == NULL) {
if (getline ("group: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
return OK;
}
(void) strcpy (group, vec[0]);
if (*++vec == NULL) {
if (getline ("file: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
return OK;
}
if (vec = xglob (vec, 1)) {
register char **gp;
multi = vec[1] ? 1 : 0;
for (gp = vec; *gp && !interrupted; gp++) {
if (xglobbed && query)
switch (ask ("chgrp %s %s", group, *gp)) {
case NOTOK:
continue;
case OK:
default:
break;
case DONE:
goto out;
}
(void) chgrp (group, *gp, multi);
if (ftamfd == NOTOK)
break;
}
out: ;
blkfree (vec);
}
return OK;
}
/* \f
*/
static int chgrp (group, file, multi)
char *group,
*file;
int multi;
{
struct FTAMgroup ftgs;
register struct FTAMgroup *ftg = &ftgs;
struct FTAMindication ftis;
register struct FTAMindication *fti = &ftis;
bzero ((char *) ftg, sizeof *ftg);
ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
ftg -> ftg_threshold = 0;
ftg -> ftg_flags |= FTG_SELECT;
{
register struct FTAMselect *ftse = &ftg -> ftg_select;
register struct FTAMattributes *fa = &ftse -> ftse_attrs;
fa -> fa_present = FA_FILENAME;
fa -> fa_nfile = 0;
fa -> fa_files[fa -> fa_nfile++] = file;
ftse -> ftse_access = FA_PERM_CHNGATTR;
FCINIT (&ftse -> ftse_conctl);
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_CHATTR;
{
register struct FTAMchngattr *ftca = &ftg -> ftg_chngattr;
register struct FTAMattributes *fa = &ftca -> ftca_attrs;
fa -> fa_present = FA_ACCOUNT;
fa -> fa_account = group;
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_DESELECT;
ftg -> ftg_threshold++;
if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
return NOTOK;
}
ftg = &fti -> fti_group;
if (ftg -> ftg_flags & FTG_SELECT) {
register struct FTAMselect *ftse = &ftg -> ftg_select;
if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
printf ("%s\n", file);
ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1,
ftse -> ftse_action);
if (ftse -> ftse_state != FSTATE_SUCCESS)
goto you_lose;
}
if (ftg -> ftg_flags & FTG_CHATTR) {
register struct FTAMchngattr *ftca = &ftg -> ftg_chngattr;
ftam_diag (ftca -> ftca_diags, ftca -> ftca_ndiag, 1,
ftca -> ftca_action);
}
if (ftg -> ftg_flags & FTG_DESELECT) {
register struct FTAMdeselect *ftde = &ftg -> ftg_deselect;
ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
ftde -> ftde_action);
ftam_chrg (&ftde -> ftde_charges);
}
FTGFREE (ftg);
return OK;
you_lose: ;
FTGFREE (ftg);
return NOTOK;
}
#endif
/* \f
*/
int f_mkdir (vec)
char **vec;
{
#ifndef BRIDGE
int multi;
register char *dir;
char buffer[BUFSIZ];
#endif
if (*++vec == NULL) {
#ifdef BRIDGE
return NOTOK;
#else
if (getline ("directory: ", buffer) == NOTOK
|| str2vec (buffer, vec) < 1)
return OK;
(void) makedir (str2file (*vec), 0);
#endif
}
#ifdef BRIDGE
return makedir (str2file (*vec));
#else
else {
multi = vec[1] ? 1 : 0;
while (dir = *vec++)
(void) makedir (str2file (dir), multi);
}
return OK;
#endif
}
/* \f
*/
static int makedir (dir, multi)
char *dir;
int multi;
{
struct FTAMgroup ftgs;
register struct FTAMgroup *ftg = &ftgs;
struct FTAMindication ftis;
register struct FTAMindication *fti = &ftis;
struct vfsmap *vf = &vfs[VFS_FDF];
if (vf -> vf_oid == NULLOID) {
advise (NULLCP, "no support for %ss", vf -> vf_text);
return NOTOK;
}
bzero ((char *) ftg, sizeof *ftg);
ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
ftg -> ftg_threshold = 0;
ftg -> ftg_flags |= FTG_CREATE;
{
register struct FTAMcreate *ftce = &ftg -> ftg_create;
register struct FTAMattributes *fa = &ftce -> ftce_attrs;
ftce -> ftce_override = FOVER_FAIL;
fa -> fa_present = FA_FILENAME;
fa -> fa_nfile = 0;
fa -> fa_files[fa -> fa_nfile++] = dir;
fa -> fa_present |= FA_ACTIONS;
fa -> fa_permitted = FA_PERM_READ | FA_PERM_READATTR | FA_PERM_CHNGATTR
| FA_PERM_DELETE | FA_PERM_TRAV;
fa -> fa_present |= FA_CONTENTS;
fa -> fa_contents = vf -> vf_oid;
ftce -> ftce_access = 0;
FCINIT (&ftce -> ftce_conctl);
}
ftg -> ftg_threshold++;
ftg -> ftg_flags |= FTG_DESELECT;
ftg -> ftg_threshold++;
if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
return NOTOK;
}
ftg = &fti -> fti_group;
if (ftg -> ftg_flags & FTG_CREATE) {
register struct FTAMcreate *ftce = &ftg -> ftg_create;
if (multi && ftce -> ftce_state != FSTATE_SUCCESS)
printf ("%s\n", dir);
ftam_diag (ftce -> ftce_diags, ftce -> ftce_ndiag, 1,
ftce -> ftce_action);
if (ftce -> ftce_state != FSTATE_SUCCESS)
goto you_lose;
}
if (ftg -> ftg_flags & FTG_DESELECT) {
register struct FTAMdeselect *ftde = &ftg -> ftg_deselect;
ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
ftde -> ftde_action);
ftam_chrg (&ftde -> ftde_charges);
}
FTGFREE (ftg);
return OK;
you_lose: ;
FTGFREE (ftg);
return NOTOK;
}