From: <cod...@go...> - 2007-09-10 00:13:51
|
Author: easuter Date: Sun Sep 9 17:13:11 2007 New Revision: 25 Modified: trunk/.lang/.pot trunk/.lang/frmPartSelect.pot trunk/.project trunk/.settings trunk/Functions.module trunk/Utils.module trunk/cPartInfo.class trunk/frmDriveSelect.class trunk/frmPartSelect.class Log: Changes: - Utils.module: Added an exception to the filesystem identification code, since disktype's output changes slightly when used against an ntfs partiton. Parse_fdisk sub also adds free space values for each filesystem. Maybe its time to call the Parse_fdisk sub something else ;) - frmPartSelect.class: "Units" column replaced with the "Free Space" column. The "Size" and "Free Space" columns both display the units in the same cell as the value. Other small ajustments made due to changes in Functions.AutoUnits() - Functions.module: The AutoUnits() function has been tuned to round sizes to two decimal units (x.xx), so as to be a bit more accurate with large disk sizes. -- Created new function getFreePartSpace() that will return the free space of a partition, based on the filesystem. This was possible by looking at the gparted source code to see which commands and options are best for each filesystem. So far these filesystems have been implemented: Ext2, Ext3, XFS and ReiserFS. TODO: JFS, FAT16, FAT32, NTFS, Minix(?). Modified: trunk/.lang/.pot ============================================================================== --- trunk/.lang/.pot (original) +++ trunk/.lang/.pot Sun Sep 9 17:13:11 2007 @@ -18,12 +18,12 @@ msgid "Enter a value:" msgstr "" -#: InputBox.class:205 frmDriveSelect.class:129 frmPartSelect.class:372 +#: InputBox.class:205 frmDriveSelect.class:129 frmPartSelect.class:378 msgid "OK" msgstr "" #: InputBox.class:212 frmChooseFB.class:91 frmDriveSelect.class:136 -#: frmPartSelect.class:379 +#: frmPartSelect.class:385 msgid "Cancel" msgstr "" @@ -206,7 +206,7 @@ msgid "Config 2" msgstr "" -#: frmDriveSelect.class:110 frmPartSelect.class:347 +#: frmDriveSelect.class:110 frmPartSelect.class:353 msgid "Drives" msgstr "" @@ -226,7 +226,7 @@ msgid "The choice" msgstr "" -#: frmMain.class:225 frmPartSelect.class:387 +#: frmMain.class:225 frmPartSelect.class:393 msgid "Partitions" msgstr "" @@ -300,71 +300,71 @@ msgid "No extras" msgstr "" -#: frmPartSelect.class:261 +#: frmPartSelect.class:267 msgid "Mountpoints" msgstr "" -#: frmPartSelect.class:267 +#: frmPartSelect.class:273 msgid "/" msgstr "" -#: frmPartSelect.class:273 +#: frmPartSelect.class:279 msgid "/home" msgstr "" -#: frmPartSelect.class:279 +#: frmPartSelect.class:285 msgid "/var" msgstr "" -#: frmPartSelect.class:285 +#: frmPartSelect.class:291 msgid "/opt" msgstr "" -#: frmPartSelect.class:291 +#: frmPartSelect.class:297 msgid "/tmp" msgstr "" -#: frmPartSelect.class:297 +#: frmPartSelect.class:303 msgid "/boot" msgstr "" -#: frmPartSelect.class:303 +#: frmPartSelect.class:309 msgid "/usr" msgstr "" -#: frmPartSelect.class:309 +#: frmPartSelect.class:315 msgid "/share" msgstr "" -#: frmPartSelect.class:315 +#: frmPartSelect.class:321 msgid "FileSystem" msgstr "" -#: frmPartSelect.class:321 +#: frmPartSelect.class:327 msgid "xfs" msgstr "" -#: frmPartSelect.class:327 +#: frmPartSelect.class:333 msgid "reiserfs" msgstr "" -#: frmPartSelect.class:333 +#: frmPartSelect.class:339 msgid "ext3" msgstr "" -#: frmPartSelect.class:339 +#: frmPartSelect.class:345 msgid "ext2" msgstr "" -#: frmPartSelect.class:355 +#: frmPartSelect.class:361 msgid "Click on select install drive" msgstr "" -#: frmPartSelect.class:361 +#: frmPartSelect.class:367 msgid "Right-click in Mount or FileSystem to set" msgstr "" -#: frmPartSelect.class:395 +#: frmPartSelect.class:401 msgid "" "<ul>\n" "<li>Left-click to (un)select drive(s) to install Vector Linux.</li>\n" Modified: trunk/.lang/frmPartSelect.pot ============================================================================== --- trunk/.lang/frmPartSelect.pot (original) +++ trunk/.lang/frmPartSelect.pot Sun Sep 9 17:13:11 2007 @@ -14,87 +14,87 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: frmPartSelect.class:261 +#: frmPartSelect.class:267 msgid "Mountpoints" msgstr "" -#: frmPartSelect.class:267 +#: frmPartSelect.class:273 msgid "/" msgstr "" -#: frmPartSelect.class:273 +#: frmPartSelect.class:279 msgid "/home" msgstr "" -#: frmPartSelect.class:279 +#: frmPartSelect.class:285 msgid "/var" msgstr "" -#: frmPartSelect.class:285 +#: frmPartSelect.class:291 msgid "/opt" msgstr "" -#: frmPartSelect.class:291 +#: frmPartSelect.class:297 msgid "/tmp" msgstr "" -#: frmPartSelect.class:297 +#: frmPartSelect.class:303 msgid "/boot" msgstr "" -#: frmPartSelect.class:303 +#: frmPartSelect.class:309 msgid "/usr" msgstr "" -#: frmPartSelect.class:309 +#: frmPartSelect.class:315 msgid "/share" msgstr "" -#: frmPartSelect.class:315 +#: frmPartSelect.class:321 msgid "FileSystem" msgstr "" -#: frmPartSelect.class:321 +#: frmPartSelect.class:327 msgid "xfs" msgstr "" -#: frmPartSelect.class:327 +#: frmPartSelect.class:333 msgid "reiserfs" msgstr "" -#: frmPartSelect.class:333 +#: frmPartSelect.class:339 msgid "ext3" msgstr "" -#: frmPartSelect.class:339 +#: frmPartSelect.class:345 msgid "ext2" msgstr "" -#: frmPartSelect.class:347 +#: frmPartSelect.class:353 msgid "Drives" msgstr "" -#: frmPartSelect.class:355 +#: frmPartSelect.class:361 msgid "Click on select install drive" msgstr "" -#: frmPartSelect.class:361 +#: frmPartSelect.class:367 msgid "Right-click in Mount or FileSystem to set" msgstr "" -#: frmPartSelect.class:372 +#: frmPartSelect.class:378 msgid "OK" msgstr "" -#: frmPartSelect.class:379 +#: frmPartSelect.class:385 msgid "Cancel" msgstr "" -#: frmPartSelect.class:387 +#: frmPartSelect.class:393 msgid "Partitions" msgstr "" -#: frmPartSelect.class:395 +#: frmPartSelect.class:401 msgid "<ul>\n<li>Left-click to (un)select drive(s) to install Vector Linux.</li>\n<li>Right-click on Linux partitions to pick mountpoint</li>\n<li>Left-click on other partitions to edit mountpoint</li>\n</ul>\n" msgstr "" Modified: trunk/.project ============================================================================== --- trunk/.project (original) +++ trunk/.project Sun Sep 9 17:13:11 2007 @@ -2,10 +2,10 @@ Title=VL-gui-installer Startup=Main Icon=vl_logo_icon2.png -Version=0.0.197 +Version=0.0.227 Library=gb.qt Library=gb.qt.ext TabSize=3 Translate=1 ControlPublic=1 -ExecPath=/home/moe/Desktop/vl-installer.gambas +ExecPath=/home/easuter/vinstall-ng.gambas Modified: trunk/.settings ============================================================================== --- trunk/.settings (original) +++ trunk/.settings Sun Sep 9 17:13:11 2007 @@ -2,7 +2,7 @@ Count=0 [FFind] -SearchIn="Sub" +SearchIn="Module" CaseSensitive=True SearchWord=False SearchComment=False Modified: trunk/Functions.module ============================================================================== --- trunk/Functions.module (original) +++ trunk/Functions.module Sun Sep 9 17:13:11 2007 @@ -2,22 +2,20 @@ ' ### SYSTEMWIDE FUNCTIONS ### -PUBLIC FUNCTION AutoUnits(capacity AS Long) AS String -' Return drive/partition size in nicer units as "value;unit" string: +PUBLIC FUNCTION AutoUnits(value AS Float) AS String +'Function that will automatically turn a generic size value into something human-readable (in multiples of bytes): DIM temp AS Long -IF capacity < 1000 THEN ' Bytes: - RETURN Format$(capacity, "###,###,###,###") & ";B" -ELSE IF capacity < 1000000 THEN ' Kilobytes: - RETURN Format$(capacity / 1024, "###,###,###,###") & ";KB" - 'gridDisk[m + 1,units].Text = "KB" -ELSE IF capacity < 1000000000 THEN ' Megabytes: - RETURN Format$(capacity / 1048576, "###,###,###,###") & ";MB" - 'gridDisk[m + 1,units].Text = "MB" -ELSE IF capacity < 1000000000000 ' Gigabytes: - RETURN Format$(capacity / 1073741824, "####,###,###,###") & ";GB" +IF value < 1000 THEN ' Bytes: + RETURN value & " B" +ELSE IF value < 1000000 THEN ' Kilobytes: + RETURN Round(value / 1024, -2) & " KB" +ELSE IF value < 1000000000 THEN ' Megabytes: + RETURN Round(value / 1048576, -2) & " MB" +ELSE IF value < 1000000000000 ' Gigabytes: + RETURN Round(value / 1073741824, -2) & " GB" ELSE 'Terabytes - RETURN Format$(capacity / 1099511627776, "####,###,###,###") & ";TB" + RETURN Round(value / 1099511627776, -2) & " TB" END IF END @@ -215,6 +213,51 @@ END +PUBLIC FUNCTION getFreePartSpace(device AS String, filesystem AS String) AS Long +'Calculate the free space on a partition based on its filesystem, and then return the value +'This is basicaly a Gambas implementation of what GParted does for detecting free space on partitions in C++ +DIM sTemp AS String +DIM sTemp2 AS String +DIM sFreeBlocks AS String +DIM sBlockSize AS String +DIM arrTemp AS NEW String[] +DIM iFreeBytes AS Long + +device = Trim$(device) +filesystem = Trim$(filesystem) + +'The array's index used ([x]) to get the free blocks and the block size was obtained by studying the ouput of the commands used below +IF filesystem = "Ext3" OR filesystem = "Ext2" THEN + SHELL "dumpe2fs -h " & device TO sTemp + sTemp = Trim$(sTemp) + arrTemp = Split(sTemp, Chr$(10)) + sFreeBlocks = Trim$(Mid$(arrTemp[13], RInStr(arrTemp[13], Space$(1)))) + sBlockSize = Trim$(Mid$(arrTemp[16], RInStr(arrTemp[16], Space$(1)))) + iFreeBytes = CLng(sFreeBlocks) * CLng(sBlockSize) +ELSE IF filesystem = "XFS" THEN + SHELL "xfs_db -c 'sb 0' -c 'print blocksize' -c 'print fdblocks' -r " & device TO sTemp + sTemp = Trim$(sTemp) + arrTemp = Split(sTemp, Chr$(10)) + sFreeBlocks = Trim$(Mid$(arrTemp[1], RInStr(arrTemp[1], Space$(1)))) + sBlockSize = Trim$(Mid$(arrTemp[0], RInStr(arrTemp[0], Space$(1)))) + iFreeBytes = CLng(sFreeBlocks) * CLng(sBlockSize) +ELSE IF filesystem = "ReiserFS" THEN + SHELL "debugreiserfs " & device TO sTemp + sTemp = Trim$(sTemp) + arrTemp = Split(sTemp, Chr$(10)) + sFreeBlocks = Trim$(Mid$(arrTemp[6], RInStr(arrTemp[6], Space$(1)))) + sBlockSize = Trim$(Mid$(arrTemp[5], RInStr(arrTemp[5], Space$(1)))) + iFreeBytes = CLng(sFreeBlocks) * CLng(sBlockSize) +ELSE IF filesystem = "JFS" THEN + iFreeBytes = 0 +ELSE + iFreeBytes = 0 +ENDIF + +RETURN iFreeBytes + + +END PUBLIC FUNCTION CalcSwap(sysmem AS Long) AS Long Modified: trunk/Utils.module ============================================================================== --- trunk/Utils.module (original) +++ trunk/Utils.module Sun Sep 9 17:13:11 2007 @@ -73,7 +73,6 @@ DIM pos AS Long DIM n AS Long, m AS Long DIM pcounter AS Long -DIM item AS Integer ' 4 debug: IF Global.DebugMode = TRUE THEN @@ -94,9 +93,9 @@ vPI.StartBlock = arrTemp2[2] vPI.EndBlock = arrTemp2[3] IF Right$(arrTemp2[4]) = "+" THEN - vPI.Blocks = Val(Left$(arrTemp2[4], Len(arrTemp2[4]) - 1)) + vPI.Bytes = CLng(Val(Left$(arrTemp2[4], Len(arrTemp2[4]) - 1))) * 1024 ELSE - vPI.Blocks = Val(arrTemp2[4]) + vPI.Bytes = CLng(Val(arrTemp2[4])) * 1024 ENDIF vPI.ID = arrTemp2[5] ELSE @@ -104,23 +103,25 @@ vPI.StartBlock = arrTemp2[1] vPI.EndBlock = arrTemp2[2] IF Right$(arrTemp2[3]) = "+" THEN - vPI.Blocks = Val(Left$(arrTemp2[3], Len(arrTemp2[3]) - 1)) + vPI.Bytes = CLng(Val(Left$(arrTemp2[3], Len(arrTemp2[3]) - 1))) * 1024 ELSE - vPI.Blocks = Val(arrTemp2[3]) + vPI.Bytes = CLng(Val(arrTemp2[3])) * 1024 ENDIF vPI.ID = arrTemp2[4] ENDIF - IF Functions.getPartType(vPI.ID) = "Linux swap" THEN - vPI.FileSystem = "Swap" - ELSE IF Functions.getPartType(vPI.ID) = "Extended" THEN + IF Functions.getPartType(vPI.ID) = "Extended" THEN vPI.FileSystem = "Extended" - ELSE + ELSE IF Functions.getPartType(vPI.ID) = "HPFS/NTFS" THEN + vPI.FileSystem = "NTFS" + ELSE SHELL "disktype " & vPI.Device TO sTemp2 sTemp2 = Trim$(sTemp2) arrTemp3 = Split(sTemp2, Chr$(10)) - vPI.FileSystem = Trim$(Left$(arrTemp3[2], InStr(arrTemp3[2], Space$(1)))) 'after being trimmed, the filesystem data will be on line 3 of the buffer (index 2 of the array) + vPI.FileSystem = Trim$(Left$(arrTemp3[2], InStr(arrTemp3[2], Space$(1)))) ENDIF + + vPI.FreeBytes = Functions.getFreePartSpace(vPI.Device, vPI.FileSystem) Global.PartInfo.Push(vPI) ELSE IF pos > 1 ' Parse a disk drive. Modified: trunk/cPartInfo.class ============================================================================== --- trunk/cPartInfo.class (original) +++ trunk/cPartInfo.class Sun Sep 9 17:13:11 2007 @@ -5,7 +5,8 @@ PUBLIC Bootable AS Boolean PUBLIC StartBlock AS Long PUBLIC EndBlock AS Long -PUBLIC Blocks AS Long +PUBLIC Bytes AS Long +PUBLIC FreeBytes AS Long PUBLIC ID AS String PUBLIC Mountpoint AS String PUBLIC FileSystem AS String Modified: trunk/frmDriveSelect.class ============================================================================== --- trunk/frmDriveSelect.class (original) +++ trunk/frmDriveSelect.class Sun Sep 9 17:13:11 2007 @@ -44,7 +44,7 @@ gridDisk[m, 0].Text = Global.DiskInfo[m - 1].Device gridDisk[m, 1].Alignment = Align.Right gridDisk[m, 1].Text = Global.DiskInfo[m - 1].Bytes - arrTemp = Split(Functions.AutoUnits(Global.DiskInfo[m - 1].Bytes), ";", "", TRUE) + arrTemp = Split(Functions.AutoUnits(Global.DiskInfo[m - 1].Bytes), " ", "", TRUE) gridDisk[m, 1].Text = arrTemp[0] gridDisk[m, 2].Alignment = Align.Left gridDisk[m, 2].Text = arrTemp[1] Modified: trunk/frmPartSelect.class ============================================================================== --- trunk/frmPartSelect.class (original) +++ trunk/frmPartSelect.class Sun Sep 9 17:13:11 2007 @@ -47,7 +47,7 @@ gridDisk[m, 0].Text = Global.DiskInfo[m - 1].Device gridDisk[m, 1].Alignment = Align.Right gridDisk[m, 1].Text = Global.DiskInfo[m - 1].Bytes - arrTemp = Split(Functions.AutoUnits(Global.DiskInfo[m - 1].Bytes), ";", "", TRUE) + arrTemp = Split(Functions.AutoUnits(Global.DiskInfo[m - 1].Bytes), " ", "", TRUE) gridDisk[m, 1].Text = arrTemp[0] gridDisk[m, 2].Alignment = Align.Left gridDisk[m, 2].Text = arrTemp[1] @@ -59,11 +59,11 @@ 'gridPart.Rows.Count = MaxPartions gridPart.Rows.Count = 256 gridPart.Columns[0].Width = 0.15 * gridPart.ClientWidth -gridPart.Columns[1].Width = 0.1 * gridPart.ClientWidth -gridPart.Columns[2].Width = 0.075 * gridPart.ClientWidth +gridPart.Columns[1].Width = 0.125 * gridPart.ClientWidth +gridPart.Columns[2].Width = 0.1 * gridPart.ClientWidth gridPart.Columns[3].Width = 0.055 * gridPart.ClientWidth -gridPart.Columns[4].Width = 0.3 * gridPart.ClientWidth -gridPart.Columns[5].Width = 0.195 * gridPart.ClientWidth +gridPart.Columns[4].Width = 0.275 * gridPart.ClientWidth +gridPart.Columns[5].Width = 0.17 * gridPart.ClientWidth gridPart.Columns[6].Width = 0.125 * gridPart.ClientWidth 'Center gridPart titles alignment: @@ -74,9 +74,9 @@ 'Setup gridPart titles: gridPart[0, 0].Text = "Partition" gridPart[0, 1].Text = "Size" -gridPart[0, 2].Text = "Units" +gridPart[0, 2].Text = "Free Space" gridPart[0, 3].Text = "Boot" -gridPart[0, 4].Text = "Type & FileSystem" +gridPart[0, 4].Text = "FileSystem" gridPart[0, 5].Text = "Mount" gridPart[0, 6].Text = "Format with" @@ -85,7 +85,7 @@ gridPart.Rows[m].Height = 20 gridPart[m, 0].Alignment = Align.Left gridPart[m, 1].Alignment = Align.Right - gridPart[m, 2].Alignment = Align.Left + gridPart[m, 2].Alignment = Align.Right gridPart[m, 3].Alignment = Align.Center gridPart[m, 4].Alignment = Align.Left gridPart[m, 5].Alignment = Align.Left @@ -119,15 +119,21 @@ IF InStr(Global.PartInfo[n - 1].Device, selectedDisk) THEN m = m + 1 gridPart[m, 0].Text = Global.PartInfo[n - 1].Device - arrTemp = Split(Functions.AutoUnits(Global.PartInfo[n - 1].Blocks * 1024), ";", "", TRUE) - gridPart[m, 1].Text = arrTemp[0] - gridPart[m, 2].Text = arrTemp[1] + gridPart[m, 1].Text = Functions.AutoUnits(Global.PartInfo[n - 1].Bytes) + gridPart[m, 2].Text = Functions.AutoUnits(Global.PartInfo[n - 1].FreeBytes) gridPart[m, 3].Text = IIf(Global.PartInfo[n - 1].Bootable, "B", "") - gridPart[m, 4].Text = Functions.getPartType(Global.PartInfo[n - 1].ID) & " - " & Global.PartInfo[n - 1].FileSystem - IF InStr(gridPart[m, 4].Text, "Linux swap") > 0 THEN + IF Functions.getPartType(Global.PartInfo[n - 1].ID) = "Extended" THEN + gridPart[m, 4].Text = "----Extended----" + ELSE IF Functions.getPartType(Global.PartInfo[n - 1].ID) = "Linux swap" THEN + gridPart[m, 4].Text = "Linux - Swap" + ELSE + gridPart[m, 4].Text = Functions.getPartType(Global.PartInfo[n - 1].ID) & " - " & Global.PartInfo[n - 1].FileSystem + ENDIF + + IF InStr(gridPart[m, 4].Text, "Linux swap") THEN gridPart[m, 5].Text = "swap" gridPart[m, 6].Text = "swap" - ELSE IF InStr(gridPart[m, 4].Text, "Linux") > 0 THEN + ELSE IF InStr(gridPart[m, 4].Text, "Linux") THEN gridPart[m, 6].Text = "reiserfs" Global.PartInfo[n - 1].FormatWithFS = "reiserfs" ELSE |