: UPDATE DIENT ZUR HERSTELLUNG GLEICHER ORDNER INCL. UNTERORDNER: AUFRUF: UPDATE [-N] SOURCE_ORDNER > DESTINATION_ORDNER: URVERSION VOM: 15-03-1994:                05-05-1994  SCHNELLERES PARSEN BEI 1 UND 2 PARAMETERN:                08-04-1998  UPDATE funktiontiert nun auch ueber Netz :                10-07-1998  BUG MIT **FREE** VON FLOPPY BESEITIGT:                11-08-1998  Pfade zu lang(DPATH, SPATH), wenn Partner:                            im Netz nur 24 Zeichen Pfadlaenge hat.:                04-02-1999  Abfrage nach "Ordner anlegen" korrigiert:                31-03-1999  Ausgabe kopierter Files by UPDATE-N: SYSTEMZEIT DIESER VERSION: 01:00  31-03-1999FEHLER='0'; NAFRA='JA'; : ANNHAME: UEBERSPIELEN VON SOURCE NACH DESTIN. MIT FRAGE: ANALYSE DER EINGABEZEILE (3 PARAMETER !!!): ECHO $# 'Uebergabeparameter gefunden';: VARIABLENANFANG::   S BEZEICHNET SOURCE-VARIABLEN:   D BEZEICHNET DESTINATION VARIABLEN:   A BEZEICHNET AKTUELLE(BZGL. DEM  GERADE BEARBEITETEN FILE) NAMENIF TEST $# -GT '0'; THEN   IF TEST ($1='-N' -O $1='-n') -A $1 != '-x' -A $1 != '-xx' ; THEN    NAFRA='NEIN';  : KEINE NACHFRAGE ERWUENSCHT !!!     SHIFT;  FI;  IF TEST $# ='1'; THEN    IF TEST $1= '-?' -A $1 = '-x' -A $1 != '-xx'; THEN      FEHLER='1';    FI;  FI;  FI;IF TEST $# -LT '1' -O $# -GT '3'; THEN   : NUR 1,2 ODER 3 IST i.O.  FEHLER='6';  : FALSCHE PARAMETERZAHLFI;IF TEST $FEHLER = '0';THEN    CASE $# IN    : SWITCH FUER ANZAHL DER PARAMETER  1|2) : 'SRCE >'       '> DEST'    'SRCE> DEST'     'SRCE >DEST'           : '>DEST SRCE'   'SRCE>DEST'      IF TEST $#='2'; THEN      CH=SEG[1,1]($1);      LENUEB=LEN($1);           IF TEST $CH= '>' -A $CH != 'x' -A  $LENUEB != '1';       THEN        NUM=LEN($2); 1=$2$1;  : ERSTER FALL, 2. ZEILE DER MOEGLICHKEITEN      ELSE        NUM=LEN($1); 1=$1$2;  : HIER STEHT DEST HINTER SOURCE      FI;      ELSE      NUM='1';    FI;    LENUEB=LEN($1);    WHILE TEST $NUM -LE $LENUEB;    DO      CH=SEG[$NUM,$NUM]($1);      IF TEST $CH= '>' -A $CH != 'x'; THEN        : '>' GEFUNDEN, SEPARIERUNG MOEGLICH        #=0;  : MELDUNG: AUFDROESELUNG MOEGLICH        IF TEST $NUM = '1'; THEN                       : '>DEST'          SF='';  DF=SEG[2,$LENUEB]($1);        ELSE          IF TEST $NUM=$LENUEB; THEN                   : 'SRCE>'            SF=SEG[1,EXPR($LENUEB-1)]($1); DF='';          ELSE                                         : 'SRCE>DEST'            SF=SEG[1,EXPR($NUM-1)]($1);            DF=SEG[EXPR($NUM+1),$LENUEB]($1);          FI;        FI;        BREAK;      FI;      NUM=EXPR($NUM+1);    DONE;    IF TEST $# !='0'; THEN FEHLER='2'; FI;  ;;  3)  : ACH IST DAS SCHOEN; RICHTIG EINFACH PARSEN    IF TEST $1='>' -A $1 != 'x'; THEN      SF=$3; DF= $2;    ELSE      IF TEST $2='>' -A $1 != 'x'; THEN        SF=$1; DF=$3;      ELSE        FEHLER='2';       FI;                      FI;  ;;  ESAC;FI;TMPNAM=SEG[,3]($0)SEG[EXPR(LEN($0)-5),EXPR(LEN($0))]($0);IF TEST $FEHLER ='0'; THEN:  DPATH=/ED/PUB/BLAJHUPIO/KK7/LLLKRD;  DPATH=/ED/PUB/D${TMPNAM};  IF TEST $DF=''; THEN DF=$WORKDIR; FI;  IF TEST SEG[1,1]($DF) != '/'; THEN DF=$WORKDIR/$DF; FI;    IF TEST SEG[1,1]($DF) != '/'; THEN DF=$WORKDIR/$DF; FI;  IF O $DPATH ER /NIL; DIR-E $DF; THEN    REWIND $DPATH; I $DPATH; READ ZEILE;    SET $ZEILE; DPM=$3; : gemeldeter Pfad-Name   ELSE    FEHLER='4';  FI;FI;IF TEST $FEHLER ='0'; THEN:  SPATH=/ED/PUB/BLAJHUPIO/KK7/LLLKRS;  SPATH=/ED/PUB/S${TMPNAM};  IF TEST $SF=''; THEN SF=$WORKDIR; FI;  IF TEST SEG[1,1]($SF) != '/'; THEN SF=$WORKDIR/$SF; FI;  IF "O $SPATH; ER /NIL; DIR-EA $SF"; THEN     REWIND $SPATH; I $SPATH; READ ZEILE;    SET $ZEILE; SPM=$3;   : gemeldeter Pfad-Name   ELSE    FEHLER='3';  FI;FI;UNSET $TMPNAM;IF TEST $FEHLER = '0'; THEN  : ggf. Netzdevice und Device extrahieren  DNET='';  CH='';   LC='3';  : DEVICE BEGINNT MIT /xx. 2. '/' FRUEHESTENS AB 4. STELLE  IF TEST $DF = '/S'* -o $DF = '/s'*; THEN     : Netzanpassung;    WHILE TEST $CH != '/';    DO      LC=EXPR($LC+1);      CH=SEG[$LC,$LC]($DF);    DONE    DNET=SEG[1,EXPR $LC-1]($DF);    CH=''; LC='3';  FI;  DF=$DPM;  WHILE TEST $CH != '/';  DO    LC=EXPR($LC+1);  CH=SEG[$LC,$LC]($DF);  DONE  DDEV=SEG[1,EXPR $LC-1]($DF);     SNET='';  CH='';  LC='3';  : DEVICE BEGINNT MIT /xx. 2. '/' FRUEHESTENS AB 4. STELLE  IF TEST $SF = '/S'* -o $SF = '/s'*; THEN     : Netzanpassung;    WHILE TEST $CH != '/';    DO      LC=EXPR($LC+1);      CH=SEG[$LC,$LC]($SF);    DONE    SNET=SEG[1,EXPR $LC-1]($SF);    CH=''; LC='3';  FI;  SF=$SPM;  WHILE TEST $CH != '/';  DO    LC=EXPR($LC+1);    CH=SEG[$LC,$LC]($SF);  DONE;  SDEV=SEG[1,EXPR $LC-1]($SF); FI;  IF TEST $FEHLER ='0'; THEN  IF TEST $SNET$SF = $DNET$DF; THEN      : SOURCE UND DESTINATION IDENTISCH    FEHLER='5'; RM $DPATH' '$SPATH;  FI;FI;IF TEST $FEHLER != '0'; THEN  CASE $FEHLER IN  1)                                                ;;  2)  ECHO "Fehler: Kein '>' gefunden oder '>' an falscher Stelle";  ;;  3)  ECHO 'Fehler: Quellordner nicht vorhanden';   ;;  4)  ECHO 'Fehler: Zielordner nicht vorhanden';    ;;  5)  ECHO 'Fehler: Source und Destination identisch'; ;;  6)  ECHO 'Fehler: Falsche Parameterzahl';         ;;   ESAC  ECHO 'Update dient zum Abgleichen zweier Ordner einschliesslich Unterordner:';  ECHO 'Ist eine Datei des Quellordners nicht oder in aelterer Version im Zielordner';  ECHO 'wird nachgefragt, ob das Zielfile aktualisiert werden soll. Ist eine Datei des';  ECHO 'Zielordners nicht im Quellordner, wird nachgefragt, ob das Zielfile geloescht';  ECHO 'werden soll oder ob Quellfile anzulegen ist. Ist das Quellfile aelter, kommt ';  ECHO 'kommt eine Nachfrage bzgl. Aktualisierung des Quellfiles';  ECHO 'Mit der Option -N werden Nachfragen bzgl. CP SOURCE > DEST. unterdrueckt';  ECHO 'Syntax:';  ECHO 'UPDATE [-N] source > destination oder';  ECHO 'UPDATE [-N] > destination source';  ECHO "Beispiel:  'UPDATE /H0/XD > /F0/XD' gleicht /H0/XD mit /F0/XD ab.";   ECHO 'Fuer "destination" und "source" wird das Working-Directory ausgewertet';  EXIT(0);FI;: MOUNTEN DER DESTINATION ; IF O /NIL; ER /NIL; CF $DNET$DDEV/MOUNT; THEN   ECHO $DNET$DDEV gemounted; FI;    : MOUNTEN DES SOURCE; IF O /NIL; ER /NIL; CF $SNET$SDEV/MOUNT; THEN  ECHO $SNET$SDEV gemounted; FI;    ZW=EXPR (LEN($SF)-1); SF=SEG[1,$ZW]($SF);ZW=EXPR (LEN($DF)-1); DF=SEG[1,$ZW]($DF);ECHO 'UPDATE: Source:      '$SNET$SF;ECHO '        Destination: '$DNET$DF;PASS='1';: NUN GEHT DAS GEROEDEL LOS WHILE TEST $PASS !='3'DO  ECHO 'Starte Pass '$PASS;  REWIND $SPATH; UPD='JA'; ENDE='0';  SFL=EXPR(LEN($SF)+2);  WHILE TEST $ENDE != '1'  DO    I $SPATH; READ ZEILE; SET $ZEILE;    IF TEST $EOF='1'; THEN ENDE='1';FI;    IF TEST $1=*??'-DIRECTORY'; THEN            : EINLAEUTEN EINES NEUEN DIRECTORIES      IF TEST $UPD='NEIN'; THEN        : LETZTER ORDNER DURFTE NICHT AKTUALISIERT WERDEN        IF TEST SEG[1,$NOFOLDL]($3) != $NOFOLD; THEN UPD='JA';  FI;      FI;      IF TEST $UPD='JA'; THEN        : DER LETZTE BEKAM EIN UPDATE ODER NEUE HIERARCHIESTUFE        ADIR=''; UPD='JA'; : ANNAHME: UPDATE DES NEUEN ORDNERS        IF TEST $3 != $SF/; THEN          ADIR=SEG[$SFL,]($3); : HINTER $SF BIS ENDE           ZW=EXPR(LEN($ADIR)-1);           ZW=SEG[,$ZW]($ADIR);           REWIND $DPATH;          IF "O $DPATH; ER /NIL; DIR-E $DNET$DF/$ZW"; THEN          ELSE            ECHO-N 'Ordner anlegen?: '$DNET$DF/$ADIR' ([J]/N) ';            READ-E CH; ECHO            IF TEST $CH='J' -O $CH ='j' -O TOFIX($CH)='13'; THEN              IF " MKDIR $DNET$DF/$ZW"; THEN FI;            ELSE              : ORDNER MERKEN, DER UPDATE AUSSCHALTET              UPD='NEIN'; NOFOLD=$3; NOFOLDL=LEN($3);               IF TEST $PASS='2'; THEN                ECHO-N 'Ordner entfernen?: '$SNET$SF/$ADIR' (J/[N])';                READ-E CH; ECHO;                IF TEST $CH='J' -O $CH='j'; THEN                  WAIT; /H0/XD/RMD -AN $SNET$SF/$ADIR''*--                  IF "O /NIL; ER/NIL; RMDIR $SNET$SF/$ZW"; THEN FI;                FI;              FI;            FI; : TEST $CH            FI;  : TEST DIR        FI;  : TEST $3        FI;  : TEST UPD=JA    ELSE      IF TEST $1!='**FREE**'; THEN        : ORDNER ODER FILE-EINTRAG        AFIL=$1; ADAT=$4; ACLK=$3; ZW=LEN($AFIL);        CH=SEG[$ZW,$ZW]($1);        IF TEST $UPD != 'NEIN' -A $CH != '/'; THEN          : NUR BEI UPDATE = JA UND BEI FILE-EINTRAG AUSFUEHREN           A='JA'; : ANNAHME: MUSS AKTUALISIERT WERDEN          REWIND $DPATH; DENDE=0; LC='Anleg';          WHILE TEST $DENDE = '0';          DO            I $DPATH; READ DDAT; DENDE=$EOF; SET $DDAT;             IF TEST $AFIL = $1; THEN               DENDE=2; LC='Aktualisier'; BREAK;             FI;          DONE;          IF TEST $DENDE = '2'; THEN            DDAT=$3'  '$4;            ZW=EXPR(SEG[7,10]($ADAT)-1984);    : SOURCE-JAHR BESTIMMEN            ADAT=$ZW''SEG[4,5]($ADAT)SEG[1,2]($ADAT);            ZW=EXPR(SEG[14,17]($DDAT)-1984); : JAHR AUF 1984 RELATIVIERT            ZW=$ZW''SEG[11,12]($DDAT)SEG[8,9]($DDAT);            IF TEST $ADAT -LT $ZW; THEN A='NEIN'; FI;            IF TEST $ADAT = $ZW; THEN : SOURCEDATUM GLEICHALT              ACLK=SEG[1,2]($ACLK)SEG[4,5]($ACLK);              ZW=SEG[1,2]($DDAT)SEG[4,5]($DDAT);              IF TEST $ACLK -LE $ZW; THEN A='NEIN'; FI;            FI;              FI;  : IF FILE AUF DESTINATION GEFUNDEN          IF TEST $A='JA'; THEN  : AKTUALISIERUNG NOTWENDIG;            CH='J'; 1=$SNET$SF/$ADIR$AFIL; 2=$DNET$DF/$ADIR$AFIL;            IF TEST $NAFRA='JA'; THEN              ECHO-N $LC'en?: '$2' ([J]/N)'; READ-E CH; ECHO;            ELSE              ECHO CP PRIO 15 $1>$2;            FI;            IF TEST $CH='J' -O $CH='j' -O TOFIX($CH)='13'; THEN               WAIT;CP PRIO 15 $1>$2--;            ELSE              IF TEST $PASS='2' -A $DENDE='1'; THEN                ECHO-N 'Entfernen?: '$1' (J/[N]) (Abbruch mit A) '; READ-E CH; ECHO;                IF TEST $CH='J' -O $CH='j'; THEN RM $1; FI;                IF TEST $CH='A' -O $CH='a'; THEN BREAK; FI;              FI;            FI;          FI;        FI;  : OF UPDATE UND FILEEINTRAG      FI;  : OF IF TEST $1!='**FREE**' ...    FI;  : NEUER ORDNER ODER NICHT  DONE;  PASS=EXPR($PASS+1);  RM $SPATH $DPATH;  IF TEST $PASS='2'; THEN     : SOURCE WIRD ZUR DEST U.U.    ZW=$DF;   DF=$SF;      SF=$ZW;    ZW=$DNET; DNET=$SNET;  SNET=$ZW;    ZW=$DDEV; DDEV=$SDEV;  SDEV=$ZW;    O $DPATH; DIR-E $DNET$DF;       O $SPATH; DIR-EA $SNET$SF; NAFRA='JA';  FI;DONE;IF O /NIL; ER /NIL; CF $DNET$DDEV/UMNT; THEN;   ECHO $DNET$DDEV geschlossen; FI;    IF O /NIL; ER /NIL; CF $SNET$SDEV/UMNT; THEN;   ECHO $SNET$SDEV geschlossen; FI;    EXIT(-1);