: --------------------------------------------------------------------
: RMD LOESCHT DATEIEN AUF DEVICES MIT BELIEBIGER MASKE      27.03.1996
: SYNTAX: RMD [-AN] [/DEVICE/][PFAD/]MASKE
: --------------------------------------------------------------------

ERR = "SYNTAX: RMD [-AEN] [/DEVICE/][PFAD/]MASKE";

IF TEST $# = 0
THEN
 ECHO $ERR;
 EXIT;
FI;

IF TEST $1 = '-?' -A $1 != '*'
THEN
 ECHO '*------------------------------------------------------------*';
 ECHO '* RMD LOESCHT DATEIEN AUF DEVICES MIT BELIEBIGER MASKE       *';
 ECHO '* SYNTAX: RMD [-AEN] [/DEVICE/][PFAD/]MASKE                  *';
 ECHO '*         FEHLT DAS DEVICE WIRD DAS WORKING-DIR EINGESETZT   *';
 ECHO '*         DIE MASKE KANN AUCH DIRECTORIES ENTHALTEN          *';
 ECHO '* OPTION: -A  AUCH UNTERVERZEICHNISSE WERDEN KOPIERT (ALL)   *';
 ECHO '* OPTION: -E  DIE FILE-LISTE KANN BEARBEITET WERDEN  (EDIT)  *';
 ECHO '* OPTION: -N  KOPIEREN OHNE EINZELBESTAETIGUNG       (NO)    *';
 ECHO '*------------------------------------------------------------*';
 EXIT;
FI;

: --------------------------------------------------------------------
: MIT OPTIONS ?
: --------------------------------------------------------------------

ED = N;
IF TEST $1 = '-'* -A $1 != '#'
THEN
  ED = N; NF = J; OP = ' ';
  IF TEST $1 = *'E'* -O $1 = *'e'*  
  THEN 
    ED = J; NF = N;
  FI;
  IF TEST $1 = *'A'* -O $1 = *'a'*  
  THEN 
    OP = -A;
  FI;
  IF TEST $1 = *'N'* -O $1 = *'n'*  
  THEN 
    NF = N;
  FI;
  SHIFT;
FI;

IF TEST $# != 1
THEN
  ECHO $ERR; EXIT;
FI;

SOU = $1;

SET `PWD`;
IF TEST SEG[LEN($1),LEN($1)]($1) = '-'
THEN
  PWD = SEG[4,EXPR(LEN($1)-2)]($1);
ELSE
  PWD = SEG[4,]($1);
FI;

IF TEST SEG[1,1]($SOU) != '/' -O SEG[1,1]($SOU) = '#'
THEN
  SOU = $PWD/$SOU;
FI;

: --------------------------------------------------------------------
: ERMITTELT WURDEN :
: $SOU = SOURCE
: --------------------------------------------------------------------

: --------------------------------------------------------------------
: TRENNEN VON STATION DEVICE PATH UND MASKE IN $SOU
: --------------------------------------------------------------------

: WENN SOURCE = /ST* DANN $STN='/STxx', SONST $STN=''

STN = SEG[,3]($SOU);
IF TEST $STN = '/ST' -O $STN = '/st' -O $STN = '/SN' -O $STN = '/sn'
THEN
  IF TEST SEG[5,5]($SOU) = '/' -A SEG[5,5]($SOU) != '#'
  THEN
    STN = SEG[,4]($SOU);
    SOU = SEG[5,]($SOU);
  ELIF TEST SEG[6,6]($SOU) = '/' -A SEG[6,6]($SOU) != '#'
    THEN
    STN = SEG[,5]($SOU);
    SOU = SEG[6,]($SOU);
    ELSE
      STN = '';
    FI;
  FI;
ELSE
  STN = '';
FI;

: $DEV GEHT BIS ZUM NAECHSTEN '/'

L=1;
I=' ';
WHILE TEST $I != '/'
DO
  L = EXPR $L+1;
  I = SEG[$L,$L]($SOU);
  IF TEST $L = LEN($SOU)
  THEN
    ECHO $ERR;
    EXIT;
  FI;
DONE;
DEV = SEG [,EXPR($L-1)]($SOU);
SOU = SEG [$L,]($SOU);

: $PTH REICHT BIS ZUM LETZTEN '/' VOR DEM ERSTEN WILDCARD

K=1;
L=1;
WHILE TEST $L -LT LEN($SOU)
DO
  L = EXPR $L+1;
  I = SEG[$L,$L]($SOU);
  IF TEST $I = '#'
  THEN
    L=;
    BREAK;
  FI;
  IF TEST $I = '/'
  THEN
    K = $L;
  FI;
DONE;
IF TEST -N $L
THEN
  ECHO $ERR;
  EXIT;
FI;
IF TEST $K = 1
THEN
  PTH = ;
  MSK = $SOU;
ELSE
  PTH = SEG [,EXPR $K-1]($SOU);
  MSK = SEG [$K,]($SOU);
FI;

: --------------------------------------------------------------------
: ERMITTELT WURDEN :
: $STN = STATION ODER BLANK
: $DEV = DEVICE
: $PTH = PFAD ODER BLANK
: $MSK = MASKE
: --------------------------------------------------------------------

: --------------------------------------------------------------------
: WENN NOCH NICHT DURCH -N FESTGELEGT
: FRAGEN OB OHNE NACHFRAGE GELOESCHT WERDEN SOLL
: --------------------------------------------------------------------

IF TEST -Z $NF
THEN
  ECHO -N "MIT NACHFRAGE           ([J]/N) ? : ";
  READ NF;
  ECHO;
FI;
IF TEST $NF = N -O $NF = n
THEN
  NF=J;
ELSE
  NF=;
FI;

: --------------------------------------------------------------------
: WENN NOCH NICHT DURCH -A FESTGELEGT
: FRAGEN OB AUCH ALLE UNTERVERZEICHNISSE GELOESCHT WERDEN SOLLEN
: --------------------------------------------------------------------

IF TEST -Z $OP
THEN
  ECHO -N "AUCH UNTERVERZEICHNISSE (J/[N]) ? : ";
  READ OP;
  ECHO;
  IF TEST $OP = J -O $OP = j
  THEN
    OP=-A;
  ELSE
    OP=' ';
  FI;
FI;


IF TEST $OP = '-A'
THEN
  : $DMSK REICHT BIS ZUM LETZTEN '/' IN $MSK
  DMSK = */;
  L=1; K=2;
  WHILE TEST $L -LT LEN($MSK)
  DO
    L = EXPR $L+1;
    I = SEG[$L,$L]($MSK);
    IF TEST $I = / -A $I != '#'
    THEN
      DMSK = SEG[,$L]($MSK);
      K = EXPR($L+1);
    FI;
  DONE;
  MSK = SEG[$K,]($MSK);
ELSE 
  DMSK = '';
FI;

: --------------------------------------------------------------------
: ERMITTELT WURDEN :
: $STN = STATION ODER BLANK
: $DEV = DEVICE
: $PTH = PFAD ODER BLANK
: $MSK = FILENAMEN MASKE
: $DMSK = DIRECTORY MASKE
: $DST = DESTINATION
: $NF  = 'J' WENN OHNE NACHFRAGE SONST LEER
: $OP  = '-A' WENN AUCH UNTERVERZEICHNISSE SONST BLANK
: --------------------------------------------------------------------

: ECHO '$STN= '$STN;
: ECHO '$DEV= '$DEV;
: ECHO '$PTH= '$PTH;
: ECHO -N '$DMSK$MSK= ';
: L=1;
: K= EXPR(LEN($DMSK)+LEN($MSK));
: WHILE TEST $L -LE $K
: DO
:   I=SEG[$L,$L]($DMSK$MSK);
:   IF TEST $I = '##'; THEN
:     ECHO-N '*'
:   ELIF TEST $I = '?' -A $I ='#'; THEN
:       ECHO-N '?';
:     ELSE
:       ECHO-N $I;
:     FI;
:   FI;
:   L=EXPR($L+1);
: DONE;
: ECHO           
: ECHO '$DST= '$DST;
: SUSP

LIST='/ED/RMD'SEG[EXPR(LEN($$)-1),LEN($$)]($$);
DIRLIST='';

FOR LINE IN -L `FIND $OP $STN$DEV$PTH`;
DO
  SET $LINE;
  FILE = $1;   
  IF TEST /$FILE = */
  THEN        : DIREKTORIES SAMMELN

    IF TEST $OP = '-A'-A $DEV != '/ED' -A  /$FILE = $PTH$DMSK
    THEN
      FILE = SEG[,EXPR(LEN($FILE)-1)]($FILE);
      IF TEST -Z $NF
      THEN
        ECHO;
        TEXT = "$STN$DEV/$FILE                                ";
        TEXT = SEG[,30]($TEXT);
        ECHO -N "DIRECTORY $TEXT LOESCHEN (J/[N]/X) ? : ";
        READ A;
        CASE $A IN
          X | x ) BREAK;;
          J | j ) DIRLIST = "RMDIR $STN$DEV/$FILE"\13"$DIRLIST";;
        ESAC;
      ELSE
        DIRLIST = "RMDIR $STN$DEV/$FILE"\13"$DIRLIST";;
      FI;
    FI;

  ELSE        : FILES SAMMELN

    IF TEST /$FILE = $PTH$DMSK$MSK -A $FILE != '**FREE**' -A
            $FILE != 'ED-FILES:' -A $FILE != $0 -A $FILE != #*
    THEN
      IF TEST -Z $NF
      THEN
        ECHO;
        TEXT = "$STN$DEV/$FILE                                ";
        TEXT = SEG[,30]($TEXT);
        ECHO -N "$TEXT LOESCHEN (J/[N]/X) ? : ";
        READ A;
        CASE $A IN
        X | x ) BREAK;;
        J | j ) O $LIST;ECHO RM $STN$DEV/$FILE;;
        ESAC;
      ELSE
        O $LIST;ECHO RM $STN$DEV/$FILE;
      FI;
    FI;
  FI;
DONE;

O $LIST; ECHO -N $DIRLIST;

O $LIST; ECHO -N \4;
REWIND $LIST;
I $LIST; READ LINE;
IF TEST $LINE = \4
THEN
  ECHO '>>NO FILE FOUND';
ELSE

  IF TEST $ED = 'J'
  THEN
    IF WAIT; ER /NIL; WD $LIST; 
    THEN; 
    ELSE
      ECHO -N 'Alles loeschen (J,[N]) ? : ';
      READ ED;
      IF TEST $ED != 'J' -A $ED != 'j'
      THEN
        RM $LIST; EXIT;
      FI; 
    FI;
  FI;

  REWIND $LIST;
  WHILE I $LIST; READ LINE; TEST $LINE != \4
  DO
    ECHO "$LINE";
    IF TEST $LINE = 'RMDIR '*
    THEN 
      IF ER /NIL;$LINE
      THEN 
      ELSE
        ECHO ">>$LINE: FAILED";
      FI;
    ELSE 
      IF ER /NIL; $LINE;
      THEN 
      ELSE
        IF ER /NIL; RETURN -A SEG[3,]($LINE); $LINE;
        THEN 
        ELSE
          ECHO ">>$LINE FAILED";
        FI;
      FI;
    FI;
  DONE;
FI;
RM $LIST


















