|
Es müßten alle HTML-Elemente entfernt bzw. in ISO8859-Zeichen
umgewandelt
und dann alle iso-Zeichen in IBM437-Zeichen umgewandelt werden.
#istep.bsh #Schellong/Sep.1998 set -f let `ver n`'+0<242' && { echo "Dieses Script benötigt mindestens bsh-Version 2.42 !" ver; exit 1 } #T=/ #[ `ver s` == dos ] && T=\ [ `ver w` == shw ] && read "-?<Enter>: " local Ls="DIR /b/l/a:-d/o:en" VER ¦ grep -iq caldera && Ls="xdir -d /b/x" VER ¦ grep -iq dr.dos && Ls="xdir -d /b/x" N=000000 Init=0 Enum=000 Max=000 Flags=Avn Byte=0000000000000 Space=0000.0 Line="`prints s150-`" Titel="`prints s50-`" expr `pwd` :isDir '^%([a-zA-Z]:%)' ¦¦ isDir='' isDir="$isDir\istep.dir" TmpDir=. ifset -E TEMP && { TmpDir="$TEMP"; conv -F\ TmpDir [ ! -d "$TmpDir" ] && TmpDir=. } [ "$TmpDir" == . ] && { print "%r %r ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%r × Sie sollten idealerweise die Umgebungsvariable TEMP ×%r × auf ein gültiges Verzeichnis einer RamDisk setzen. ×%r × Siehe 'Hilfe' im Menü. ×%r ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××" } err() { local el=e [ $# -ge 2 -a "$1" == -l ] && el=l [ $# -ge 2 ] && shift [ $el == e ] && print -ru2 "istep.bsh: --- $1 ---" [ -f $isDir\istep.log ] ¦¦ return 0 [ $el == e ] && print -r "--- $1 ---" >> $isDir\istep.log [ $el == l ] && print -r "+ $1" >> $isDir\istep.log return 0 } vor00() { let "${{#1}==2" && $1=0${{1} let "${{#1}==1" && $1=00${{1} let "${{#1}==0" && $1=000 } Funktion()) { case "$1" in tmpfiles) local dir=$2 vnam=_______________ e=000 tmp shift 2 for vnam in $* do for e from 200 to 299 repeat do tmp=$dir\bsh_tmpf.$e [ -e $tmp ] ¦¦ { :>$tmp; $vnam=$tmp err -l "tmpfiles(): $vnam=$tmp"; continue 2; } done err "Zuviel temporäre Dateien." for vnam in $* do [ -f ${{vnam} ] && DEL ${{vnam} done exit 1 done return 0 ;; homedir) if [ ! -e $isDir ] then echo "Verzeichnis '$isDir' existiert nicht." echo "Soll es erzeugt werden? [jn]: %c" read Line [ "$Line" == j ] ¦¦ return MD $isDir [ ! -d $isDir ] && exit 1 Funktion mkini ¦¦ return echo "%n%t!!! Besichtigen Sie die erzeugte ini-Datei !!!" return 1 else [ ! -d $isDir ] && err "$isDir existiert, ist aber kein Verzeichnis!" && exit 1 [ -s $isDir\istep.ini ] ¦¦ { err "'$isDir\istep.ini' fehlt!" Funktion mkini ¦¦ return echo "%n%t!!! Besichtigen Sie die erzeugte ini-Datei !!!" return 1 } fi [ "$2" == lesen -o "$2" == edit -o $Init -gt 0 ] && return [ -s $isDir\istep.log ] && { cat $isDir\istep.log >> $isDir\istep.gol catv /%j >> $isDir\istep.gol } echo > $isDir\istep.log DIR $isDir\istep.log ¦ grep -i 'istep *log' ¦ read - - - Line catv /">>> $Line <<<%j" > $isDir\istep.log Init=1 return 0 ;; mkini) > $isDir\istep.ini echo "[ScanDirs]" echo "c: d: e: f: g: h: i: j: k: l: m: n:" echo "o: p: q: r: s: t: u: v: w: x: y: z:" echo "; Existierende RamDisk-L:, CDROM-L:, etc., weglöschen!" echo "; Es können beliebige, reine Dir-Pfade gesetzt werden." echo "%n[SaveFiles]" echo "c:\autoexec.bat c:\config.sys" echo "c:\windows\*.ini c:\windows\*.grp c:\windows\*.dll" echo "c:\windows\*.dat c:\windows\system\*.dll" echo "; Reine Verzeichnispfade werden rekursiv durchsucht!" echo "%n[EditCommand]" echo "edit" echo "; Nur ein(!) Kommando, auch mit Optionen." echo "%n[LineComparator]" echo "lnot.exe" echo "%n[ScanDirsNFR]" echo "; Nicht bei dieser Script-Version." echo "%n[ScanDirsNotNFR]" echo "; Nicht bei dieser Script-Version." echo "%n[SaveFilesNFR]" echo "; Nicht bei dieser Script-Version." echo "%n[SaveFilesNotNFR]" echo "; Nicht bei dieser Script-Version." echo "%n[FilterExpressions]" echo ";\istep%.dir bsh_tmpf%.[0-9]%{3%}" echo "; Nicht bei dieser Script-Version." echo "%n[PackCommand]" echo "; Nicht bei dieser Script-Version." echo "%n[CkSumCommand]" echo "; Nicht bei dieser Script-Version." >< [ -s $isDir\istep.ini ] ¦¦ err "'$isDir\istep.ini' fehlgeschlagen!" && exit 1 err -l "$1(): $isDir\istep.ini" return 0 ;; rdpar) [ -f $2 ] ¦¦ return 0 err -l "$1(): $2 $3" < $2 while readl Line do conv -l Line expr "$Line" :: "^%[$3]" && break done while readl Line do ifset Line ¦¦ continue expr "$Line" :: '[!-~]' ¦¦ continue expr "$Line" :: '^[ %t]*;' && continue expr "$Line" :: '^%[[a-zA-Z]%{1,%}]' && break print -r "$Line" done >< return 0 ;; mkscanlst) local ziel=$isDir\scanlist.$2 file err -l "$1(): $2" [ -s $ziel ] && :>$ziel for file in `Funktion rdpar $isDir\istep.ini scandirs` do conv -t/\F\ file { expr "$file" :: '^[a-zA-Z]:'; inv; } &¦ expr "$file" :: '^..[^\]' && err "Fehlerhaft: '$file'" && { :>$ziel ; break; } [ ! -d "$file" ] && continue print -r "$file" >> $ziel done [ ! -s $ziel ] && { err "Keine gültigen [ScanDirs]!" [ -f $ziel ] && DEL $ziel return 1 } return 0 ;; mksavelst) local ziel=$isDir\savelist.$2 file err -l "$1(): $2" [ -s $ziel ] && :>$ziel for file in `Funktion rdpar $isDir\istep.ini savefiles` do conv -t/\F\ file { expr "$file" :: '^[a-zA-Z]:'; inv; } &¦ expr "$file" :: '^..$' &¦ expr "$file" :: '^..[^\]' && err "Fehlerhaft: '$file'" && { :>$ziel ; break; } Funktion savels "$file" >> $ziel ¦¦ { :>$ziel ; break; } done [ ! -s $ziel ] && { err "Keine gültigen [SaveFiles]!" [ -f $ziel ] && DEL $ziel return 1 } return 0 ;; mkdir) local nam=$2 l=' ' dir mdir expr "$nam" :l '^%([\/]%)' expr "$nam" :l '^%([a-zA-Z]:%)' && { [ ! -d $l ] && err "Kann '$l' nicht erzeugen!" && return 1 l='' } conv -"t\ t/ " nam for dir in $l$nam do ifset mdir && mdir="$mdir\$dir" ifset mdir ¦¦ mdir=$dir [ -d "$mdir" ] && continue [ -e "$mdir" ] && err "'$mdir' existiert als Nicht-Verzeichnis!" && return 1 MD $mdir [ -d $mdir ] ¦¦ err "'MD $mdir' fehlgeschlagen!" && return 1 done return 0 ;; cpmvback) local ali=$isDir\alias.$3 qdir=$isDir\save_dir.$3 local alinam=_____ zdir #bvp=$4 err -l "$1(): $3 $2 $4" Funktion cktab 2 0 $ali ¦¦ return 1 grep "^[$4]%." $ali ¦ while read alinam Line do ifset alinam Line ¦¦ { err "Inhaltslos: '$alinam' '$Line'"; continue; } expr "$alinam" :: '^[SNC]%.[a-z]%{3%}$' ¦¦ { err "Fehlerhaft: '$alinam' $Line"; continue; } [ ! -w $Line -a -f $Line ] && { err "Schreibschutz: $alinam --> $Line"; continue; } [ ! -f $Line -a -e $Line ] && { err "Keine Datei: $Line"; continue; } expr "$Line" :zdir '^%(.*%)\[^\][^\]*$' ¦¦ { err "Fehlerhafter Pfad: $Line"; continue; } ifset zdir ¦¦ zdir=\ [ -d $zdir ] ¦¦ Funktion mkdir $zdir ¦¦ continue [ `$2 $qdir\$alinam $Line > NUL ¦2 wc -c` -gt 0 ] && err "'$2 $qdir\$alinam --> $Line' fehlgeschlagen!" done return 0 ;; rddat) local file=$isDir\istep.dat n=000 f=___ #max=0000 #min=9999 Enum=000 Max=000 Flags=Avn [ -s $file ] ¦¦ return 0 err -l "$1(): ..." < $file while read n f Line do { ifset n f Line; inv; } &¦ expr "$n" :: '[^0-9]' &¦ let 'n<1¦¦n>999' &¦ { expr "$f" :: 'A' && let Enum; } &¦ expr "$f" :: '[^Avn]' &¦ expr "$f" :: '.A' &¦ expr "$f" :: 'n.' &¦ let "${#f}>3¦¦${#Line}>48" && err "Inhalt ist defekt: '$file'" && { >< ; exit 1; } #let "n<min" && min=$n let "n>Max" && Max=$n expr "$f" :: 'A' && { Enum=$n; Flags="$f"; Titel="$Line"; } done >< vor00 Enum err -l "$1(): $Enum $Flags '$Titel'" return 0 ;; wrdat) local datf=$isDir\istep.dat n0=$2 f0=$3 n=000 f #t="$4" n0=$((n0)) err -l "$1(): $2 $3 '$4'" [ -f $datf ] && attrib -r $datf >NUL [ -f $datf ] ¦¦ :>$datf Funktion tmpfiles $TmpDir tmpdat < $datf while read n f Line do expr "$f" :f '^A%(.*%)$' && [ "$f0" == n ] && f=A${f}n expr "$f0" :: '[AD]' && let "n==n0" && f=A$f expr "$f0" :: 'D' && let "n>n0" && continue prints s4s7s4s $n $f "" "$Line" >> $tmpdat done >< [ "$f0" == v ] && prints s4s7s4s $n0 Av "" "$4" >> $tmpdat cat $tmpdat > $datf DEL $tmpdat; unset tmpdat [ -f $datf ] && attrib +r $datf >NUL #Funktion rddat ¦¦ return return 0 ;; cktab) local wpz=$2 sub=$3 w=000000 z=000000 c=000000 [ -s "$4" ] ¦¦ return 0 err -l "$1(): Teste Tabellen-Datei: $4" [ $# -gt 4 ] && N="$IFS" IFS="$IFS$5" wc $4 ¦ read z w c [ $# -gt 4 ] && IFS="$N" let 'w-=sub,z-=sub, w<0¦¦z<0 ¦¦ !w&&c&&!sub¦¦w%wpz¦¦w/z!=wpz¦¦w%z' && err "Inhalt ist defekt: $4" && return 1 return 0 ;; free) local df=$isDir\istep.ini m=$((1024*1024)) byte [ -f $isDir\istep.ini ] ¦¦ df='' DIR $df ¦ grep -L '[0-9]' ¦ catv =byte: expr "$byte" :byte '%([0-9][0-9.,]*%)' ¦¦ byte=0 conv -d.d, byte Space=$((byte/m)).$(({[byte%m]*10}/m)) Byte=$byte err -l "$1(): $Space $Byte" return 0 ;; space) [ -s "$2" ] ¦¦ return 0 local sum=0000000000 cs=$((32*1024)) sz < $2 while readl Line do expr "$Line" :: '[!-~]' ¦¦ continue [ -s $Line ] ¦¦ continue sz=`fsize $Line` let 'sum += [sz&~(cs-1)] + !![sz&(cs-1)]*cs' done >< let 'sum>=Byte' && err "$1(): Speichermangel: $sum >= $Byte" && return 1 err -l "$1(): $sum < $Byte" return 0 ;; savels) local file="$2" dir err -l "$1(): $2" if expr "$file" :: '[*?]' then expr "$file" :dir '^%([^*?]*\%)[^\]%{1,%}$' ¦¦ err "Fehlerhaft: '$file'" && return 1 conv -F\ dir $Ls "$file" ¦ while readl Line do expr "$Line" :Line '^[a-zA-Z]:%(..*%)$' print -r "$dir\$Line" done else [ -d "$file" ] && $Ls /s "$file" [ -f "$file" ] && print -r "$file" fi return 0 ;; mklist) local ziel=$3 quelle=$isDir\scanlist.$2 n=000000 [ -s $quelle ] ¦¦ err "Keine oder leere Scan-Liste." && return 1 [ -f $ziel ] && attrib -r $ziel >NUL [ -s $ziel ] && :>$ziel err -l "$1(): $2 $3" < $quelle while readl Line do ifset Line ¦¦ continue [ ! -d "$Line" ] && err "Kein Verzeichnis: $Line" && continue echo "%tListe: Filter: Ç-×,bsh_tmpf,istep.dir -- '$Line'" 3>> $ziel $Ls /s "$Line" ¦ while readl Line do expr "$Line" :: '[Ç-× %t%r%z]' && err "Unerlaubte Zeichen: '$Line'" && continue expr "$Line" :: 'bsh_tmpf%.[0-9]%{1,3%}' &¦ expr "$Line" :: '\istep%.dir' && continue echo "%r%tmklist($((++n)))%c" prints su39s11s2s `fsize $Line` `mtime $Line` "" $Line done >< echo done >< [ -f $ziel ] && expr "$ziel" :: 'liste%.' && attrib +r $ziel >NUL return 0 ;; mkdiff) local neu=$3 ziel=$isDir\diffs.$2 #alt=$isDir\liste.$2 local size=0000000000 time=0000000000 ncziel=_______ err -l "$1(): $alt $3 $ziel" Funktion cktab 3 0 $neu ¦¦ return 1 Funktion cktab 3 0 $alt ¦¦ return 1 Funktion tmpfiles $TmpDir new changed deleted alt cat $isDir\liste.$2 > $alt N=0 < $neu while readl Line do echo "%r%tmkdiff[neu]($((++N)))%c" grep -Fmq -e "$Line" $alt ¦¦ catv Line /%j >> $deleted done >< echo N=0 echo '[New]' > $new echo '[Changed]' > $changed < $deleted while read size time Line do echo "%r%tmkdiff[n+a]($((++N)))%c" ncziel=new aline="`grep -Fm -e "$Line" $alt`" && ncziel=changed prints s9s11s2s $size $time "" $Line >> ${{ncziel} ifset aline && catv '/;' 1,,aline >> $changed done >< echo N=0 echo '[Deleted]' > $deleted < $alt while read size time Line do echo "%r%tmkdiff[alt]($((++N)))%c" grep -Fmq -e "$Line" $neu ¦¦ prints s9s11s2s $size $time "" $Line >> $deleted done >< echo [ -f $ziel ] && attrib -r $ziel >NUL cat $new $changed $deleted > $ziel DEL $new; DEL $changed; DEL $deleted; DEL $alt unset new changed deleted aline alt [ -s $ziel ] ¦¦ err "Fehlschlag: $ziel" && return 1 Funktion cktab 3 3 $ziel ';' ¦¦ return 1 attrib +r $ziel >NUL return 0 ;; mkdiffE) local neu=$3 ziel=$isDir\diffs.$2 #alt=$isDir\liste.$2 local size=0000000000 time=0000000000 ncziel=_______ err -l "$1(): $alt $3 $ziel" Funktion cktab 3 0 $neu ¦¦ return 1 Funktion cktab 3 0 $alt ¦¦ return 1 Funktion tmpfiles $TmpDir new changed deleted alt anp cat $isDir\liste.$2 > $alt echo "%r%t$isDir\lnot.exe ..." echo "%r%tmkdiffE[neu]( )%b%b%b%b%b%b%b%b%b%b%b%c" $isDir\lnot.exe -v $neu $alt $deleted [ $? -lt 4 ] ¦¦ return echo; N=0 echo '[New]' > $new echo '[Changed]' > $changed < $deleted while read size time Line do echo "%r%tmkdiffE[n+a]($((++N)))%c" ncziel=new aline="`grep -Fm -e "$Line" $alt`" && ncziel=changed prints s9s11s2s $size $time "" $Line >> ${{ncziel} ifset aline && catv '/;' 1,,aline >> $changed done >< echo; N=0 unset aline echo '[Deleted]' > $deleted [ -f $ziel ] && attrib -r $ziel >NUL cat $new $changed > $ziel :>$new ; :>$changed < $neu while read - - Line do echo "%r%tmkdiffE[neup]($((++N)))%c" catv Line /%j >> $new done >< echo; N=0 < $alt while read - - Line do echo "%r%tmkdiffE[altp]($((++N)))%c" catv Line /%j >> $changed done >< echo; N=0 echo "%r%t$isDir\lnot.exe ..." echo "%r%tmkdiffE[alt]( )%b%b%b%b%b%b%b%b%b%b%b%c" $isDir\lnot.exe -v $changed $new $anp [ $? -lt 4 ] ¦¦ return echo; N=0 < $anp while readl Line do echo "%r%tmkdiffE[anp]($((++N)))%c" grep -Fm -e "$Line" $alt >> $deleted ¦¦ err "Seltsamerweise fehlt '$Line' in '$alt'." && return 1 done >< echo cat $deleted >> $ziel DEL $new; DEL $changed; DEL $deleted; DEL $alt; DEL $anp unset new changed deleted alt anp [ -s $ziel ] ¦¦ err "Fehlschlag: $ziel" && return 1 Funktion cktab 3 3 $ziel ';' ¦¦ return 1 attrib +r $ziel >NUL return 0 ;; dosave) local quelle=$isDir\savelist.$2 zdir=$isDir\save_dir.$2 local ali=$isDir\alias.$2 anu=$((36#aaa-1)) ziel [ -s $quelle ] ¦¦ return 0 [ -d $zdir ] ¦¦ MD $zdir [ -d $zdir ] ¦¦ exit 1 [ -f $ali ] && attrib -r $ali >NUL [ -s $ali ] && :>$ali err -l "$1(): $2" N=0 < $quelle while readl Line do ifset Line ¦¦ continue expr "$Line" :: '[Ç-× %t%r%z]' && err "Unerlaubte Zeichen: '$Line'" && continue echo "%r%tdosave($((++N)))%c" ziel=$zdir\S.$((36#, ++anu)) COPY $Line $ziel > NUL [ -f $ziel ] ¦¦ err "'COPY $Line $ziel' fehlgeschlagen!" [ -f $ziel ] && catv /S.$((36#, anu))%t Line /%j >> $ali done >< echo Funktion cktab 2 0 $ali ¦¦ return 1 [ -f $ali ] && attrib +r $ali >NUL return 0 ;; dodiffs) local ali=$isDir\alias.$2 alinam path err -l "$1(): $2" [ -s $isDir\diffs.$2 ] ¦¦ err "Fehlt oder leer: 'diffs.$2'" && return 1 [ -f $ali ] ¦¦ :>$ali Funktion cktab 2 0 $ali ¦¦ return 1 Funktion cktab 3 0 $isDir\liste.$2 ¦¦ return 1 Funktion cktab 3 3 $isDir\diffs.$2 ';' ¦¦ return 1 Funktion tmpfiles $TmpDir chdel alinew N=0 for alinam in changed deleted do Funktion rdpar $isDir\diffs.$2 $alinam ¦ while read - - path do catv path /%j >> $chdel echo "%r%tdodiffs[$alinam]($((++N)))%c" done echo;N=0 done [ -f $isDir\savemiss.$2 ] && DEL $isDir\savemiss.$2 < $chdel while read path do echo "%r%tdodiffs[chdel]($((++N)))%c" grep -Fmsq -e "$path" $ali ¦¦ grep -Fms -e "$path" $isDir\liste.$2 % >> $isDir\savemiss.$2 ¦¦ err "'$path' nicht vorhanden in liste.$2!" && catv /000%t000%t path /%j >> $isDir\savemiss.$2 done >< echo;N=0 < $ali while read alinam path do echo "%r%tdodiffs[alias]($((++N)))%c" grep -Fmq -e "$path" $chdel && { catv alinam /%t path /%j >> $alinew ; continue; } DEL $isDir\save_dir.$2\$alinam done >< echo [ -f $ali ] && attrib -r $ali >NUL cat $alinew > $ali [ -f $ali ] && attrib +r $ali >NUL DEL $chdel; DEL $alinew unset chdel alinew Funktion cktab 2 0 $ali ¦¦ return 1 return 0 ;; laden) local ali=$isDir\alias.$2 anu=$((36#aaa-1)) local zdir=$isDir\save_dir.$2 bvp=X ziel par [ -d $zdir ] ¦¦ MD $zdir [ -d $zdir ] ¦¦ exit 1 err -l "$1(): $2" Funktion cktab 2 0 $ali ¦¦ return 1 Funktion cktab 3 3 $isDir\diffs.$2 ';' ¦¦ return 1 [ -f $ali ] && attrib -r $ali >NUL N=0 for 2 bvp par in N new C changed do Funktion rdpar $isDir\diffs.$2 $par ¦ while read - - path do echo "%rladen[$bvp]($((++N)))%c" expr "$path" :: '[!-~]' ¦¦ continue [ -f $path ] ¦¦ { err "Fehlt beim Laden: '$path'" continue; } ziel=$zdir\$bvp.$((36#, ++anu)) MOVE $path $ziel > NUL [ -f $ziel ] ¦¦ err "'MOVE $path $ziel' fehlgeschlagen!" [ -f $ziel ] && catv /$bvp.$((36#, anu))%t path /%j >> $ali done echo done unset path [ -f $ali ] && attrib +r $ali >NUL Funktion cpmvback COPY $2 S ¦¦ return return 0 ;; delete) local zdir=$isDir\save_dir.$2 par=_______ ddir err -l "$1(): $2" Funktion cktab 3 3 $isDir\diffs.$2 ';' ¦¦ return 1 N=0 for par in new changed do Funktion rdpar $isDir\diffs.$2 $par ¦ while read - - path do echo "%rdelete[$par]($((++N)))%c" ifset path ¦¦ continue expr "$path" :ddir '^%(.*%)\[^\][^\]*$' ¦¦ { err "Fehlerhafter Pfad: $path"; continue; } [ -f "$path" ] ¦¦ continue [ -w $path ] ¦¦ { err "Schreibschutz: $path" continue; } DEL $path [ -f $path ] && { err "'DEL $path' fehlgeschlagen!" continue; } ifset ddir && [ -d "$ddir" ] && expr "$ddir" :: '^[a-zA-Z]:$' ¦¦ RD $ddir 2> NUL done echo done unset path [ -s $isDir\diffs.$2 ] && Funktion cpmvback COPY $2 S ¦¦ return [ -d $zdir ] && { DEL "$zdir\S.*" 2> NUL DEL "$zdir\N.*" 2> NUL DEL "$zdir\C.*" 2> NUL; } for par in scanlist savelist liste diffs alias #savemiss do ddir=$isDir\$par.$2 [ -f $ddir ] ¦¦ continue [ -w $ddir ] ¦¦ attrib -r $ddir >NUL echo "%rdelete[DEL]($((++N)))%c" DEL $ddir [ -f $ddir ] && err "'DEL $ddir' fehlgeschlagen!" done echo return 0 ;; install) local ali=$isDir\alias.$2 err -l "$1(): $2" Funktion cpmvback MOVE $2 NC ¦¦ return [ -f $ali ] && attrib -r $ali >NUL grep '^S%....' $ali ¦ cat > $ali #!Pipe-Files nötig! [ -f $ali ] && attrib +r $ali >NUL Funktion cktab 2 0 $ali ¦¦ return 1 return 0 ;; mklnot) local r=0 err -l "$1(): ..." Funktion lnotcode ifdef -f lnotcode ¦¦ err "lnotcode() nicht existent!" && return 1 Funktion tmpfiles $TmpDir exetmp #fprint lnotcode ¦ Funktion decode $exetmp ¦¦ r=1 fprint lnotcode > $exetmp Funktion decode $exetmp ¦¦ r=1 [ -f $exetmp ] && DEL $exetmp unset exetmp unset -f lnotcode return $r ;; decode) local a=000 b=000 c=000 d=000 ziel=$isDir\lnot.exe A=000 B=000 C=000 N=0 err -l "$1(): ..." 3> $ziel tr -d '[\0- ]=' < $2 ¦ tr '[?-~]' '[\0-\63]' ¦ base -b +10 ¦ while readl Line do ifset Line ¦¦ continue echo "%r%tdecode($((++N)))%c" for 4 a b c d in $Line do (( A=(a<<2)¦(b>>4), B=[(b<<4)&255]¦(c>>2), C=[(c<<6)&255]¦d )) ifset d && catv A /%n B /%n C /%n =3 && continue ifset c && catv A /%n B /%n =3 && continue ifset b && catv A /%n =3 done done >< echo unset A B C base -10 +b < $ziel ¦ cat > $ziel #pipe-files nötig! err -l "$1(): crc==527276123? ..." [ ! -s $ziel ] &¦ let `crc $ziel`"!=527276123" && err "Erzeugung '$ziel' fehlgeschlagen!" && return 1 return 0 ;; lnotcode) lnotcode())) { RTgw?PC??O?_??s?~~~w?W??????????N_????C?}t@i[_?????????????????????????? ???????????@???????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ??????????????????????????????????Ay[OCmaPY}?jOorQEJJ_G?apwk?GzYgxG?b?YO ?Gc]b?AHJi_?yGO@gWo?bk?roGnWa~ax~v~{{izbWSKeM?Tt¦gBL_N^XaOyI?Jc@?LNb_{KG _}NwaPyM?GrYI}iJNl_?_^{??fKFno?AaRzW?GFFZ_`qI?K}u_@qGjCCs}¦FM}¦qEWK}u??? \?]BNlg??FSMno?OM}¦v@wn¦yoNhA_IJvoNYaPy_?Gc]h?A`c??juGz?lChVrQD^s}^yblIJ x~kroAyM@jwAnqgGmUwGI{~{{yiBNfoFDFXF_ByQ??LqOF[F_ByR?@xqLz_@UJkA?Ks`[ais Xwk]^?^LGVG_lCaz?OBLGVGVOIMg?CaMoJPHrQDqAj_@UJk??Ks`[oNhaOEs?KsYaPYU?GcM e??IoFOKmC??bkAz[??ep_[@K}smb_Y}?jw]AJ{iAMbO?N{ua?B~LgW?~rYC?M_C?dBgUo_m b_Y}?dXVnagGnqgGyNC?VtzBTd[mb_Y}?bN?a~AxJo?e?_Q?t?@Ewn[lV?tsAZcX?Jgn?M_I ?T¦]ownklCqIP_JLGZcM?JhG?McB?Pyw?BVLGWc]\?AK@fW?m?OtrQEHFf_?b?Xy?J_DL[s` aPx{?GoE^_Aw@bVLGWc]_?AK@gG?m??dbKiMujib?[s`F{K]m??dpPXs?Ks`Fpyw@AVDDf_? rQC^Fj_DH[SU^?BLGP{]m?WdpPY??Ks`F{Mw??EJtwn]M¦¦sEQY?N~¦sBaYIRoCqzRnG[oQJ oWnR_{KEy}KztvOZa¦ge_B{?HkWF~oXs@qZ~VoGFy{Oe~t[A@}m¦ozO?a¦]Jvbn^\@[e_B~~ \?oeME[@[_Weae[@a¦MBooZjxRnV\@mJuaY?No?ep_^~@fOFHn¦^?_^jpqZ~ToGFy{BBlCAz ?_BLG[MxF_AyT_?mb`y}?mbi~z_B?DBgAo[???C?TWnkTd]JR_QJ{Onu\AyB^_W?\Ojj?SY? N?@t}mk]p_O?bTWEyoxEPwgDa?Q?NO@t¦WNA?gnYar{J~vVka{WjoT¦]V[LTa}qBz@@UTwl} @Gtu~bNHXglE@eYzA_???EWrseZv{wBAKG_SReYJP_XeK¦He¦~LeaSWEXgL}@_@tt]kFa_QJ uW_@OSYJpgtU~bnA\m}Ju[W@?Gn@VtzHotUJzN¦u@n¦u@M_F?GNC@GnOV[LTa}q@zAY?Td]J \_PepsZ{?????K\E¦_C?psZo??@M_sWE?mlLatzga_]s?Atl?GnW_~kK\qNPwqz~hySGp_Wl A?FjFkWEJ?_@yp^E@akG?]kOp_WiA?FjAUXi?Mbm@GNC@N¦EyGl]yG?~?FUwRgLE@_GJ¦fwZ atwEao]HPmaJVma?Nqtt@Z_@?MkAK{?JoFVP_~wA^?UB~_L}AUXi?Mak@GNC@E_@_Gl]@n{v y?_M_{OCaSZyA{@¦BWl]@n{vY_Fga_QBp?Pg?WAJV_Z~\oJgxOuBp?QHPn_JoFsV~vZyyA{J _{OAatwE~v[AY_FgVOQBp?QB~_LtMuXg?gM??Wl]@n¦v@MaoBWNC@gdE¦_n?^Qz~\njg}_iB p?J~\nbg{OiBp?IJV_Z~\oPi?]_^@GNC@MkKXe_@??A?yL{N_{OCY_Fga_UBp?GJoFODm?C? yoGroD@i?m`u@WNC?_n?\?Uw?_Bj?bN?U_nOaTZipcZbAguEuj}HPmbhNoML`li~atZgI¦?@ TnQHPmYHPmaHPmQJPnO@PmRhtOIJVmYI@w`EwroI\?Nho?IJPmWjPmaHPmoJoFwH_F~~BVSB ~szk_vzk?FSByXgA_BwkA?@sXg?}JO_?\OYB^nW@\DfFPmw@?GlEyaS@??n?\Ov~PmyJPmgd ?_?JoFO¦m_g?yoaJucJE`¦o?AGNyGFrrXn¦E~EYJPnpeSEbe?M`{~WNC@gnOa¦jE`}W?AEgS @\o?SN¦uzm`ECWNC@eg?Xeg?~vZwyICC_{OGpsZm??BEPlkIbWZY^wdEwMdP?WuEuf}JTm?j s?DU{gdEvgdEwGdEvGlE{_DEvMfe?Gl]vggFaCZZN?hs?}fP?GlUvalUwGnAA{@}@w@~~ott ?SgzTmps?}en?GluyGl}wGnIF_^rhghC~rJcHghL~rJlI{CJoFOByW{?gAsGl??JoFTG_Bwj A?@sO^¦uzN¦uyN¦u¦ma]CGNC@blEzFSRY_HgH_F~\nZgapABp?W¦?_@sEgL}¦_Dt@Z_h?]kE atwEas[CSEgByCKA_{OCgAgGl??JoFSByS[@~sZmasZmNOG?^A]w?_AHPmwHPnA?NasG?FSH gAkGl??JoFSDm?C?yoGro?n?\?NhDOEJPlx?aSZ_~sZ]~szq_vzq?FwByPF~bWZY^rlEwFSM atwE~v[AY_Rgu?EBp?QJPmAHPlyL`lh~aSZ_asZ]MsZ[[paJVlyI@wl]wG_F~sZ_~sZ]asZ] MsZ[[maL`lh~atZ_I¦Aw?C?jodB~\mB~\nbgUouBp?YHPnGJoFwByWj}_vzq?FsMatwE~v[A Y_Jg[_EBp?Q?^lkI\@Q?^lkY\?yJV_Z~\oHi@]`W?WNC@GL}z_@tWgLM{?E_JOas??n?\RU_ Ioas??n?\Qr~\mr~\mb~\nZgT_}Bp?WzPmptCugAYAW@~vZuyCKN_{OENOG?\?Uw?OBj?bN? A{@sEgL}¦_Dt@Z_h?]kEatwEas[CSEgByN??_{OCasZeOGdEyN¦Exn¦M¦GL}¦?@}?}ca~WuE uj{zPm`tBWl]@n{vY_Rgp?ABp?QJPmaHPmYL`li~aSZgasZeMsZc[paJVmYI@wl]yG_F~sZg ~sZeasZeMsZc[maL`li~atZgI¦Aw?C?jodB~\mb~\njgPoqBp?YHPnOJoFwByXr{_vzs?FsL atwE~r\i?m`^?GNC@G@}wohsCw@}wphsBWl]@n{vY_VgP_ABp?R~\njg?O]Bp?J~\nbg}?YB p?IB^nW@\?f~\nZgyOYBp?IJPn@^VkfB?KOBqoNJ?{kBjoNJ?{kBqoNJ?zWBqoNJ?zsBTWnk _}pOTglu@GlE@jgg?Onu\OMyK?EB~_Dt?zhQ?WN}?fSBmfS@_~wB\OMyd?EB~_Pt?zin?WN} @VSBmlC@Y_@g}?DOA{@s@Zbu?]kAK{@OSgtEkDBgineBp?pObSYoSEgAyKKL_{OEA~XtBUgh YNo?Y_Jgk_uBp?YJp_SC?DBg]?ABp?H]q[LTa}qBNno@GFSDm?C?ypMJFno@s]MJP_QH`qwG ~oZ{?RN?V[NBTWnkTgluA?nu\PzjBn{M~?EJFno@s]N~dqwG_rz{?O@ty}bL¦~{U~_FgTnbg tn]B^_W?\PKJ¦fSG~pW??n{U?_J~\_Rgxn\XVdvA@_@Ta}oroD@O~vWCyIZ~V[LTa}qw?O@O K{@O~vWCyHR~V[KroDAw?O@OK{@OyGV~oz_@?D@OK{@OyFf~otUJzDYJ\_OJ¦foT_~xW^_M} ToAHL__AagOI?haJ{MkL¦¦yB~b@~y[[EA?J~~wcud?Aw~~¦]V[GA?DUJzDYJ\_PUyJr~a{X] V[GA?DUJzJ_?PGl]@Ks`caU??DvBTWnkatwCs]M@hvwF~~usOghEAgl]@GlMAGlU@ks`[_Jj @TBg^n}XV[LTa}qJV_RPw~]F^_[A?FOEm?S?SMkQlB}JV_QJR_aJT_ZLGVGAyoPOyDB~V[My @O?zDfoF[qmJulFbpw\}@o??a¦ip@LNbpg]??n}JolN_@VoAa¦jRwweFa_HAMpX{@vJTgG?A eDBgV^¦XA{@t@gCe^_J~~Z_??dBv@fwA??Hs@Z_@?MkAK{@OK{@OmFoASMbOAWNCAIAO?h`O yAf~UOn?\OY@HgwA~~uw??HO¦oYM?_?A\?Uw?_Bj?bN?SBN?SJaK?dBgf?eBp?bBTWnkasWC a¦Q@y_?AM{Hr@yM[?BN?yofF@hO?A?Aw~~¦\otUJzGlE@GlU@_KEf?ABs_AJq?nQ\PA@oO?A [_gzrFKE`oY[?MkHpoYS??_?mN~~V[LTa}r~\_RghN¦XV[LTa}qJP_QXSdBgl~¦XUTvBTWnk atWGlCQIP_YJV_QJR_jLGVGK_vwE?FSCa{Jj@mkCSM_\~dvBTd]J¦Gl[@gNj@FGMMpxe?fOD yCG?yoNg?o@^VkKxFeOA\AMJ\oJu@?Ds@gcuX_JjGBkuX?HsBWn]yDO?as[AguWAyouJvbN? guOAguWAgu_AS}_T~tnB~o{zFeOA\@aJ\oIJ@I_@\O{B@wcCar{B}wdt?gn]yoNgK_AJNoNz aoUg?VO@ooCFa~[B{Gd[?gn^av{EM¦¦sBgc}Y?IJ\oQH\OQH^?ZBpoXg?_??owkuY?GJ¦fOO avoEaToEaTsCaV{EaV[Cowc]Y?IHVoQHVoZBTd]J¦GlC@_n?\DGD@O@qLaV}~rsG?FKBm?_? _rxc?_@sFwk]Y?GJuvOLa¦Kx@vKYat{EM¦ht¦]`e?Mk`yGg?yprgF?BjDrN?ypMJ{GNEABcv [}fgY~~~@wnB@OO?VtzBSBN?SDBgT^xZUqS@?FOHK¦HQSM`F~dlZUD?rutLOyBr}Utk¦~~¦s DGnWaPxc?gc]X_HWOGcF_{KCa{NBUrN?ot?rutLOy@V}Utk¦~~¦sDgnWgUWAaS[AaPxe?d`? aO]BooQJo{LWK{BBIO]J{oKva~wB}CAH@Gd[?gdt?gNE@GnEownkSt@PSM_T~tmJu?n?\@{] @~qJ}Glu~gkK_{WCTgNh@\Fh{yUHPnzgHNxZatz}_{OEownA_{GGM¦DvLWnPMpxe?fSNaO^~ @oNBStBgYntZU}k]a~kB}Gd\?anOIP]J¦oNqaVoAOgcTa{mJv}_v~gnX_{KCotXVTWnkatwG asWIA{@sLonZ\AuByoQJBseJsGNA@WNa~gNyAFKBm__?M{hqBF[D_{KCyobg`~~j?}`N~wnB yotOyEV}yoXRyHB¦K{@ZVT¦]oo??boXm?g{E[?IN@fGAJgo]SOyHLfOAaRxu?nqM@h??ng?? KmOejCAKpW^Ucwkua_@EPjc@?G?}c_?B[`EM@go?a~yp^rJ?{izb[gBp^tAJoONBOAV}~wn{ I~`qWGnf@`{U@tDH{yOqoIiMvW^q`¦eJownOO}_\?F[J[cO{BVOPy@G?\~S{GFOGN?ts@BoH \]OqoMn_A{@s@sIiAk@t?SMEwBJ?}]KTjCckGfON@AG{VFSF_Boa\OIkQOnuo}eW{tcBqayM FdCMaPxi?cKBuwnsa}ojyvJea}UHJeoAwoyH\_ABpOGuj?j?wNhs{BN?aSW?Jgw]SOyJLfOA arxu?n{u[_J~Lf?AgUgAgwO?gUoAgwW?~qXm?dUJzGlMAJPBacWEatWCrQDq?xFj@DBg\Nh\ otUJzGlU@BkU^?\qAZ_E?DBgV~jjBwnYs]NF`vwF??@Qy?K?UTvBTWnklByJV_RLGVGKs]NF `vwF???roMkCSM_o}dvBTWnkTd]J^_OJ~vSDyEw?yuWx^Oxs@Zb~~}l]_rs?^AfvPOGG?FSI a{[D@O?xPOhtPk[D??AJpoSD?BdDAfSwasSGaSSIyrBjJglD@_KDOGnoIRTOasSGaSSISGhD @H`OyFwD_{OEM{XsB^\D?_?A\OYBROGOyx{roD¦]V[LTa}qBz?HUT{\E~_??arx{@zx{?mkQ ¦sOA?o@sADZgWn¦X~sZ}_{WOa{\NA{@txwlE~d¦]a}T\otUJzDXVavWC_ro?^OiJT?WBDCIJ }mkJaoQXK{GjognOa~bvP?H??FSkasoI_ro?^PvjASeJuW?~AfS@PwnAQ_n?\^BjCGnXOW?~ AfS@PwnAQ_n?\^AJpt¦]V[GA?DUJzDXVavWCavwITmb^~dcJoFODmN~~ys]B~oDtCGK{?FwJ Tm`{~xchP_WXT_a@X?H^~k[C??AJP?aHP?hV~vWG~vWEacOCeDBgJNeBp?aB}n¦tAbv~~vSD mN~~yoGroD¦]V[LTa}qBz?`UavWCm?C?SBN?K¦HOSghC@H`OyNbw_{OGaTZ}aSZ{_~j~\O_¦ ~~¦t?}eC?GK{?FtsacOCeLF_a¦bv`vwF??`sTz_A?D?roBNQSDIIP?QWSMaz}GNCAGdU}gdE }GNy~vSDN^~~\D?roDB~\nz~\nqIP?QWSMaV}GNCAGNy~vSLN^~~\Oay~~}w~~~jIglE}glU }GdE~gdU~DZgf^yX?SZ{CTZ}yolUyHB}eQdE~@dU~glU~glE~DyJxTvBTWnkaswClBqJT_ZL GVGAyoPOyMJvV[GC?DUJzGl]@AnHI¦IsOKs`V[GA?DUJzGNk@DXVavWEavwG¦{W?oFSGgOOA HOB?A~?roDB~\_RgEntXUWdE~n^E??Ds]AK}@_IJpye??VSFm?C?SMaI¦wL}~n¦tGwK}A?GA \?j~L__AyFZvy]s?¦{]??FOCK{Bj?z_@?GdE~mkK¦{W?@FOvmD??SMn[¦{Zo?FOX~vWCK{@O yC~~a~_JoFsByZS?T}bl~DfjCn¦u@N¦u~m_u~wnwA{@¦ZMe[?DZ~\_RgfO@XUWnwA{@{UbN? SD^grN`XUWdE~Ie??FO]_[w?GN^E?G@sFaV~??s_?DAw?O@OT}ah}GNC@mkI¦{W??fOCT}b} ~n\E~_C?\@jvp_?@\@Rvpn??\?yw?O@OSN¦u@M_p~GNC@_n~^A~vp_?B\?Uw?@Bj?bN?a¦Y@ wn~wA¦@Q¦sZ}?O@s@BN?yoMw??DYA¦AJv¦FbaX\}@wnFVtyJxTvBTWnk_}oAk?EJR_ZvoOG? \Oio?n^@@?@t?j??atWCk^?aR_WIoZO¦rQDqEgdE~glE@aV~m?s?_Gl]~lFbaW\}@wlE~mkC SM_v¦gndV[LTa}qBz?PUTwlE@BkE^?\qAj_E?DBgE~ZhhoAJP_`?NOG?[_uJV_RPw~]F^_[? ?fODK{Bhb?B~\_b~\_Z~\_Rg\nYBp?YHPnx?NOG?[_uJV_RPw~]F^_[?OFSDasZ}yuIJRnyJ \_W]@wn}a¦z{jBoY\As{BVODimJsypra{?XRm?C?SGtE~TB~\_RgI~YBp?XZ@~qIPnuiM~lt ?mmXyq@Rm?C?SN^XE{@OS^¦u@Mb^¦WNCAGl]@LFb_W¦}@o?AUqnzdt¦]a}T\o}ct~tUJzDYJ \_QJR_WzLfoF[_Uw@_BjKwnP_]G?oGnAM{DtHGFy?K@sFgn]s]MJbvwFa¦zPwwn@H^{~A{IH `vwFa{Cd?KBj@z_@?DBgFNT]V[LTa}pUTwlu@Gl}AbdsBfSK_vwG?f{E_^~~^vWEmN~~yYW? _rxy?_@tBgF}b?HtAK[E]_G@?MkR_rxw?_@tBGF}^?Ht@k[E]?G@?GK{?FOPm?C?SBN?K¦HO SdZggNmBp?bvP?GC?FOF~vOGyHFuUWLc?nNFP?W??GnE@OS?aSOGaSOI_vwG?fO}A~¦uMk[E ~_FjDgL}@_@tED^gK^\XaSWEA{@t?}dt~wLK?_Rj?}dk~wlE@gdCAgdCAGd{@gL}A?Dt@GLK ?__roD¦]V[LTa}q@zG_?Td]J^_QJ\_WzNfoF[_iw@_@OyBFsy]C?asWGOBsA?FKDK{BhsoAJ v¦Fb¦w\}@o?G\@Ew?_@OK{?rsd@QT}`a¦GNCAGn^s]Nv`vwF?C@tBn¦uADXVyI_?_{OEyXo? a¦~PwwEf^_^~~Wdu}glEAGdE~mlL~sz}atzy~sZya_]GPns{AfSCp_OLPghE~W_CPguE]N}J tanO_^i??FofI~@USD^gUoABp?YJsBnE\@IB}n¦t@Zb~~}k¦asWGIsZ}yrELlfb~_vz}?FUh bWXw~qnoa{WJoFW`TguE]N¦OT}__?GNC@gnOM{XsBgNy~vRDasWG?{GjpmkBasWGVtyJxTvB TWnkatwCs]Nv`vwF?O@s@j_D?DBjFzP?atwCaswGatWErQDqBtAJV_RPwwEN^_[?CDbj@DBg B~L\o}e¦~dXVnoO?nfoAypBvP?GB?FODTmbF}DdN_{WOA~¦tzD¦]oo??????????Oe¦qZEDm XA@BIqk_JQ@BZv@x[edfYFO_KRcxKQ@AZvHkWUxcGCdm\Eom?CxtZEo_[E¦hZfPd[a@`[vLh XuxlXUxsBOhCYVXhXES_XVHqZvGLAcDaZe¦qZUDkGF@qZu\qWUs_\ETqZUdmWVPhZuwLA_?? ????????????????????????????????????????????????Z_`mA????????????????Epm ZvOmXV`dGA@uKQwoGA@CRtKpLao_PfHdXV\`[eSkGB?qJc¦j\AwpMRcwA_??g??AGA?_GA?_ GA?_GA?_GA?_G?????????????????????@kZe¦sGA@ZJVDu]Ut\GA@cWVPdYRC_XEDsXUcq GDlyYUTkXEDsXUd\A_?LA_@r\EPn\VO?ZExn\Bg_PeTgZETqYEDe\ES_OVHf\UtdZfPkYVLs XQwI?EpmZvOyGCP`\EThdEXeZeTmGEXdYEpfXVLbYEp`XuTmMa??ZExn\Bg_PeTgZETqGEHd YUs_PEDsXUdkXVLdZbg_?EpmZvOyGCXdYEpd[a@aXUc_OVTrXuDaXRg_?EpmZvOyGDhdYUpd IEwhGFhtGEp`Ze[_YUw_PEDsXUcyG?@kZe¦sMa@TZfXnZEpr\GPmXEdfXQ@@WfLbYEptwVhd YUpdMa??Ho?fA_????@kAUoHZ?c?ON~~????CoGA@?SEA?_GD@SDCowU@PCAFackIA_gIA_h JA_gI?SDIP[VB_wMB_wMB_wMB_wMB_{kGoGkBqggIA_REpoA?_SN?`[gI`KiB_wMB_wMBaKM FA_VGqSRI?????????????????????????????????????cA?????????????FoA???I?_C? ??????????AK?_???_GA????????????f?G??CKA?o???????????IoA??@A?_O????????? ??A{?_?????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ?????????????????????D???U?AW?H_@I?Ag??????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ???????????????????????Ahog????OSow= ))} return 0 ;; *) print -r "Funktion(): '$1' ist ungültig!"; exit 1 ;; esac return 0 )} Main() { [ "$1" != help -a "$1" != getname ] && { let "!Init" && Funktion homedir $1 ¦¦ return [ -d $isDir -a ! -s $isDir\lnot.exe ] && echo "Erzeuge $isDir\lnot.exe ..." && Funktion mklnot ¦¦ return #Funktion rddat ¦¦ return } case "$1" in vor) let "Enum<Max" && { echo "Sie müssen auf Zustand '$Max' gehen" echo "oder auf '$Enum' herablöschen, bevor eine neue" echo "Registrierung erfolgen kann." return } expr "$Flags" :: 'n' ¦¦ { echo "Sie müssen 'Nach Installation' durchführen" echo "oder den unvollständigen Schritt '$Enum' löschen," echo "bevor eine neue Registrierung erfolgen kann." return } let "Enum>=999" && { err "Limit '999' erreicht!"; return; } while : do echo "%nGeben Sie einen Titel für diese Installation ein:" echo "%t%t%t: %c" readl Line ifset Line ¦¦ return 0 let "${#Line}<=48" && expr "$Line" :: '[a-zA-Z]%{3,%}' && break echo "Zu lang oder anders fehlerhaft!" done Titel="$Line" let ++Enum vor00 Enum echo "Erzeugung Scan-Liste ..." Funktion mkscanlst $Enum ¦¦ return echo "Erzeugung Save-Liste ..." Funktion mksavelst $Enum ¦¦ return echo "Prüfung freier Platz für Save-Dateien ..." Funktion space $isDir\savelist.$Enum ¦¦ return echo "Erzeugung Datei-Liste ..." Funktion mklist $Enum $isDir\liste.$Enum ¦¦ return echo "Kopieren der Save-Dateien ..." Funktion dosave $Enum ¦¦ return echo "Schreiben der Daten-Datei ..." Funktion wrdat $Enum v "$Titel" ¦¦ return Funktion rddat ¦¦ return return 0 ;; nach) let "Enum<Max" && { echo "Sie müssen auf Zustand '$Max' gehen" echo "oder auf '$Enum' herablöschen, bevor eine neue" echo "Registrierung erfolgen kann." return } expr "$Flags" :: 'n' && { echo "'Nach Installation' wurde bereits durchgeführt." return } local lnot=0 Funktion tmpfiles $TmpDir tmplst echo "Erzeugung Datei-Liste ..." Funktion mklist $Enum $tmplst ¦¦ return echo "Erzeugung Differenzen-Datei ..." Funktion rdpar $isDir\istep.ini linecomparator ¦ grep -iq 'lnot' && lnot=1 [ -s $isDir\lnot.exe ] ¦¦ lnot=0 let lnot ¦¦ Funktion mkdiff $Enum $tmplst ¦¦ return let lnot && Funktion mkdiffE $Enum $tmplst ¦¦ return [ -f $tmplst ] && DEL $tmplst unset tmplst echo "Maßnahmen aufgrund von Differenzen ..." Funktion dodiffs $Enum ¦¦ return echo "Schreiben der Daten-Datei ..." Funktion wrdat $Enum n "" ¦¦ return Funktion rddat ¦¦ return return 0 ;; zdown) let "Enum<=0" && { echo "Zustand 0 !"; return; } expr "$Flags" :: 'n' ¦¦ { echo "Vorgang 'Nach Installation' fehlt." return } local enu=000 n=000 while : do echo "%nWählen Sie einen Zustand kleiner als '$Enum':" echo "%t%t%t: %c" read Line ifset Line ¦¦ return 0 expr "$Line" :: '[^0-9]' ¦¦ let "Line<Enum&&Line>=0" && break echo "Nummer '$Line' ist fehlerhaft!" done enu=$Line local r=0 while let "Enum>enu&&!r" do Funktion laden $Enum ; r=$? echo "Schreiben der Daten-Datei ..." let --Enum Funktion wrdat $Enum A "" ¦¦ return Funktion rddat ¦¦ return done return 0 ;; zup) let "Enum>=Max" && { echo "Höchste Stufe liegt vor!"; return; } expr "$Flags" :: 'n' ¦¦ { echo "Vorgang 'Nach Installation' fehlt." return } local enu=000 r=0 while : do echo "%nWählen Sie einen Zustand größer als '$Enum':" echo "%t%t%t: %c" read Line ifset Line ¦¦ return 0 expr "$Line" :: '[^0-9]' ¦¦ let "Line>Enum&&Line<=Max" && break echo "Nummer '$Line' ist fehlerhaft!" done enu=$Line while let "Enum<enu&&!r" do let ++Enum vor00 Enum Funktion install $Enum ; r=$? echo "Schreiben der Daten-Datei ..." Funktion wrdat $Enum A "" ¦¦ return Funktion rddat ¦¦ return done return 0 ;; zdowndel) let "Enum<=0" && { echo "Zustand 0 !"; return; } expr "$Flags" :: 'n' ¦¦ { echo "Vorgang 'Nach Installation' fehlt." return } local enu=000 while : do echo "%nWählen Sie einen Zustand kleiner/gleich '$Enum':" echo "%t%t%t: %c" read Line ifset Line ¦¦ return 0 expr "$Line" :: '[^0-9]' ¦¦ let "Line<=Enum&&Line>=0&&Line<Max" && break echo "Nummer '$Line' ist fehlerhaft," echo "oder kein höherer Zustand vorhanden!" done enu=$Line local r=0 Enum=$Max vor00 Enum while let "Enum>enu&&!r" do Funktion delete $Enum ; r=$? echo "Schreiben der Daten-Datei ..." let --Enum Funktion wrdat $Enum D "" ¦¦ return Funktion rddat ¦¦ return done return 0 ;; lesen) local z=000000 n=00 inp=_____ path while : do Main getname Line ¦¦ break path=$Line while : do n=0 z=0 < $path while readl Line do print -r "× $Line" let '++z, ++n>=20' && n=0 && read "inp?$z: " t<CON && ifset inp && { >< ; continue 3; } done >< read "inp?$z(EOF): " && ifset inp && continue 2 done done return 0 ;; edit) local edit=`Funktion rdpar $isDir\istep.ini editcommand` let "${#edit}>72" &¦ expr "$edit" :: '[^a-zA-Z0-9_ /:.+-]' && err "Editor '$edit' ist suspekt." && return 1 local ecmd=`expr "$edit" : '^%([^/ ]*%)'` whence -ep "$ecmd" &¦ [ $? -ne 10 ] && err "Editor '$ecmd' nicht gefunden." && return 1 while : do Main getname Line ¦¦ break $edit $Line done return 0 ;; getname) local n=00 nsoll=00 file path Line="istep.ini istep.dat istep.log istep.gol scanlist.$Enum savelist.$Enum liste.$Enum diffs.$Enum alias.$Enum savemiss.$Enum" while : do n=0 for file in $Line do path=$isDir\$file [ -s $path ] ¦¦ continue prints s23s4s $((++n)) "" $file done read "nsoll?<Enter> oder Nummer: " ifset nsoll ¦¦ return expr "$nsoll" :: '[^0-9]' && continue n=0 for file in $Line do path=$isDir\$file [ -s $path ] ¦¦ continue let '++n==nsoll' && $2=$path && return 0 done done return 0 ;; help) local n=00 inp while : do n=0 echo % "× Dieses bsh-Script ist ein Multistufen De-/Re-Installierer,%r × mit dem Sie maximal 999 Installations-Stufen registrieren können.%r × Nach Registrierungen kann jede beliebige Stufe in der Kette%r × wieder hergestellt werden - und zwar absolut vollständig.%r × %r × Zur Registrierung einer Stufe müssen die Menü-Punkte%r × VOR und NACH der Installation ausgewählt werden.%r × Dadurch werden Datei-Listen mit Pfad, Zeitstempel und Größe%r × erzeugt, die bei NACH verglichen werden, um eine Differenz%r × herausarbeiten zu können.%r × Es werden alle Unterschiede auf allen Laufwerken (Dateisystemen)%r × jeweils zwischen zwei Zeitpunkten festgestellt.%r × Es spielt keine Rolle, was man zwischen VOR und NACH an den%r × Dateisystemen verändert. Es werden einfach alle Unterschiede%r × festgestellt." read "inp?$((++n)): " ifset inp && return echo % "× Zu Anfang werden ein Verzeichnis '\istep.dir' und eine%r × ini-Datei 'istep.ini' hergestellt.%r × In der .ini kann genau festgelegt werden, welche Laufwerke%r × und/oder Verzeichnisse gelistet werden sollen%r × und welche Dateien und/oder Verzeichnis-Inhalte beim Schritt%r × VOR (zunächst) gerettet werden sollen.%r × %r × Die ini-Datei enthält zu Anfang die Laufwerke c: bis z: .%r × Sicherlich muß man das reduzieren.%r × Und zwar sollte man alle existierenden Laufwerke, die nicht%r × durchsucht werden sollen, herausnehmen.%r × RamDisk-L: und CD-ROM-L: sollte man unbedingt entfernen." read "inp?$((++n)): " ifset inp && return echo % "× In der log-Datei 'istep.log' werden Arbeitsinformationen%r × einer Sitzung gespeichert.%r × Dieser Datei-Inhalt wird bei jedem Sitzungsbeginn an den Inhalt%r × der 'istep.gol' angehängt.%r × Die 'istep.dat' enthält Infos über die Registrierungsstufen.%r × %r × Zu Anfang wird auch eine 'lnot.exe' erzeugt, die in kodierter%r × Form als ASCII-Text innerhalb(!) dieses Scripts vorhanden ist.%r × Diese .exe ist ein hochspezialisierter Zeilenvergleicher, der%r × zur Geschwindigkeitssteigerung verwendet wird.%r × Wenn man dies in der .ini auskommentiert, wird eine langsamere%r × Shell-Funktion benutzt.%r × Man bedenke, daß bei 10000 Dateieinträgen im schlechtesten%r × Fall 10 Milliarden Zeilenvergleiche pro Arbeitsschritt bei%r × der Differenzenfeststellung vorgenommen werden müssen!%r × Ohne Spezial-exe kann das eine halbe Stunde und länger dauern." read "inp?$((++n)): " ifset inp && return echo % "× Der Menü-Punkt VOR erzeugt 'liste.001', 'alias.001',%r × 'scanlist.001', 'savelist.001' und 'save_dir.001/'.%r × Die Gruppennummer kann bis .999 gehen.%r × Der Menü-Punkt NACH erzeugt 'diffs.001' und 'savemiss.001'.%r × Die 'alias.001' wird hier gegebenenfalls reduziert%r × und unnötig gerettete Dateien werden gelöscht, was ja wieder%r × Festplattenplatz freigibt.%r × Die 'savemiss' enthält Einträge von Dateien, die nicht(!)%r × gerettet wurden, entsprechend der 'savelist', jedoch von%r × einer Installation verändert oder gelöscht wurden!%r × Hierzu muß man also gut vorausgeschätzte Angaben in der%r × ini-Datei machen!%r × Die 'diffs' listet Dateieinträge in drei Gruppen:%r × [Neu], [Geändert] und [Gelöscht]." read "inp?$((++n)): " ifset inp && return echo % "× Mit 'Zustand Rückwärts', '-Vorwärts' und 'Rückwärts Löschen'%r × verändert man den Installationsstand.%r × %r × Rückwärts ist eine De-Installation, wobei die Dateien vom%r × normalen Standort im Dateisystem hinein in das Verzeichnis%r × 'save_dir.nnn' bewegt werden (MOVE).%r × Die Installation wird also in einem Ladezustand behalten.%r × Für gerettete Dateien ist der Weg anders herum.%r × %r × Vorwärts ist eine Re-Installation, bei der der Vorgang%r × wiederum anders herum passiert.%r × %r × Dieses Installationswerkzeug braucht nur wenig Platz auf%r × der Festplatte - etwa 2 bis 20 MByte pro Stufe,%r × wobei 5 MByte als normal gelten können.%r × Ein Spitzenbedarf entsteht bei VOR, weil dann erst einmal%r × relativ viele Dateien gerettet werden, die erst bei NACH%r × gegebenenfalls wieder entfernt werden können." read "inp?$((++n)): " ifset inp && return echo % "× Dieses Script wurde aus einem größeren Script, das nur mit der%r × Unix-Vollversion der 'bsh' läuft, abspeckend herausgezogen.%r × Die Ressourcen der Shareware sind erheblich schmaler, so daß%r × die Programmierung ganz anders und 'unschön' vorgenommen%r × werden mußte.%r × Auch fehlen einige Ausstattungsmerkmale des Originals.%r × %r × Dennoch zählt dieses Script zu 'den besseren', weil es recht%r × viele Sicherheitsmerkmale und Automatismen enthält.%r × %r × Man kann mit der 'bsh' auch richtige farbige Vollbild-Menüs%r × mit Fenster-Technik programmieren.%r × Aber das ist erstens nicht nötig, und zweitens ist es doch%r × tatsächlich schon vorgekommen, daß jemand seinen ANSI.SYS%r × nicht geladen hatte ..." read "inp?$((++n)): " ifset inp && return echo % "× Die Menü-Punkte VOR und NACH Installation können völlig%r × bedenkenlos ausgeführt werden, weil dabei nur das%r × istep-Verzeichnis mit Daten gefüllt wird.%r × Soll heißen, daß man damit herumprobieren kann, um dann%r × beispielsweise die erzeugten Info-Dateien anzuschauen.%r × Aufgrund der Infos kann man auch manuelle Manipulationen%r × vornehmen. Auch können danach Stufen manuell wieder%r × gelöscht werden.%r × Es können insbesondere Dateien gemäß 'savemiss' manuell%r × nachträglich gerettet werden, falls man die Arbeitsweise%r × verstanden hat und Einträge in der 'alias' vornehmen kann.%r × Besser ist es allerdings meistens, mißglückte Schritte oder%r × Halbschritte zu löschen und dann nur die 'istep.dat'%r × manuell anzupassen. Oder 'Löschen Rückwärts' verwenden.%r × Der Schreibschutz einiger Dateien wird gesetzt!%r × Die 'liste'-Dateien sind nach NACH entbehrlich!" read "inp?$((++n)): " ifset inp && return echo % "× Einrichten einer RamDisk für mehr Arbeitstempo:%r × CONFIG.SYS:%r × %tdevicehigh=c:\dos\ramdrive.sys 2048 512 128 /e%r × AUTOEXEC.BAT:%r × %tset TEMP=f:%r × falls f: das ramdisk-Laufwerk ist." read "inp?$((++n))(EOF): " ifset inp && return done return 0 ;; *) print -r "Main(): '$1' ist ungültig!"; exit 1 ;; esac return 0 } Titel=' ' [ -s $isDir\istep.dat ] && Funktion rddat Funktion free echo "%r ××××××××××××××××××××××××××××××××××××××××××××××××××××××××%r × bsh-Script 'istep.bsh' ×%r × Copyright (c) 1998, Helmut Schellong ×%r × ×%r × Multistufen De-/Re-Installierer ×%r ××××××××××××××××××××××××××××××××××××××××××××××××××××××××" while echo % "%r frei=${Space}MB · akt,max,flg=$Enum,$Max,$Flags · '$Titel'%r ×××××××××××××××××××××××××××××××××××××××××××××××××××%r × Hilfe : h ×%r × Vor Installation : v ×%r × Nach Installation : n ×%r × Zustand Rückwärts : R ×%r × Zustand Vorwärts : V ×%r × Löschen Rückwärts : LR ×%r × Dateien lesen : l ×%r × Dateien editieren : ed ×%r × Beenden : E ×%r ×××××××××××××××××××××××××××××××××××××××××××××××××××%r : __%b%b%c" do read Line case "$Line" in v) Main vor ;; n) Main nach ;; R) Main zdown ;; V) Main zup ;; LR) Main zdowndel ;; l) Main lesen; continue ;; ed) Main edit; continue ;; H¦h) Main help; continue ;; E) break ;; *) ifset Line && echo %a%c continue ;; esac Funktion free done #istep.dir/ # istep.ini # istep.log # istep.gol # istep.dat num Avn Titel # lnot.exe # scanlist.100 # savelist.100 # alias.100 alias,path # liste.100 Liste:(crc,mode,)size,time,path # diffs.100 neu,anders,weg # savemiss.100 # save_dir.100/[SNC].{aaa-zzz} #whence -ep mem ¦¦ [ $? -eq 10 ] && # mem /d ¦ grep -iq '[^a-zA-Z]ansi[^a-zA-Z]*' && # whence -ep mode ¦¦ [ $? -eq 10 ] && # mode con ¦ grep -q '[^0-9]25[^0-9]' && # mode con ¦ grep -q '[^0-9]80[^0-9]' && # R='%e[2C' S='%e[0;30;46m%e[2;3H' # #ifset R ¦¦ { # VER ¦ grep -iq caldera && # grep -iq '^device.*=.*ansi%.' c:\config.sys && # R='%e[2C' S='%e[0;30;46m%e[2;3H' && # { echo Caldera-DOS + ANSI; sleep 1; } #} #frage() { # local inp # [ $# -lt 1 ] && { read "-?istep.bsh: <Enter>"; return 0; } # while echo "%n$1 [jn]: %c" # do # read inp # case "$inp" in # [jJ]) return 0 ;; # [nN]) return 1 ;; # *) continue ;; # esac # done # return 3 #}