BFS Image Creator   |   About   |   Screenshots


#!/boot/home/config/bin/yab

REM Genealogie - BFS Image Creator
REM by Christian Albrecht
REM Requires yab v 1.0
REM 2006

Localize

screenWidth = peek("desktopwidth")
screenHeight = peek("desktopheight")

CheckBFSSize=0
bfssize$=""
bfsname$=""
bfsimage$=""

REM ######Configdatei prüfen######

configfolder$="BFSIC"
configfolder_check$=system$("find /boot/home/config/settings/BFSIC\n")
configfolder_ready$=system$("basename "+configfolder_check$)

if(configfolder$=configfolder_ready$)then

	configdatei$="config.cfg\n"
	configdatei_check$=system$("find /boot/home/config/settings/BFSIC/config.cfg\n")
	configdatei_ready$=system$("basename "+configdatei_check$)

	if(configdatei$=configdatei_ready$)then
		configload()
	else
		anlegen = open("/boot/home/config/settings/BFSIC/config.cfg", "w")
			print #anlegen 1
			print #anlegen 200
		close(anlegen)
		configload()
	endif
else
	Output$=system$("mkdir /boot/home/config/settings/BFSIC")
	configdatei$="config.cfg\n"
	configdatei_check$=system$("find /boot/home/config/settings/BFSIC/config.cfg\n")
	configdatei_ready$=system$("basename "+configdatei_check$)

	if(configdatei$=configdatei_ready$)then
		configload()
	else
		anlegen = open("/boot/home/config/settings/BFSIC/config.cfg", "w")
			print #anlegen 1
			print #anlegen 200
	close(anlegen)
	configload()
	endif
endif

REM ######Freien Speicher ermitteln######

DiskFree()

MNTDisk$="mnt\n"
MNTFind$=system$("find /mnt")
MNTReady$=system$("basename "+MNTFind$)
if(MNTDisk$=MNTReady$)then
	info$="mount"
	else
	info$="unmount"
endif

REM ######Hauptfenster######

window open ((screenWidth/2)-175), ((screenHeight/2)-175) to ((screenWidth/2)+175), ((screenHeight/2)+175), "View_BFSCreator", "BeSly Software - Create BFS Image"
	window set  "View_BFSCreator", "MinimumTo", 350,350
	window set  "View_BFSCreator", "MaximumTo", 350,350
	
inhalt()	

dim part$(1)

inloop = true
while(inloop)

	msg$ = message$
	
	if (split(msg$, part$(), ":|") > 2) then
		PartOne$=part$(1)
		PartTwo$ = part$(2)
		PartThree$ = part$(3)
	fi
	
	if (split(msg$, part$(), ":|") > 3) then
		PartFour$ = part$(4)
	fi

	if (msg$ <> "") //print msg$
	switch msg$
	
	
	
	case translate$("View_BFSCreator:_QuitRequested")+"|"
		window close "BFSCreator"
	break
	
	case translate$("View_ISO:Main:Quit")+"|"
		window close "BFSCreator"
	break
	
	
	case "ISOsize:"+PartTwo$+"|"
		if(val(PartTwo$)>MaxSize)then
			TEXTCONTROL CLEAR "ImageSize"
			TEXTCONTROL SET "ImageSize", str$(MaxSize-security)
			SLIDER SET "ISOsize", MaxSize-security
		else
			if(val(PartTwo$)>MaxSize-security)then
				SLIDER COLOR "ISOsize", "barcolor", 233,99,71
				TEXTCONTROL CLEAR "ImageSize"
				TEXTCONTROL SET "ImageSize", PartTwo$
			elseif(val(PartTwo$)<MaxSize-security)
				SLIDER COLOR "ISOsize", "barcolor", 102,205,170
				TEXTCONTROL CLEAR "ImageSize"
				TEXTCONTROL set "ImageSize", PartTwo$
			endif
		endif
	break
	
	case "ImageSize:"+PartTwo$+"|"
	
		Value$ = TEXTCONTROL GET$ "ImageSize"
		SLIDER SET "ISOsize", val(Value$)
	
	break

	 case "create|"
	 	menu set translate$("Image"), translate$("Image Mount"), "Disable", "View_ISO"
		menu set translate$("Image"), translate$("Image Unmount"), "Disable", "View_ISO"
	 	view 20,320 to 320,330, "DrawView", "View_ISO"
		draw set "BgColor", 255,255,255, "DrawView"
		draw set "HighColor", 108,166,205,"DrawView"
		draw set 0, "HighSolidFill"
		draw text 98, 10, translate$("working in progress"), "DrawView" 
        bfssize$=textcontrol get$ "ImageSize"
        bfsname$=textcontrol get$ "ImageName"
        if(val(bfssize$)>(MaxSize-security))then
        	securityinfo()
        else
       		bfsimage$ = FILEPANEL "Save-File", "Save", "/boot/home", bfsname$+".image"
			imageerstellen(bfssize$)
		endif
	break 

	case "ready|"
		CheckBFSSize=0
		Output$=system$("IconTool "+bfsimage$+" Build STD_ICON 1 -1 SVG /boot/beos/etc/icons/svg/harddrive.svg")
		view remove "View_ISO"
		DiskFree()
		inhalt()
		MNTDisk$="mnt\n"
		MNTFind$=system$("find /mnt")
		MNTReady$=system$("basename "+MNTFind$)
		if(MNTDisk$=MNTReady$)then
			info$="mount"
		else
			info$="unmount"
		endif
		if(info$="mount")then
			view remove "View_Button"
			view 0,260 to 350,300, "View_Button", "View_ISO"
			button 120,10 TO 230,30, "ImageUnmount", translate$("Image Unmount"), "View_Button"
			tooltip "ImageUnmount", translate$("You have allready mount an Imagefile, please unmount it befor mounting")
			window close "View_Ready"
		else
			view remove "View_Button"
			view 0,260 to 350,300, "View_Button", "View_ISO"
			button 120,10 TO 230,30, "ImageMount", translate$("Image Mount"), "View_Button"
			window close "View_Ready"
		endif
	break	
	
	case "ImageMount|"
		Output$=system$("mkdir /mnt")
		Outpur$=system$("mount -t bfs "+bfsimage$+" /mnt")
		view remove "View_Button"
		view 0,260 to 350,300, "View_Button", "View_ISO"
		button 120,10 TO 230,30, "ImageUnmount", translate$("Image Unmount"), "View_Button"
		info$="mount"
	break
	
	case "ImageUnmount|"
		Output$=system$("unmount /mnt")
		Output$=system$("rm -r /mnt")
		view remove "View_Button"
		view 0,260 to 350,300, "View_Button", "View_ISO"
		button 120,10 TO 230,30, "ImageMount", translate$("Image Mount"), "View_Button"
		info$="unmount"
	break
	
	case translate$("View_ISO:Image:Image Mount")+"|"
		LoadImage$=filepanel "Load-File-and-Directory", translate$("Load Imagefile"), "/boot/home/"
		Output$=system$("mkdir /mnt")
		Outpur$=system$("mount -t bfs "+LoadImage$+" /mnt")
		menu set translate$("Image"), translate$("Image Mount"), "Disable", "View_ISO"
		menu set translate$("Image"), translate$("Image Unmount"), "Enable", "View_ISO"
		info$="mount"
		view remove "View_ISO"
		inhalt()
	break
	
	case translate$("View_ISO:Image:Image Unmount")+"|"
		Output$=system$("unmount /mnt")
		Output$=system$("rm -r /mnt")
		menu set translate$("Image"), translate$("Image Mount"), "Enable", "View_ISO"
		menu set translate$("Image"), translate$("Image Unmount"), "Disable", "View_ISO"
		info$="unmount"
		view remove "View_ISO"
		inhalt()
	break
	
	case translate$("View_ISO:Main:New")+"|"
		CheckBFSSize=0
		bfssize$=""
		bfsname$=""
		bfsimage$=""
		view remove "View_ISO"
		DiskFree()
		inhalt()
	break
	
	case translate$("View_ISO:Main:About")+"|"
		about()
	break
	
	case translate$("View_ISO:Main:Settings")+"|"
		settings()
	break
	
	case "close|"
		window close "View_About"
	break
	
	case "inform:OFF|"
		inform=0
	break
	
	case "inform:ON|"
		inform=1
	break
	
	case "fastlaunch:OFF|"
		Output$=system$("rm /boot/home/config/FastLaunch/BFSImageCreator")
	break
	
	case "fastlaunch:ON|"
	Output$=system$("ln -s /boot/apps/Tools/BeSly_BFSImageCreator/BFSImageCreator /boot/home/config/FastLaunch
")
	break
	
	case "save_settings|"
		security$=textcontrol get$ "securityspace"
		if(val(security$)<100)then
			textcontrol set "securityspace", "100"
		else
			security=val(security$)
			anlegen = open("/boot/home/config/settings/BFSIC/config.cfg", "w")
				print #anlegen inform
				print #anlegen security
			close(anlegen)
			configload()
			window close "View_Settings"
		endif
	break
	
	case "cancel_settings|"
		window close "View_Settings"
	break
	
	case "cancel_securityinfo|"
		window close "View_Ready"
	break
	
	case "yes_securityinfo|"
		window close "View_Ready"
		bfsimage$ = FILEPANEL "Save-File", "Save", "/boot/home", bfsname$+".image"
		imageerstellen()
	break
		
default:

end switch
	if(window count<1) inloop = false
	sleep 0.1	
wend

REM ######Inhalt des Hauptfensters######

sub inhalt()
		view 0,0 to 350, 350, "View_ISO", "View_BFSCreator" 
		
		null()
		
		menu "Main", "New", "", "View_ISO"
		menu "Main", "About", "", "View_ISO"
		menu "Main", "Settings", "", "View_ISO"
		menu "Main", "Quit", "", "View_ISO"
		menu "Image", "Image Mount", "", "View_ISO"
		menu "Image", "Image Unmount", "", "View_ISO"
		
		if(info$="mount")then
			menu set "Image", "Image Mount", "Disable", "View_ISO"
			menu set "Image", "Image Unmount", "Enable", "View_ISO"
		elseif(info$="unmount")then
			menu set "Image", "Image Mount", "Enable", "View_ISO"
			menu set "Image", "Image Unmount", "Disable", "View_ISO"
		endif
		
		UsedSpace=val(HarddriveSize$)*1024-val(FreeSpace$)*1024
		
		draw set "HighColor", 102,205,170,"View_ISO"
		draw set 0, "HighSolidFill"
		draw rect 10,30 to val(FS$(1)),70, "View_ISO"
		draw set "HighColor", 233,99,71,"View_ISO"
		draw set 0, "HighSolidFill"
		draw rect val(FS$(1)) ,30 to 340,70, "View_ISO"		
		
		SLIDER 10,80 TO 340,90, "ISOsize", translate$("Image size"), 0, MaxHD, "View_ISO"
		SLIDER LABEL "ISOsize", "0", str$(MaxHD)
		SLIDER COLOR "ISOsize", "fillcolor", 240,255,240
		SLIDER COLOR "ISOsize", "barcolor", 102,205,170
		
		draw set "HighColor", 0,0,0,"View_ISO"
		
		draw text 10, 180, translate$("Size of the Imagefile: "), "View_ISO"
		TEXTCONTROL 160,165 TO 260,185, "ImageSize", bfssize$, "", "View_ISO"
		draw text 270, 180, "MB", "View_ISO"
		draw text 10, 210, translate$("Name of the Imagefile: "), "View_ISO"
		TEXTCONTROL 160,195 TO 260,215, "ImageName", bfsname$, "", "View_ISO"
		draw text 270, 210, ".Image", "View_ISO"
		
		view 0,260 to 350,300, "View_Button", "View_ISO"
		BUTTON 120,10 TO 230,30, "create", translate$("create"), "View_Button"

end sub

REM ######Freien Festplattenspeicher ermitteln######

sub DiskFree()
	DiskFree$=System$("df /boot")
	n=0
	m=0
	dim DiskFreeSplit$(1)
	n=split(DiskFree$, DiskFreeSplit$(),"\n")
	for m= 1 to n+1
		DiskFree$=DiskFreeSplit$(9)
		DiskFreeCutLeft$=left$(DiskFree$, len(DiskFree$)-14)
		HarddriveSize$=right$(DiskFreeCutLeft$, len(DiskFreeCutLeft$)-20)
		MaxHD=val(HarddriveSize$)*1000
		break
	next m
	DiskFree$=System$("df /boot")
	n=0
	m=0
	dim SpaceFreeSplit$(1)
	n=split(DiskFree$, SpaceFreeSplit$(),"\n")
	for m= 1 to n+1
		DiskFree$=SpaceFreeSplit$(10)
		SpaceFreeCutLeft$=left$(DiskFree$, len(DiskFree$)-14)
		FreeSpace$=right$(SpaceFreeCutLeft$, len(SpaceFreeCutLeft$)-20)
		MaxSize= val(FreeSpace$)*1024
		break
	next m
	
	rechner()
end sub

REM ######Medien Groesze errechnen######

sub rechner()
	ProzentReal=(MaxSize*100)/MaxHD
	FreeSpace=(340*ProzentReal)/100
	n=0
	dim FS$(1)
		n=split(str$(FreeSpace), FS$(), ".")
end sub

REM ######Imageadatei erstellen######
sub imageerstellen(bfssize$)
		o=0
		BalkenPosition=0
		Output$=system$("/boot/beos/bin/dd if=/dev/zero of="+bfsimage$+" bs=1024k count="+bfssize$+"&")
 		for o = 1 to 500
 			if(val(CheckSize$)>1000)then
				BalkenPosition=BPB+10
			endif
 			view remove "DrawView"
 			view 20,320 to 320,330, "DrawView", "View_ISO"
			draw set "BgColor", 255,255,255, "DrawView"
 			draw set "HighColor", 108,166,205,"DrawView"
			draw set 0, "HighSolidFill"
			draw text 98, 10, translate$("working in progress"), "DrawView"
			draw rect 0,0 to BalkenPosition,20, "DrawView"
			statusbalken()
			//print bfssize$
			//print CS
			wait 1
			if(CS=val(bfssize$))then
				draw set "BgColor", 108,166,205, "DrawView"
				Output$=system$("mkbfs 2048 "+bfsimage$+"; sync")
				window open ((screenWidth/2)-130), ((screenHeight/2)-100) to ((screenWidth/2)+130), ((screenHeight/2)+100), "View_Ready", "Ready"
					window set "View_Ready", "MinimumTo", 260,200
					window set "View_Ready", "MaximumTo", 260,200
					window set "View_Ready", "look", "modal"
				draw text 10, 20, translate$("Image created"), "View_Ready"
				draw text 10, 60, translate$("Name: ")+bfsname$+".image", "View_Ready"
				draw text 10, 80, translate$("Size: ")+bfssize$+" MB", "View_Ready"
				draw text 10, 100, translate$("Path: ")+bfsimage$, "View_Ready"
				draw text 10, 120, translate$("Filesystem: BFS"), "View_Ready"
				BUTTON 90,160 TO 170,180, "ready", translate$("ok"), "View_Ready"
		    	break
		    endif
		    if(o=500)then
		    	o=0
		    endif
		next o
		if(inform=1)then
			Output$=system$("inform --title 'BFS Image Creator' 'BFS Image created'")
		endif
end sub

REM ######Fortschrittsbalken######

sub statusbalken()
	CheckSize$=system$("ls -sh "+bfsimage$)
	CS=val(CheckSize$)
	if(val(CheckSize$)>1000)then
		if(val(CheckSize$)>1.0)then
			CheckBFSSize=1
			BalkenPosition=BPB
		endif
	endif
	
	if(CheckBFSSize=1)then
		CheckSize$=system$("ls -sh "+bfsimage$)
		CS=val(CheckSize$)
		CS=CS*1000
		//print "ready "+str$(CS)
		ProzentImageSize=(CS*100)/val(bfssize$)
		PIS$=str$(ProzentImageSize,"%9.0f")
		PIS=val(PIS$)
		BPB=BalkenPosition
		//print "BPB "+str$(BPB)
		BalkenPosition=(300*PIS)/100
	else
		CheckSize$=str$(CS,"%9.0f")
		ProzentImageSize=(CS*100)/val(bfssize$)
		PIS$=str$(ProzentImageSize,"%9.0f")
		PIS=val(PIS$)
		BPB=BalkenPosition
		//print "BPB "+str$(BPB)
		BalkenPosition=(300*PIS)/100
		if(val(CheckSize$)>1000)then
			BalkenPosition=BPB
		endif
	endif

end sub

REM #####Sicherheitsspeicherbereich#####

sub securityinfo()

	window open ((screenWidth/2)-130), ((screenHeight/2)-100) to ((screenWidth/2)+130), ((screenHeight/2)+100), "View_Ready", "Info"
		window set "View_Ready", "MinimumTo", 260,200
		window set "View_Ready", "MaximumTo", 260,200
		window set "View_Ready", "look", "modal"
	
	textedit 20,20 TO 240,130, "Text_Ausgabe", 0, "View_Ready"
		textedit color "Text_Ausgabe", "bgcolor", 216,216,216
		textedit set "Text_Ausgabe", "editable", false
		textedit add "Text_Ausgabe", translate$("The adjusted image size crosses the adjusted safety area.")
		textedit add "Text_Ausgabe", "\n"
		textedit add "Text_Ausgabe", translate$("This can be freeze your system or you can lost data.")
		textedit add "Text_Ausgabe", "\n"
		textedit add "Text_Ausgabe", "  \n"
		textedit add "Text_Ausgabe", translate$("Do you want to provide the image file with this attitude?")
		textedit color "Text_Ausgabe", "color1", "ISOImageCreator"
		TEXTEDIT SET "Text_Ausgabe", "font", "system-plain"
	
	BUTTON 20,160 TO 120,180, "cancel_securityinfo", translate$("cancel"), "View_Ready"
	BUTTON 140,160 TO 240,180, "yes_securityinfo", translate$("accept"), "View_Ready"
	
end sub

REM ######Zuruecksetzen######

sub null()
	CheckBFSSize=0
	info$=""
	o=0
	BalkenPosition=0
	MNTDisk$="mnt\n"
	MNTFind$=system$("find /mnt")
	MNTReady$=system$("basename "+MNTFind$)
	if(MNTDisk$=MNTReady$)then
		info$="mount"
		else
		info$="unmount"
	endif	
end sub

REM ######Ueber######

sub about()
	window open ((screenWidth/2)-130), ((screenHeight/2)-100) to ((screenWidth/2)+130), ((screenHeight/2)+100), "View_About", "About"
		window set "View_About", "MinimumTo", 260,200
		window set "View_About", "MaximumTo", 260,200
		window set "View_About", "look", "modal"
	
	draw text 15, 25, "BFS Image Creator", "View_About"
	draw text 15, 60, "Version:      ", "View_About"
	draw text 130, 60, "1.3 / 06.10.2006", "View_About"
	draw text 15, 80, translate$("Developer:      "), "View_About"
	draw text 130,80, "Christian Albrecht", "View_About"
	draw text 15, 100, translate$("Nickname:      "), "View_About"
	draw text 130, 100, "Lelldorin", "View_About"
	draw text 15, 120, translate$("Homepage:      "), "View_About"
	texturl 130,112, "Homepage", "http://www.besly.de", "http://www.besly.de", "View_About"
	BUTTON 90,160 TO 170,180, "close", translate$("close"), "View_About"
end sub

REM ######Einstellungen######

sub settings()
	window open ((screenWidth/2)-150), ((screenHeight/2)-100) to ((screenWidth/2)+150), ((screenHeight/2)+100), "View_Settings", "Settings"
		window set "View_Settings", "MinimumTo", 260,200
		window set "View_Settings", "MaximumTo", 260,200
		window set "View_Settings", "look", "modal"

		draw text 10, 20, "Settings", "View_Settings"
		CHECKBOX 10,40, "inform", translate$("Use Infopopper"), inform, "View_Settings"
		draw text 10, 100, translate$("Size of security free space: "), "View_Settings"
			TEXTCONTROL 180,85 TO 230,100, "securityspace", "" , str$(security), "View_Settings"
			draw text 230, 100, " MB", "View_Settings"
		CHECKBOX 10,60, "fastlaunch", translate$("Link into FastLaunch"), fastlaunch, "View_Settings"
			
		BUTTON 20,150 TO 120,170, "cancel_settings", translate$("cancel"), "View_Settings"
		BUTTON 140,150 TO 240,170, "save_settings", translate$("save"), "View_Settings"
end sub

sub configload()

REM ######Configdatei auslesen######

configload$="/boot/home/config/settings/BFSIC/config.cfg"
auslesen=open(configload$, "r")
	x=0
	while (not EOF(auslesen))
   			x=x+1
	 	dim config$(x)
   		 	line input #auslesen b$
		config$(x)=b$
	wend
close(auslesen) 
inform=val(config$(1))
security=val(config$(2))
end sub