#!/bin/ash

echo   "  Anfang mkpart "
#echo "Sucht zur Installierung freien Platz auf der Festplatte oder  Partitionen die abgeschnitten werden kÃ¶nnen"
echo " a) Freien Platz finden oder b) primaere Partition kleiner machen  oder c) extended Part. 5 kleiner machen"
echo    "   oder  (nur bei Partitionen von nicht-*nix-Systemen)    d)  loeschen oder hinten zur Install. noetigen Platz absaebeln"
echo   "extended Partition wird nicht desaktiviert um ihre Nr. zu nehmen (alle logischen Part. gingen verloren), aber bei "
echo   "Platzbedarf verkleinert, nachrangig zu allen primaeren Partitionen,  momentan (spaeter verbessern) aber "
echo   "nur die erste log. Partition und nur falls sie ntfs ist -- oft ist Windows auf /dev/hda5"
#  Im Programm bleibt die ext Partition fast unbehandelt, und wird stattdessen die logische LOGNR betrachtet


# Aufruf durch  init 

#                                                                  (c) 2007 werner@copaya.yi.org  

#ls / ; mkdir /von ; mkdir /nach 

LOGNR=5          # berÃ¼cksichtigte logsche Partition die ggf. verkleinert wird um extended zu verkleinern
                 # spaeter mit df hoechste Part.- Nr. suchen und nehmen                 


STATUS=-3                                    #   -2  kein Platz da    -1 Platz da, Part. ist zu machen     1 Partition fertig
# TST=0 normaler Betrieb,  TST=1: Test, nur Erforschen / Ausdrucken der Partitionen, keine Redimensionierung



read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo          
echo " mkpart Anfang: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  
read DISKSIZE REST < disksize ; rm disksize 
echo " Groesse Ziel-Festplatte: "  $DISKSIZE 


# Alle Groessen in Sektoren !!!!

# 1. Partitionstafel erhalten
#         Format von parted:  Nr, Anfg, Ende, Groesse, primary/extended, typ/filesystem, ifbootflag
#                 Wenn parted kein fs angibt, ist die Partition nicht formatiert


# Alle parted, fdisk sind schwachsinnig bzgl. Format, daher suchen wir alle infos zusammen und geben sie geeignet aus
# Nur akzeptiert: Partitionen 1-4 die mountbar sind, oder extended und mountbare Partitionen haben




# 4   Auswerten von vhd. Partitionen 1-4 , LÃ¼cken ZWISCHEN Partitionen, freier Platz AUF den Partitionne  auf Festplatte NACH0
#               A  Name der Partition,  X Y Z  Anfang,Ende,Groesse Partition,  Y0 Z0  Ende,Groesse Daten (nach defrag)
#                     ART Art der Partition (83=Linux, 7=ntfs, 5=extended )  FS Datei-System (ext2,ext3,minix,reiserfs,ntfs)
#                     OBDA ob Partition da ist.     Extended wird gelÃscht falls keine Part. 5 da, sonst FS=extended  
#     Kandidat fÃr zu verkleinernde Parttionen werd gesucht unabhÃ¤ngig davon ob spÃter noetig, vorrangig primary 
#          NACHNR kleinste freie NR/Index der frei ist -> Install-Partition  
#          KLEINERNR  zu verkleinernde Partition falls  Partition voll 

# 4.1. Groesse von vhd. Partition und Dateisystem
/sbin/fdisk -lu > scr0 
grep "/dev/" scr0 > fdisk0
cat scr0 > fdiskwar 

# hoechste Nr. log. Partion suchen

###for LOGNR0 in 5 6 7 8 9 10 11 12 13 14 15  16  ; do 
LOGNR0=5    # geht momentan nur mit 5 als ggf. zu verkleinernde logische Partition
LOG=$NACH0$LOGNR0
grep $LOG fdisk0  > scr0 
if test $? -eq 0 ; then read LOG REST < scr0 ; if test $? -eq 0 ; then LOG=$LOG ; LOGNR=$LOGNR0  ; else  LOG=- ; LOGNR=0 ; fi ;fi ;     # Partition mit boot -Label  
echo "logische Partion testen mit Nr LOGNR:" $LOGNR0  "  LOG: "   $LOG         
###done
echo "letzte logische Partition: " $LOG  "  Nr: " $LOGNR

OLDSYS=- ; OLDSYSNR=0
grep '*' fdisk0  > scr0 
if test $? -eq 0 ; then read OLDSYS REST < scr0 ; if test $? -eq 0 ; then OLDSYS=$OLDSYS  ; else  OLDSYS=- ; OLDSYSNR=0 ; fi ;fi ;     # Partition mit boot -Label  
EXT=- ; EXTNR=0 
if test $LOGNR -gt 0 ; then
grep "Extended" fdisk0 > scr0
if test $? -eq 0 ; then read EXT REST < scr0 ; if test $? -eq 0 ; then EXT=$EXT  ; else  EXT=- ; EXTNR=0 ; fi; fi ;  fi ;           # extended Partition

sed 's/*/ /g'  fdisk0 > scr0
sed 's/+/ /g'  scr0 > fdisk0  

cat fdisk0
echo "  bisheriges System: " $OLDSYS "   extended partition: " $EXT

echo -e "\c" > partitions



# MOMENTAN ALE EXTENDED PARTITIONEN LOESCHEN

# resize Windows logical Part. geht noch nicht, daher momentan: loeschen
#EXTNR=0 
#for K0 in 1 2 3 4  ; do
#A=$NACH0$K0 
#if test $NACH0$K0 = $EXT ; then EXTNR=$K0 ; fi ;
#done
#echo "EXTNR, EXT: " $EXTNR $EXT 

# Ob 5. Partion ntfs  dann diese und extended Partion loeschen
#K=$LOGNR ; A=$NACH0$K  
#mount $A /nach -t ntfs #  ohne -o ro da Probleme bei .iso Datei statt DVD  
#echo "Vor test:"
#if test $? -eq 0 ; then  
#echo "********* test: " $K $FS
#if test $TST -eq 0 ; then echo -e "d \n$K \nd \n$EXTNR \nw " > fdisk.scr ; else echo -e "d \n$K \nd \n$EXTNR \np "  > fdisk.scr ; fi ;  
#echo -e "d \n$K \nd \n$EXTNR \nw " > fdisk.scr   
# cat fdisk.scr ; echo " vor fdisk"
#umount $A ;  /sbin/fdisk $NACH0 < fdisk.scr ;  
#echo "nach fdisk"
# sync 
#/sbin/fdisk -l   ; EXTNR=0 ; EXT=- ; echo "extended Partition geloescht" 
#echo "********** fdisk.scr , OBDA, EXT, EXTNR, partitions: "  ; cat fdisk.scr ; echo "OBDA,EXT,EXTNR:" $OBDA  $EXT  $EXTNR 
#fi  ;   
#/dev/makedevs.sh
#echo "Nach Loeschen ext Part.:"
#/sbin/fdisk -l ; echo "KLEINER" $KLEINER  ; echo "Anzahl"  $ANZAHL  

#echo "FALLS IMMER NOCH NICHT WEG, DIE GESAMTE HARDDISK LOESCHEN"
#echo "fdisk0: "
#cat fdisk0

#echo "aussondern: "  $NACH0$EXTNR  $NACH0$LOGNR
#grep -v $NACH0$EXTNR fdisk0 > scr0 ; grep -v $NACH0$LOGNR scr0 > fdisk0 

#echo "restliche Partitionen in fdisk0: "
#cat fdisk0

#echo $EXT $EXTNR


 
# 4.1.1  Partitionen 1,2,3,4 der Reihe nach abklappern: ob von fdisk angezeigt, ob mounten geht  usw 

NACHNR=0 ; NACHART=83                             #  falls Disk leer, NACHNR=1 , sonst erhoehen, bei =5  eine Partition  ausschalten
KLEINERNR=0 ; KLEINER=- ; GEHTKLEINER0=0          #  GEHTKLEINER0: bisher beste gefundene Verkleinerbarkeit einer Partition (freier Platz)
WINDOWSNR=0 ; WINDOWS=-   
ANZAHL=0 
echo -e "u \np Anfang --1" > fdisk.machen 

for K in 1 2 3 4 $LOGNR ; do
A=$NACH0$K   ; OBDA=0 
echo " *** Partition " $A " untersuchen  ob da (OBDA.ne.0), ob nicht da (0), da aber unformatiert -> loeschen (-1), da aber kaputt/unmountbar -> nicht resizen (-2)"

# 4.1.1.1 Partitionstafel / fdisk abfragen
X=0 ; Y=-1 ; ART=- 
grep $A fdisk0 > scr0 
if test $? -eq 0 ; then OBDA=-2 ; echo " *** Partition " $A " in Part-Tafel " ; fi ;


if test $OBDA -ne 0 ; then  

# Partitionsgroesse mind. gleich Dateisystem-Groesse setzen, um kaputte Part.Tafeln (negative Groesse usw zu reparieren)
read UNW X Y UNW0 ART REST  < scr0            #  X , Y  von ... bis ...     Sektor Part. K
if test $K = $LOGNR ; then Y=$YEXT ;  echo "  Ende log. Part. = Ende ext. setzen um Platz danach zu benutzen : " $Y ; fi ;
if test $X -gt 0 ; then Z=$(($Y - $X + 1)) ; else Z=0 ; fi ;                #  Z Groesse Partition   Sektor
if test $Z -le 0 ; then OBDA=-1 ; echo "*** OBDA, Z:" $OBDA $Z ; fi ;        #  Partition nicht von fdisk angezeigt oder Groesse =0 ist nicht da
# falls mountbar, wird unten minimale Groesse = Dateiengroesse gesetzt
echo " Part.:" $A " Nr : " $K   "size:" $Z "obda: " $OBDA  " EXTNR, LOGNR : " $EXTNR  $LOGNR 



# 4.1.1.2 mounten / df 
# mounten um Dateisystem zu bestimmen.    Nicht -o ro da Problem/falsche Erkennung bei .iso-Datei wenn im Haupt-System als rw gemountet
FS=-         #  OBDA: 0 falls nicht da, -1 zwar da aber unformatiert -> lÃ¶schen. -2 da,kaputt, nu loeschen wenn Windows  
umount $A  
mount $A /nach -t ext4 -o extents ; if test $? -eq 0 ; then FS=ext4 ;  fi ;    # das kann ein ext3 FS beschÃdigen
mount $A /nach -t ext4dev -o extents ; if test $? -eq 0 ; then FS=ext4dev ;  fi ;    # das kann ein ext3 FS beschÃdigen
mount $A /nach -t ext3 ; if test $? -eq 0 ; then FS=ext3 ; fi ; 
mount $A /nach -t ext2  ; if test $? -eq 0 ; then FS=ext2 ; fi ; 
mount $A /nach -t reiserfs  ; if test $? -eq 0 ; then FS=reiserfs ; fi ; 
mount $A /nach -t minix  ; if test $? -eq 0 ; then FS=minix ; fi ;  
mount $A /nach -t vfat  ; if test $? -eq 0 ; then FS=vfat ; umount /nach ; echo " *** mkpart in 4.1.1 vor mount **2"   ;  mount $A /nach -o rw ; fi ; 
mount $A /nach -t ntfs  ; if test $? -eq 0 ; then FS=ntfs ;  umount /nach ; ntfsfix $A ;  ntfs-3g $A /nach -o force,rw,remove_hiberfile ; fi ;
echo " *** FS auf Partition " $A " durch mounten bestimmt: "  $FS
mount $A /nach  ; if test $? -eq 0 ; then FS=minix ; fi ;         # falls irgendwas anderes mountbares   
if test $FS != - ; then OBDA=1 ; fi ; 
#clear 


# ntfs, vfat -Partitionen maximal entleeren. Ggf auch noch alle ausfuehrbaren Progs loeschen
if test $FS = ntfs ; then rm /nach/pagefil*.sys /nach/hiberfil*.sys /nach/windows/win386.swp /nach/win386.swp /nach/PAGEFIL*.SYS /nach/HIBERFIL*.SYS /nach/WINDOWS/WIN386.SWP /nach/WIN386.SWP 
rm -r /nach/TMP  /nach/WINDOWS/TMP /nach/tmp  /nach/windows/tmp  ; fi ; 
if test $FS = vfat ; then rm /nach/pagefil*.sys /nach/hiberfil*.sys /nach/windows/win386.swp /nach/win386.swp /nach/PAGEFIL*.SYS /nach/HIBERFIL*.SYS /nach/WINDOWS/WIN386.SWP /nach/WIN386.SWP 
rm -r /nach/TMP  /nach/WINDOWS/TMP /nach/tmp  /nach/windows/tmp  ; fi ; 



# Auswerten von df
echo " --18"
echo " df / gemountete Partitionen : " ; df -k | grep -v "tmpfs"
df -k | grep -v "tmpfs" > df0        
echo " --19"
Z00=$Z
grep $A df0 > scr0 

if test $? -eq 0 ; then                       # von df angegeben
echo " --20"
#OBDA=1
read UNW UNW1 Z0 UNW2 REST  < scr0            #  X , Y  von ... bis ...     Sektor Part. K
Z0=$(($Z0 * 2))

if test $Z -le 0 ; then Z=$Z0 ; fi ;
if test $Z0 -le 0 ; then  Z0=$Z ; fi ;                #  Z Groesse PARTITION ,  Z0 min. Groesse / Vollheit DATEISYSTEM   Sektor
if test $Z0 -le 0 ; then OBDA=-1 ; echo "*** OBDA, Z0:" $OBDA $Z0 ; fi ;


# erste Abschaetzung wieweit (=Z00) Partition verkleinerbar ist
Z00=$(($Z0 + $Z0 / 20))                                                      #  Sicherheit und etwas leeren Platz lassen
test $Z00 -gt $Z ; if test $? -eq 0 ; then  Z00=$Z     ; fi ;      # Dateisystem max. so gross wie Partition
echo " Partition mountbar, Mindestgroesse = Datenmenge: "  $Z00
else                                        #  nicht von df angegeben,  sollte bei OBDA -gt 0 eigentlich nicht vorkommen
echo " --21"
#OBDA=-2                                     #  momentan nicht formatiert wie unmountab = kaputt behandelt, Spaeter unterscheiden 
ZMAX=$(($Z - $SIZE - $SIZE / 20))            #  Kuerzen soweit noetig zulassen FALLS PARTITION NICHT MOUNTET (unbekannte, benutzte, extended Partition)
Z00=$Z                                      #  default, eigentlich schon oben
if test $ART = 7 ; then Z00=$ZMAX ; fi ;      #  ... und nur falls Part-Art Windows angegeben, hinten absaegen
if test $ART = b ; then Z00=$ZMAX ; fi ; 
if test $ART = c ; then Z00=$ZMAX ; fi ; 
if test $Z00 -le 0 ; then Z00=1 ; fi ; 
echo " Partition nicht mountbar, Verkleinern erlaubt sodass SYS  installierbar ist: " $Z00 " , Groesse momentan: " $Z " , Art: " $ART 
fi ;   #  Ende test grep $A -eq 0

Z0=$Z00                                       #  soll so neu sein
Y0=$(($X + $Z0 - 1))     
GEHTKLEINER=$(($Z - $Z0))                    # um wieviel die Partion kleiner zu machen ginge (freier Platz - Sicherheit)
#                                            # VorlÃufiges Resultat, nach Sortieren der Partitionen: freier Platz + Verkleinern                                
#if test $Z0 -le 0 ; then OBDA=0 ; fi ;      # sollte nicht vorkommen, leere oder sehr kleine FS -> Part. redimensionieren
echo $A "Belegt an Daten: " $Z0 "  Nach Redimensionieren  Ende bei Sektor: " $Y0 
echo " --22"

umount $A 


if test $OBDA -eq -2 ; then
echo " --23"
# Partition da, aber nicht mountbar:   Falls Partition-Art = Windows, hinten abschneiden um Platz zu machen, sonst nicht  
#  Neue Grenzen oben schon berechnet (Entscheidung max. Groesse lassen, oder abschneiden), damit  wie OBDA=1 behandeln
OBDA=1 
#OBDA=-1    # dagegen falls unmountbare=kaputte Partitionen geloescht wd sollen, ggf je nach ART (zBsp nur Windows-Partitionen)
            # da dann aber vorziehen, nur hinten absaebeln soviel wie fuer SYS noetig, den Rest bzw. Anfang kann man dann
            # weiter aufheben um zu versuchen noch ein paar Daten rauszupopeln ...
fi ;


# 4.3   Vhd Partitionen und deren max. Verkleinerbarkeit X0, Y0 in Datei   partitions schreiben

if test $OBDA -gt 0 ; then 
echo " --24"


#  daseiende Partitionen in Datei schreiben usw, kleinster Index nicht-daseiender fÃ¼r Install-Partition nehmen 
#  Die extended wird nicht in partitions geschrieben, aber die logische

if test $A = $EXT ; then  OBDA=0 ; echo "*** A,EXT,OBDA:" $A $EXT $OBDA    ;  if test $LOGNR -gt 0 ; then EXTNR=$K ; YEXT=$Y ; fi ; fi ;  echo "EXTNR:"  $EXTNR

if test $OBDA -gt 0 ; then                   #  brauchbare Partitionen in Datei  partitions schreiben
echo " --25"
#if test $A = $OLDSYS ; then OLDSYSFS=$FS ; OLDSYSNR=$K ; echo -e "a \n$K  \nw " > scr ; /sbin/fdisk $NACH0 < scr ; sync ; fi ;   # altes boot-label lÃ¶schen 
if test $A = $OLDSYS ; then OLDSYSFS=$FS ; OLDSYSNR=$K ; echo -e "a \n$K altes boot-label loeschen " >> fdisk.machen ; fi ;   # altes boot-label lÃ¶schen 

if test $FS = "ntfs" ; then  if test $WINDOWSNR -eq 0 ; then  WINDOWS=$A ; WINDOWSFS=$FS ; WINDOWSNR=$K ; fi ;  fi ;
if test $FS = "vfat" ; then  if test $WINDOWSNR -eq 0 ; then  WINDOWS=$A ; WINDOWSFS=$FS ; WINDOWSNR=$K ; fi ;  fi ;
      if test $GEHTKLEINER -gt $GEHTKLEINER0 ; then   GEHTKLEINER0=$GEHTKLEINER
     KLEINERNR=$K ; KLEINER=$A ; XKL=$X ; YKL=$Y ; ZKL=$Z ; KLEINERFS=$FS ; KLEINERART=$ART ;  fi ; 
   echo $A $X $Y $Z $Y0 $Z0 $FS $ART >> partitions  
   echo $A " ab:" $X " bis:" $Y " Groesse:" $Z "voll bis:" $Y0 " Groesse insg.:" $Z0 " frei:" $(($Z - $Z0)) " FS:" $FS "Part.-Art:" $ART 
   ANZAHL=$(($ANZAHL + 1)) ;                 # Anzahl prim. Part.,  fuer fdisk  noetig
   echo "LOGNR , ANZAHL: " $LOGNR $ANZAHL 
fi ;      # end test OBDA -gt 0  (innere Schleife)

fi ;   # end test OBDA -gt 0  

echo "**** OBDA" $OBDA
echo " --26"

if test $OBDA -eq -1 ; then                                           #  unbrauchbare Partitionen: lÃ¶sche,  Nr. als frei registrierenn
echo " --27"
echo -e "p \nd \n$K \np unbrauchbares loeschen --2" >> fdisk.machen      # Falls letzte Part., keine p-nr angeben !!
fi ;  # end test OBDA -eq -1


fi ;  # end test OBDA -ne 0   Falls Part. ueberhaupt in Part.Tabelle ist 

if test $OBDA -le 0 ; then 
echo " --28"
echo " Suchen einer Nr. fuer  NACH:  " $K                            # nicht $EXT weil beim disabeln der ext Part. ale log.P.verloren
if test $K -le 4 ;  then    if test $NACHNR -eq 0 ; then    if test $K -ne $EXTNR ; then  NACHNR=$K ; NACH=$A ; fi ;  fi ; fi ;     # kleinste leere Partitions-Nummer finden    
echo " Freie Nr. fuer NACH gefunden: " $K  "  OBDA: " $OBDA  "  NACHNR: " $NACHNR  " NACH: " $NACH  ;  echo " Extended ist: " $EXTNR
fi ;

echo " --29"

done 


# Resultate

if test $NACHNR -eq 0 ; then echo " Alle Nummern 1-4 belegt, fuer neue Partition wird eine andere abgeschaltet"  ; fi ;

echo " Anzahl primaerer Part. schon da:" $ANZAHL "  NACH:"  $NACH " NACHNR: " $NACHNR "   vorlaeufig KLEINERNR: " $KLEINERNR 
echo " ext. Part.,  Nr: " $EXT $EXTNR
echo " altes System  Nr : " $OLDSYSNR "    Partition : " $OLDSYS  "    Format: "  $OLDSYSFS
echo " Windows  Nr : " $WINDOWSNR "    Partition : " $WINDOWS  "    Format: " $WINDOWSFS
echo " vorl. Kandidat der zu verkleinernden Partition: " $KLEINERNR $XKL $YKL $ZKL $KLEINERART $KLEINERFS $REST
echo " *** Ob kleinerzumachende Partition / deren Groesse definiert: " $ZKL  "  Benoetigt / neue Part.: "  $SIZE
echo "Partitionen:"   ; cat partitions


# Noch einbauen: falls keine zu verkleinernde Partition gefunden, aber gebraucht, irgendeine nehmen




# 2. Feststellen ob/wo grÃ¶sster freier Platz auf Platte vh

echo " *** groesste freie Luecke auf Platte " $NACH0 " suchen :    *** "

sort -n -k 2 partitions > parts0        #  PARTITIONEN JETZT Nach phys. Reihenfolge auf Platte geordnet, nicht nach Nr.  
#echo "Partitionen nach Reihenfolge auf Platte sortiert: "

#echo " Partitionen in echter Reihenfolge: " ; cat parts0       # log. Part. drin lassen !
#if test $LOG != - ; then  grep -v $LOG parts0 > parts1 ; cat parts1 > parts0 ; fi ;   


A1=0 ; A2=0 ; A3=0 ; A4=0 ; X1=1 ; X2=1 ; X3=1 ; X4=1 ; Y1=1 ; Y2=1 ; Y3=1 ; Y4=1
( read A1 X1 Y1 Z1 Y01 Z01 REST  ;  read A2 X2 Y2 Z2 Y02 Z02 REST  
  read A3 X3 Y3 Z3 Y03 Z03 REST  ;  read A4 X4 Y4 Z4 Y04 Z04  REST  
echo $A1 $X1 $Y1 $Z1 $Y01 $Z01 $A2 $X2 $Y2 $Z2 $Y02 $Z02 $A3 $X3 $Y3 $Z3 $Y03 $Z03 $A4 $X4 $Y4 $Z4 $Y04 $Z04 > tmp00 ) < parts0
read A1 X1 Y1 Z1 Y01 Z01 A2 X2 Y2 Z2 Y02 Z02 A3 X3 Y3 Z3 Y03 Z03 A4 X4 Y4 Z4 Y04 Z04 REST < tmp00
#echo "Eingabe:" $A1 $X1 $Y1 $Z1 $Y01 $Z01 $A2 $X2 $Y2 $Z2 $Y02 $Z02 $A3 $X3 $Y3 $Z3 $Y03 $Z03 $A4 $X4 $Y4 $Z4 $Y04 $Z04  

echo "Disk-Size: "  $DISKSIZE 
echo "Partition/Anfg/Ende/Ende falls reformatiert/frei"  $A1 " " $X1 " " $Y1 "    " $Y01 " " $Z01       
echo "Partition/Anfg/Ende/Ende falls reformatiert/frei"  $A2 " " $X2 " " $Y2 "    " $Y02 " " $Z02 
echo "Partition/Anfg/Ende/Ende falls reformatiert/frei"  $A3 " " $X3 " " $Y3 "    " $Y03 " " $Z03    
echo "Partition/Anfg/Ende/Ende falls reformatiert/frei"  $A4 " " $X4 " " $Y4 "    " $Y04 " " $Z04  

#  Zu jeder Partition J den vorigen J-1 und den folgenden J Zwischenraum bestimmen:
#     Anfg/Ende/Groesse  ohne Redimension der Partitionen:  ZA, ZE, ZG   , mit Redim:  WA, WE, WG 
echo " Bestimmung der freien Stellen auf der Platte: "
EINS=1 
Y0=0 ; Y00=0
ZA0=$(($Y0+$EINS)) ; ZE0=$DISKSIZE ; ZG0=$(($DISKSIZE-$Y0-1)) ; WA0=$ZA0 ; WE0=$ZE0 ; WG0=$ZG0
test $A1 != 0 ; if test $? -eq 0 ;  then ZE0=$(($X1-$EINS)) ; ZG0=$(($X1-$Y0-1)) ; ZA1=$(($Y1+$EINS)) ; ZE1=$DISKSIZE ; ZG1=$(($DISKSIZE-$Y1-1)) ; 
                                    WE0=$ZE0 ; WG0=$(($X1-$Y00-1)) ;  WA1=$(($Y01+$EINS)) ; WE1=$ZE1 ;  WG1=$(($DISKSIZE-$Y01-1)) ; fi ;
echo " Luecke vor P.1: " $ZA0 $ZE0 $ZG0   "    Groesse soll: "  $(($ZE0-$ZA0+$EINS)) 
test $A2 != 0 ; if test $? -eq 0 ;  then ZE1=$(($X2-$EINS)) ; ZG1=$(($X2-$Y1-1)) ; ZA2=$(($Y2+$EINS)) ; ZE2=$DISKSIZE ; ZG2=$(($DISKSIZE-$Y2-1)) ; 
                                    WE1=$ZE1 ; WG1=$(($X2-$Y01-1)) ;  WA2=$(($Y02+$EINS)) ; WE2=$ZE2 ;  WG2=$(($DISKSIZE-$Y02-1)) ; fi ;
echo " Luecke nach P.1: " $ZA1 $ZE1 $ZG1  "    Groesse soll: "  $(($ZE1-$ZA1+$EINS)) 
test $A3 != 0 ; if test $? -eq 0 ;  then ZE2=$(($X3-$EINS)) ; ZG2=$(($X3-$Y2-1)) ; ZA3=$(($Y3+$EINS)) ; ZE3=$DISKSIZE ; ZG3=$(($DISKSIZE-$Y3-1)) ; 
                                    WE2=$ZE2 ; WG2=$(($X3-$Y02-1)) ;  WA3=$(($Y03+$EINS)) ; WE3=$ZE3 ;  WG3=$(($DISKSIZE-$Y03-1)) ; fi ;
echo " Luecke nach P.2: " $ZA2 $ZE2 $ZG2  "    Groesse soll: "  $(($ZE2-$ZA2+$EINS))
test $A4 != 0 ; if test $? -eq 0 ;  then ZE3=$(($X4-$EINS)) ; ZG3=$(($X4-$Y3-1)) ; ZA4=$(($Y4+$EINS)) ; ZE4=$DISKSIZE ; ZG4=$(($DISKSIZE-$Y4-1)) ; 
                                    WE3=$ZE3 ; WG3=$(($X4-$Y03-1)) ;  WA4=$(($Y04+$EINS)) ; WE4=$ZE4 ;  WG4=$(($DISKSIZE-$Y04-1)) ; fi ;
echo " Luecke nach P.3: " $ZA3 $ZE3 $ZG3  "    Groesse soll: "  $(($ZE3-$ZA3+$EINS))
echo " Luecke nach P.4: " $ZA4 $ZE4 $ZG4  "    Groesse soll: "  $(($ZE4-$ZA4+$EINS))
echo -e "\c"   > tmp0
echo "   $NACH0"0   $ZG0  "   "  $ZA0 "   " $ZE0   "   "  $WG0  "   "  $WA0 "   " $WE0   >> tmp0
echo  $A1 "  " $ZG1  "   "  $ZA1 "   " $ZE1   "   "  $WG1  "   "  $WA1 "   " $WE1 >> tmp0  
echo  $A2 "  " $ZG2  "   "  $ZA2 "   " $ZE2   "   "  $WG2  "   "  $WA2 "   " $WE2  >> tmp0
echo  $A3 "  " $ZG3  "   "  $ZA3 "   " $ZE3   "   "  $WG3  "   "  $WA3 "   " $WE3   >> tmp0
echo  $A4 "  " $ZG4  "   "  $ZA4 "   " $ZE4   "   "  $WG4  "   "  $WA4 "   " $WE4  >> tmp0   
echo "  ZwischenrÃume auf der Platte:  OHNE Redim: " 
echo $ZG0 " ab " $ZA0  " ; " $ZG1 " ab " $ZA1 " ; " $ZG2 " ab " $ZA2 " ; "  $ZG3 " ab " $ZA3 " ; "  $ZG4 " ab " $ZA4   
echo "  ZwischenrÃume auf der Platte:  MIT Redim: " 
echo $WG0 " ab " $WA0  " ; " $WG1 " ab " $WA1 " ; " $WG2 " ab " $WA2 " ; "  $WG3 " ab " $WA3 " ; "  $WG4 " ab " $WA4

   
echo " " ; echo " *** Alle  Zwischenraeume:    Part.davor --  Gr/Anf/Ende OHNE Redim -- Gr/Anf/Ende MIT Redim "  ; cat  tmp0  
sort  -o tmp1 -r  -n  -k 2   tmp0           # Auf tmp1 sind jetzt die ZWISCHENRAEUME / FREIE BEREICHE nach Groesse sortieret
echo "  Zw. sortiert nach Groesse-OHNE-Redim:    Bez., Groesse, Anfg, Ende,   Gr., Anf, Ende reform.: " ; cat tmp1
read AA ZZ XX YY  REST < tmp1                    # Partition davor, Groesse, Anfang, Ende des groessten freien Platzes 
echo "groesster Zwischenraum ohne redimension Partitionen:  " $AA  $ZZ $XX $YY
if test $ZZ -gt 0 ; then  echo "Groesse freier Platz definiert: " $ZZ ; else ZZ=0 ; fi ;
echo " *** ::: Groesster freier Platz auf der HD  OHNE Redimensionierung:  Gr/von/bis  " $ZZ  "   "  $XX  "    "  $YY  

# Reihenfolge auswerten:  1) primaere Part, 2) extended Part  3) groesste
sort  -o tmp2 -r  -n  -k 5   tmp0           # Auf tmp2 sind jetzt die ZWISCHENRAEUME / FREIE BEREICHE nach Groesse sortieret
echo "  Zw. sortiert nach Groesse-MIT-Redim:    Bez., Groesse, Anfg, Ende,   Gr., Anf, Ende reform.: " ; cat tmp2
echo "  Zw. nach primaeren Part. auf tmp1, nach extended auf tmp3.   extended Partition: "  $EXT  "log.P.:" $LOG 

if test $LOGNR -ne 0 ; then  grep -v $LOG tmp2 > tmp1  ;  grep  $LOG tmp2 > tmp3  ; echo "log.P.:" ; cat tmp3 ; else cat tmp2 > tmp1 ; fi ; 
read AAA UNW1 UNW2 UNW3 ZZZ XXX YYY  REST < tmp1           #   ZZZ=$(($YYY-$XXX+1))
echo "groesster Zwischenraum nach redimension PRIMARY Partition:  " $AAA $UNW1 $UNW2 $UNW3 $ZZZ $XXX $YYY
if test $ZZZ -gt 0 ; then KLEINER=$AAA ; else ZZZ=0 ; fi  #   ob ueberhaupt eine primaere Partition da
if test $EXT != - ; then 
echo "extended Part. nur relevant falls redim von ihr ausreichend fuer Install UND redim der besten primaeren nicht ausreicht"
read AAA0 UNW1 UNW2 UNW3 ZZZ0 XXX0 YYY0  REST < tmp3
echo "groesster Zwischenraum nach redimension LOGICAL Partition:  " $AAA0 $UNW1 $UNW2 $UNW3 $ZZZ0 $XXX0 $YYY0
#  Wenn Platz primaerer Partitionen AAA zu klein, Platz logischer AAA0 nehmen
if test $ZZZ0 -gt 0 ; then      
if test $ZZZ -lt $SIZE  ; then   if test $ZZZ0 -ge $SIZE ; then AAA=$AAA0 ; KLEINER=$AAA ; ZZZ=$ZZZ0 ; XXX=$XXX0 ; YYY=$YYY0 ; fi    ; fi ;   # sicherer AAA0 statt EXT nehmen    
else ZZZ0=0 ; fi ;
fi ;

echo " *** ::: Fuer Install ausreichender Platz auf der HD  MIT Redimensionierung:  Gr/von/bis  " $ZZZ  "   "  $XXX  "    "  $YYY
echo " *** ::: Dazu redimensionieren Partition: " $AAA





# 3. Testen ob freier Platz ausreicht -1, sonst eine Partition kleiner machen -2 , oder loeschen -3 

echo " max. Zwischenraum auf Disk ohne Redim: "  $ZZ "  mit Redim: " $ZZZ  "  Groesse der zu machenden Partition:  "  $SIZE   "  Sektoren"
if test $ZZ -ge $SIZE  ;   then   STATUS="-1"  ; KLEINER=- ;   echo " *** Platz reicht ohne Redim fuer die Instalation *** " ; fi ;  
if test $ZZ -lt $SIZE  ;   then   
STATUS="-2"  ;   echo " *** noetig vhd. Partition kleiner machen: " $KLEINER " *** "  ; 
if test $ZZZ -lt $SIZE  ;  then   STATUS="-3"  ;   echo " *** noetig eine Partition zu loeschen  um Platz zu bekommen" ; fi ;
fi ;

echo " STATUS, -3 falls Part. geloescht wd muss um Platz zu kriegen ; -2 falls Part. kleiner zu machen, -1 falls Platz vhd:  "    $STATUS




if test $STATUS = "-3"  ;  then  
echo " um Platz zu bekommen, noetig eine Partition zu loeschen: vorrangig Windows, nachrangig extended  und bisheriges System "
#  Daten von Windows  (Filme, Musik) auf einer ggf. zweiten Partition sind idR wichtiger als die Windows System -Partition
if test $WINDOWSNR -ne 0 ; then  KLEINERNR=$WINDOWSNR ; else 
sort -n -r -k 4 -o scr partitions         #  nach Groesse sortieren.   Dann EXT und OLDSYS (nachrangig) rausnehmen und hinten anstelen:  
echo " EXTNR, EXT, OLDSYSNR,  OLDSYS:" $EXTNR, $EXT, $OLDSYSNR, $OLDSYS
if test $LOGNR -gt 0 ; then grep -v $LOG scr > scr1 ; else cat scr > scr1 ; fi ; 
if test $OLDSYSNR -gt 0 ; then grep -v $OLDSYS scr1 > scr ; else cat scr1 > scr ; fi ;      #  log. Partition  wird automatisch mit ext geloescht
echo $LOG >> scr ; echo $OLDSYS >> scr        # egal ob OLDSYS auf EXT , dann sowieso zu loeschen falls sonst keine Part. vhd
echo " Sortiert nach Preferenz zum Loeschen:"  ;  cat scr 
read KLEINER REST < scr  
for K in 1 2 3 4 ; do  
A=$NACH0$K ; if test $A = $KLEINER ; then KLEINERNR=$K ; fi ;  
done  
fi ;   # KLEINERNR -ne WINDOWSNR

if test $KLEINERNR -ge 5 ; then KLEINERNR=$EXTNR       
echo -e "d \n$EXTNR \np \nn \np \n$EXTNR \n  \n  \np   extended Partition erneuern noetig, STATUS = -3  --3d" >> fdisk.machen
EXT=- ; EXTNR=0 
fi ;       # log. Partitionen werden automatisch mit der extended Part. geloescht
#echo " Partition Nr. " $KLEINERNR " loeschen um Platz zu kriegen"
echo " Partition Nr. " $KLEINERNR " fuer Installation benutzen"
# Falls keine Abfrage sondern immer Partition loeschen, folgende beiden Anweisungen rein, die nachfolgenden raus
#echo -e "d \n$KLEINERNR \np Partition loeschen noetig --4d" >> fdisk.machen    
#ANZAHL=$(($ANZAHL - 1)) 
#ANZAHL=$(($ANZAHL + 1))    # um voriges zu anulieren, da keine Partitionen geaendert werden 
KLEINER=$NACH0$KLEINERNR
NACH=$KLEINER
echo $TST " " $SIZE  "  "  $NACH0 "  " $NACH  "  " $VON "  "  $KLEINER " " $OLDSYS " " $WINDOWS  "  " $REST > installinfo 
echo $TST " " $SIZE  "  "  $NACH0 "  " $NACH  "  " $VON "  "  $KLEINER " " $OLDSYS " " $WINDOWS  "  " $REST 
echo " Abfrage ob Halt oder Partition loeschen" ; echo "5  Abfrage ob Partition loeschen" > problem   ; exit ; 
# Speater noch einbauen, Loeschen mehrerer Partitionen wenn Platz noch zu klein
fi ;   # end STATUS=-3





if test $STATUS = "-2"  ;  then  


grep $KLEINER partitions > scr0
read UNW XKL YKL ZKL Y0KL Z0KL KLEINERFS KLEINERART REST < scr0
echo " Partition " $KLEINER " Groesse " $ZKL " kann um " $(($ZKL - $Z0KL)) " zu " $Z0KL " verkleinert werden"
echo " Danach freier Platz bis zur naechsten Partition: "  $ZZZ  

echo " Partition verkleinern: "  $KLEINER  "    "  $KLEINERNR  " vorher:  Sektor Anfg, Ende,  Bloecke: "  $XKL "  " $YKL "  " $ZKL 
echo " Part-Art: "  $KLEINERART  "Filesystem:  "  $KLEINERFS
echo " Zwischenraum durch Redimensionieren erreichbar:    vor: " $AAA "  Groesse:  " $ZZZ " von: " $XXX " bis: " $YYY
echo " Groesse mind. noetig fuer Installierung: " $SIZE  "     alles in Sektoren"
#Falls gewÃ¤ehlte Partition selbst nch Redimensionieren zu klein, wird sie soweit wie mÃ¶glich verkleinert und dann hinten abgebelt
#Falls dagegen mehr als minimal noetige Groesse der Installierung redimensinoert werden kann, wird 
## MEHRSIZE = 70% davon aber max. 1 GB mehr der Installierung gegeben  (nicht mehr da sonst redimensionieren zu lange dauert)
MAXMS=4000000     #   2 GB
if test $ZZZ -lt $SIZE ; then  echo "11  Kein Platz fuer Instalation" > problem ; exit ; fi ;  # kuenftig anders loesen 
if test $ZZZ -ge $SIZE ; then  MEHRSIZE=$(( ($ZZZ - $SIZE) * 7)) ; MEHRSIZE=$(($MEHRSIZE / 10))  
                     if test $MEHRSIZE -gt $MAXMS ; then MEHRSIZE=$MAXMS  ; fi ;  fi ; 
SIZE=$(($SIZE + $MEHRSIZE))
echo " Gewaehlte Groesse der Partition der Installierung:  "  $SIZE   

# Verkleinerung der Partition KLEINER um Groesse SIZE 
# Neuer freier Platz von XX bis YY :  ZZ = XX - 1 + SIZE 
YY=$YYY
EINS=1
XX=$(($YY - $SIZE +1))
YKL=$(($XX - 1))
# XKL bleibt
ZKL=$(($YKL - $XKL + 1))   # Sektoren
ZKL0=$(($ZKL / 2))k     # in k
#  Anfang - insb. bei logischen / extended Partitionen - muss exakt gleich bleiben !!!


echo " *** Zum Einrichten einer neuen Partition wird eine bestehende verkleinert *** "
echo "verkleinerte Partition: Platte, Name, Nr, Sektor von bis: " $NACH0 "  "  $KLEINER "  " $KLEINERNR  "    "  $XKL  "   "  $YKL  
echo " Danach freier Bereich von: " $XX "  bis: " $YY 
echo " Neue Groesse Partition:  " $ZKL " Sektoren   oder " $ZKL0  "    KB " 



echo " *** Beginn Verkleinern von Dateisystem auf: " $KLEINER " *** "
IFR=0
echo -e "y \ny \ny" > ntfs.machen
#/sbin/parted -s $NACH0 unit s resize $KLEINERNR $XKL $YKL   # das funktioniert fast nie, daher:
# Falls filesystem keins der nachfolgenden, bzw = "", ist Partition nicht formatiert, und kann einfach verkleinert werden ....
# Versucht wird  dann aber alles, da evtl nicht erkannt / kein Treiber da
echo " " > rs
echo "            \Z1 Redimensionar / Verkleinern : " $KLEINER "\Zn" >> rs 
echo "                     \Z1 para / zu : " $ZKL0 "\Zn" >> rs 
echo " " >> rs
#echo "  0/1 machen/simulieren: " $TST >> rs 
test $KLEINERFS = ext2 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT2" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = ext3 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT3" ; fi ;    # geht nicht mit Sektoren
test $KLEINERFS = ext4 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT4" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = ext4dev ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT4DEV" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = reiserfs ; if test $? -eq 0 ; then echo resize_reiserfs -s  $ZKL0 -f $KLEINER ; IFR=1 ; echo "REISERFS" ; fi ;
test $KLEINERFS = ntfs ; if test $? -eq 0 ; then ntfsfix $KLEINER >> rs ;  echo ntfsresize -bPfs $ZKL0  $KLEINER  IFR=1 ; echo "NTFS" ; fi ;
#test $KLEINER = $LOG ; if test $? -eq 0 ; then ntfsfix $LOG >> rs  ;  echo ntfsresize -fs $ZKL0  $LOG ; IFR=1 ; echo "NTFS";  fi ; 
test $KLEINERFS = vfat ; if test $? -eq 0 ; then echo   /sbin/fatresize -s $ZKL0 $KLEINER ; IFR=1 ; echo "FAT" ; fi ;
test $IFR = 0 ; if test $? -eq 0 ; then echo ntfsfix $KLEINER  ;  echo ntfsresize -fs $ZKL0  $KLEINER ; IFR=1 ; echo "NTFS"; fi ;
test $IFR = 0 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL ; IFR=1 ;echo "EXT3" ; fi ;    # geht nicht mit Sektoren
if test $TST -ne 0 ; then echo " *** Test-Mode, kein wirkliches Formatieren " ; fi ;
if test $TST -eq 0 ; then
test $KLEINERFS = ext2 ; if test $? -eq 0 ; then  /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT2" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = ext3 ; if test $? -eq 0 ; then  /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT3" ; fi ;    # geht nicht mit Sektoren
test $KLEINERFS = ext4 ; if test $? -eq 0 ; then  /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT4" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = ext4dev ; if test $? -eq 0 ; then  /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ;echo "EXT4DEV" ; fi ;      # geht nicht mit Sektoren
test $KLEINERFS = reiserfs ; if test $? -eq 0 ; then  /sbin/resize_reiserfs -s  $ZKL0 -f $KLEINER >> rs ; IFR=1 ; echo "REISERFS" ; fi ;
test $KLEINERFS = ntfs ; if test $? -eq 0 ; then /usr/bin/ntfsfix $KLEINER >> rs  
/usr/sbin/ntfsresize -bPfs $ZKL0  $KLEINER  < ntfs.machen   >> rs
IFR=1 ; echo "NTFS"; fi ;
#test $KLEINER = $LOG ; if test $? -eq 0 ; then 
#/usr/bin/ntfsfix $LOG  >> rs  ;  /usr/sbin/ntfsresize -bPfs $ZKL0  $LOG < ntfs.machen   >> rs ; IFR=1 ; echo "NTFS";  fi ; 
test $KLEINERFS = vfat ; if test $? -eq 0 ; then   /sbin/fatresize -s $ZKL0 $KLEINER  >> rs ; IFR=1 ; echo "FAT" ; fi ;
test $IFR = 0 ; if test $? -eq 0 ; then  /usr/bin/ntfsfix $KLEINER   >> rs  
/usr/sbin/ntfsresize -bPfs $ZKL0  $KLEINER < ntfs.machen   >> rs
IFR=1 ; echo "NTFS"; fi ;
test $IFR = 0 ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0  >> rs ; IFR=1 ; echo "EXT3" ; fi ;    # geht nicht mit Sektoren
sync
fi ;
##echo " resize fertig , Partition " $KLEINER ", size: " $ZKL0  >> rs ; echo "  0/1 machen/simulieren: " $TST >> rs 

#killall -HUP sleep ; rm -f rs ; killall -HUP sleep    # externer Dialog: wait stoppen und def. rs ausgeben; rs loeschen; letztes wait stoppen
mv -f rs tmp/resize.mkpart ; rm -f rs      # Loeschen von rs reicht, damit Dialog nicht mehr angezeigt wird

echo " egal ob FS verkleinern erfolgreich war oder nicht, hinten wird jetzt abgesaebelt: "
echo " **** PARTITION "  $KLEINER " VERKLEINERN,    VON SEKTOR "  $XKL  "  BIS " $YKL  " **** "
# nach Loeschen mit fdisk, Rausgehen noetig, da Eingabe abhÃ¤ngig ob es die einzige Partition war oder nicht
echo "EXTNR , LOGNR" $EXTNR $LOGNR

###if test $TST -eq 0 ; then


echo "relevante PARTITIONEN :   KLEINER: " $KLEINER  "  EXT:  " $EXT  "  LOG:  "  $LOG 
echo "relevante NUMMERN :   KLEINERNR: " $KLEINERNR  "  EXTNR: " $EXTNR  "  LOGNR:  " $LOGNR   

if test $ANZAHL -gt 1 ; then  echo -e "d \n$KLEINERNR \np primaere und logische Part. redim Beginn  --5d" >> fdisk.machen  ; fi ;    
if test $ANZAHL -le 1 ; then  echo -e "d \np primaere und logische Part. redim Beginn  --5d" >> fdisk.machen  ; fi ;    
###/sbin/fdisk $NACH0 < fdisk.machen

if test $KLEINER = $LOG ; then 
echo -e "d \n$EXTNR \np extended Part. redim Beginn  --6d" >> fdisk.machen    
###/sbin/fdisk $NACH0 < fdisk.machen
fi ;

echo "Die zu verkleinernde Partition ist jetzt weg, falls eine logische, auch die extended.  Wird verkleinert neu gemacht."

#   Falls Renovierung der letzten primaeren / ext. Partition 1 - 4 (also HD voll), in fdisk keine PartNr. angeben

if test $KLEINER = $LOG ; then 
echo "KLEINER.EQ.LOG: verkleinerte EXTENDED part. machen   von " $(($XKL-63)) " bis " $YKL 
if test $ANZAHL -lt 4 ; then   echo -e "n \ne \n$EXTNR \n$(($XKL-63)) \n$YKL \np Extended. redim Ende  --7" >> fdisk.machen     ; fi ;
if test $ANZAHL -ge 4 ; then   echo -e "n \ne \n$(($XKL-63)) \n$YKL \np Extended. redim Ende  --8" >> fdisk.machen     ; fi ;
echo -e "t \n$EXTNR \n5   Extended. Part redim Ende: Art der P.art  --9" >> fdisk.machen
fi ;

if test $KLEINER != $LOG ; then 
echo "KLEINER.NE.LOG: verkleinerte PRIMARY Part. machen   von " $XKL " bis " $YKL
if test $ANZAHL -lt 4 ; then   echo -e "n \np \n$KLEINERNR \n$XKL \n$YKL \np Primaere. redim Ende  --10" >> fdisk.machen     ; fi ;
if test $ANZAHL -ge 4 ; then   echo -e "n \np \n$XKL \n$YKL \np Primaere. redim Ende   --11" >> fdisk.machen     ; fi ;
echo -e "t \n$KLEINERNR \n$KLEINERART   Primaere. Part redim Ende: Art der P.art  --12" >> fdisk.machen
fi ;

if test $KLEINER = $LOG ; then  echo "KLEINER.EQ.LOG: jetzt verkleinerte LOGISCHE Part. machen von " $XKL " bis " $YKL   ; fi ;
if test $KLEINER = $LOG ; then  echo -e "n \nl  \n$XKL \n$YKL \np log.Part. redim Ende  --13" >> fdisk.machen  ; fi ; # keine Nr. angeben
if test $KLEINER = $LOG ; then  echo -e "t \n$LOGNR \n7 log.Part. Art  --14" >> fdisk.machen     ; fi ;  # typ 7=ntfs, fals dann ext kein Problem
###/sbin/fdisk $NACH0 < fdisk.machen

###fi ;


#if test $TST -eq 0 ; then  /sbin/parted -s $NACH0 rm $KLEINERNR ; fi ;        #  Partition hinten absÃbeln egal ob Filesystem verkleinert oder nicht
#echo " *** "  $KLEINER " verkleinert neu machen :"
#echo "          parted Aufruf mit File-System:  "  $KLEINERFS  " Bereich fuer KLEINER: "  $XKL  $YKL 
#if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart $KLEINERART $KLEINERFS  $XKL $YKL ; fi ; 
#echo " *** "  $KLEINER  " neu gemacht.    Situation jetzt:  " 
#if test $TST -eq 0 ; then /sbin/parted -s $NACH0  unit s print ; fi ;


STATUS="-1"    # da nachfolgendes ebenfalls zu durchlaufen ist

fi ;    # end STATUS=-2


echo "Nach evtl. Platz machen:  status, NACH0, NACHNR, EXTNR, LOGNR: "  $STATUS $NACH0  $NACHNR  $EXTNR  $LOGNR
echo "KLEINER: " $KLEINERNR  "kleiner, sizekleiner"   $KLEINER    $ZKL 

   


if test $STATUS = "-1"  ;  then  

if test $NACHNR = 0 ; then 
# 4.2 Nr.  NACHNR  der neuen Partition definitiv festlegen
  NACHNR=$(($NACHNR + 4)) ; NACHNR=$(($NACHNR / 3)) 
echo " ******** EXTNR : " $EXTNR " ************* NACHNR : " $NACHNR  
   if test $NACHNR = $EXTNR ; then NACHNR=$(($NACHNR + 1)) ; fi ;
echo " ******** EXTNR : " $EXTNR " ************* NACHNR : " $NACHNR  



      # EXTNR vermeiden, KLEINERNR dagegen ruhig verwendbar
echo " schon 4 Part. vhd: vhd. Partition" $NACHNR " wird in fdisk ausgeschaltet, um diese Nr. fÃr neue Part. zu benutzen, "
echo " wird aber nicht gelÃscht und kann durch Eintippen ihrer Grenzen (siehe logfile) in fdisk wieder benutzt werden" 
#echo " Warnung Partition ausgeschaltet, daten loeschen" ; echo "6  Warnung Partition ausgeschaltet, Daten loeschen" > problem   ; exit ; 
# Dazu noetig Abfrage ob nach Loeschen der unmountbaren/kaputten ueberhaupt noch
# 4 Partitionen da waren; denn nachfolgend wird die neue Part-Nr auf jedem Fall geloescht

###if test $TST -eq 0 ; then    
#  /sbin/parted -s $NACH0 rm $NACHNR 
echo -e "p \nd \n$NACHNR \np Bei 4 Part. eine ausschalten um Index zu bekommen, NACHNR = 0  --15d" >> fdisk.machen      # Falls letzte Part., keine p-nr angeben !!
###/sbin/fdisk $NACH0  < fdisk.machen
###fi ;
fi ;   #  end NACHNR=0
 NACH=$NACH0$NACHNR

echo "nach definitiver Nr. fuer neue Part.: status, Platte, nachnr, extnr, kleinernr: "  $STATUS  $NACH0 $NACHNR  $EXTNR  $KLEINERNR



# 4.3 Partition fÃ¼r die Installierung machen
XX=$(($XX+128)) ; YY=$(($YY-128))                   # sicherbeitshalber ...aber zZt nicht noetig
echo " *** Platte / Partition machen:  NACH0 , NACHNR , NACH  " $NACH0 "  "  $NACHNR "   "  $NACH   " *** " 
echo " *** Groesse von/bis XX , YY : "  $XX  "   "  $YY  " , wurde sicherheitshalber um +/- 128 verkleinert "

echo " **** INSTALL - PARTITION " $NACH "MACHEN,    SEKTOR " $XX " BIS SEKTOR" $YY " **** "

###if test $TST -eq 0 ; then

# Bei nur 1 Partition: da Part-Nr nicht angebbar, nicht vorsorglich loeschen da sonst eine exist. Partition mit falscher Nr
# geloescht wuerde.  In diesem Fall scheidet Problem besetzter Nummern aus, nur bei STATUS=-3 loeschen
# Nachfolgende Abfrage eigentlich ueberfluessig, redim der Install-Part kommt nicht vor, gl. Nr. siehe oben, ausserdem
# wuerde Vorhandensein der Install-Part idR nicht schaden.   
echo " Anzahl Partitionen schon da: " $ANZAHL " Status: " $STATUS " Install nach Part. " $NACHNR  " Part. zu verkleinern: " $KLEINERNR 
if test $ANZAHL -gt 1 ; then  echo -e "d \n$NACHNR \np evtl. vhd. Part. mit Index NACHNR = Install-Part. loeschen  --16d" >> fdisk.machen ; fi ;
###/sbin/fdisk $NACH0  < fdisk.machen  

if test $ANZAHL -lt 3 ; then  echo -e "n \np \n$NACHNR \n$XX \n$YY \np Install-Partition machen  --17" >> fdisk.machen ; fi ;     
if test $ANZAHL -ge 3 ; then  echo -e "n \np \n$XX \n$YY \np Install-Part. machen  --18" >> fdisk.machen   ; fi ;   # da letzte Part., keine p-nr angeben !!
####echo -e "t \n$NACHNR \n$NACHART   Ext.Part. Art  --19" >> fdisk.machen  Abfrage nÃ¶tig Anzahl, falls 0, KEINE $NACHNR vorgeben !!!

###/sbin/fdisk $NACH0  < fdisk.machen  

echo -e "a \n$NACHNR \np  Bootlabel aendern  --20" >> fdisk.machen       # altes boot-label wurde schon geloescht
#if test $WINDOWSNR -ne 0 ; then   if test $WINDOWSNR -eq $OLDSYSNR ; then   
#echo -e "a \n$OLDSYSNR  \np  Bootlabel fuer Windows aktiviert lassen  --22" >> fdisk.machen
#fi ; fi ;



###/sbin/fdisk $NACH0  < fdisk.machen  

###fi ;



# Partition NACHNR machen:
#if test $TST -eq 0 ; then  /sbin/parted -s $NACH0  unit s mkpart primary   $XX $YY  ; fi ; 
#echo "          parted Aufruf mit:  "  $NACH0  " Bereich fuer KLEINER: "  $XX  $YY 
#sync
#echo " *** "  $NACH  " neu gemacht.    Situation jetzt:  " 
#/sbin/parted -s $NACH0  unit s print 
####fi ;


#if test $STATUS = "-2"  ;  then  
#echo " ******** testweise ******* als maximale Gewaehr: KLEINER loeschen, dann NACH nochmal machen lassen:  *********** "
#  Vorsicht falls man kleiner erst nach nach macht, ist die Nr. falsch
#  Einzige LÃ¶sung:  beide Partitionen lÃ¶schen (NACHNR und KLEINERNR), und danach zuerst diejenige mit der kleineren Nr machen
#if test $TST -eq 0 ; then  /sbin/parted -s $NACH0 rm $KLEINERNR ; fi ;       
#XKL100=$(($XKL+256)) ; XKL200=$(($XKL+1024)) 
#if test $TST -eq 0 ; then   /sbin/parted -s $NACH0 unit s mkpart $KLEINERART $KLEINERFS  $XKL100 $XKL200 ; fi ;  # dummy wg Index   Hinterher reparieren
#if test $TST -eq 0 ; then  /sbin/parted -s $NACH0  unit s mkpart primary ext3  $XX $YY  ; fi ;   # falls vorher erfolgreich gemacht, kein Problem
#echo "          parted Aufruf mit:  "  $NACH0  " Bereich fuer KLEINER: "  $XX  $YY 
#sync
#echo " *** "  $NACH  " neu gemacht.    Situation jetzt:  " 
#/sbin/parted -s $NACH0  unit s print 
#echo " *** Versuch   KLEINER  wieder zu machen,  falls erfolgreich ist alles OK und dieses testweise unschaedlich "
#/sbin/parted -s $NACH0 rm $KLEINERNR ;  
#if test $TST -eq 0 ; then  /sbin/parted -s $NACH0 unit s mkpart $KLEINERART  $KLEINERFS $XKL $XKL ; fi ;         
#echo " ***   KLEINER   neu gemacht.    Situation jetzt:  " 
#/sbin/parted -s $NACH0  unit s print 
#echo " ************************ " 
fi ;   # end STATUS=-1

#/sbin/parted -s $NACH0 set $NACHNR  boot on       # bootbar machen

# 4.4.  Hier ggf. nochmal Groesse ueberpruefen und wenn  wenn was nicht iO mit leicht geaenderten Bedingungen bzgl Groesse
#   o.ae. nach oben springen
#echo " *** INSTALL-DRIVE , DEVICE SOLLTEN JETZT DA SEIN:  "  $NACH0   "    "  $NACH  
#/sbin/parted -s $NACH  unit s  print
#echo "Alle Partitionen: "
#/sbin/parted -s $NACH0 unit s  print


# 5. Parameteruebergabe nach aussen
echo "TST: " $TST "  SIZE: " $SIZE 
test $TST -ge 0 ; if test $? -ne 0 ; then TST=0 ; fi ; 
test $SIZE -ge 0 ; if test $? -ne 0 ; then SIZE=0 ; fi ;     # Es darf kein leerer Parameter also " " da sein sonst alle folgenden falsch 
echo " mkpart Ende: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  
echo $TST " " $SIZE  "  "  $NACH0 "  " $NACH  "  " $VON "  "  $KLEINER " " $OLDSYS " " $WINDOWS  "  " $REST 
echo $TST " " $SIZE  "  "  $NACH0 "  " $NACH  "  " $VON "  "  $KLEINER " " $OLDSYS " " $WINDOWS  "  " $REST > installinfo 
echo " Ausgabe von mkpart: "
echo "neue Partition: Platte,  Name, Nr, Track von bis:   " $NACH0 "  "  $NACH "  " $NACHNR  "    "  $XX  "   "  $YY  
echo " altes System:  "  $OLDSYS  "     Windows:  " $WINDOWS  

if test $TST -eq 0 ; then  echo -e "p \nw  AUSFUEHREN, AUF DISK SCHREIBEN, KEIN TEST  --23" >> fdisk.machen  ; fi ;         # Bei TST=0 kein Test, wirklich schreiben
if test $TST -ne 0 ; then  echo -e "p  SIMULIEREN, DA TEST  --24" >> fdisk.machen  ; fi ;            #     TST=1  nur simulieren

echo " * * *  "
echo " * * * Von mkpart erzeugte / nach fdisk.machen geschriebene Aenderungen der Partitionstafel: "
cat fdisk.machen 
echo " * * * Die Anwendung von fdisk.machen / tatsaechliche Aenderung  der Partitionen erfolgt in ./init nach Problem-Behandlung / Rueckfrage" 
echo " * * *  "

echo " 

*** alte  Partitionen : 

"
cat fdiskwar


STATUS="1" 

echo "0  Ende mkpart, scheinbar erfolgreich" > problem  

echo " *** Ende mkpart " 

exit 

