|
|
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
#}