Help - Search - Members - Calendar
Full Version: PE Builder v3.1.10a
The CD Forum > General > Announcements
Pages: 1, 2
Bart Lagerweij
v3.1.10a is available.
http://www.nu2.nu/pebuilder/
or
http://www.download.com/PE-Builder/3000-2084_4-10637473.html

Please read the change log below:
CODE
# PE Builder changes (from v3.1.10 until v3.1.10a)

Bugfix release
  PE Builder would report, File
  "C:\pebuilder3110\BartPE\i386\system32\NTOSKRNL.EXE" not found, on some older
  windows versions.

Changes to pebuilder.exe:
- After building, PE Builder checks if files required for booting BartPE are
  missing. The messages printed about missing files should have been warning
  messages, but they where error messages. Changed them to warning.
- The pre-flight check did not work OK for server 2003 (with no SP) and
  Windows XP with SP1, this has been fixed.


Bart.
carloscape
Did any plugins change, or just the program? Could I install the new version, erase the entire plugin folder, and copy my PE Builder v3.1.10 plugin folder back?
Bart Lagerweij
QUOTE (carloscape @ Feb 17 2006, 03:21 PM) *
Did any plugins change, or just the program?


Just the program, pebuilder.exe has changed.

Regards,
Bart.
batchman61
T H A N K . Y O U !

now building as before on W2KPro SP4 from XP-Pro SP1 and XP-Home OEM SP2
ceroni
QUOTE (bcerhart @ Feb 19 2006, 02:04 PM) *
Will you also update the Firefox web browser plugin to version 1.5.0.1?


Sherpya has already made available a brilliant Firefox 1.5.0.1 plugin (integrating the latest Java, Acrobat, Flash, etc). I've been using it and works perfect.
Bart Lagerweij
QUOTE (bcerhart @ Feb 19 2006, 03:04 PM) *
Awesome program, please continue with the regular updates. Will you also update the Firefox web browser plugin to version 1.5.0.1?


Yep, will update when time...

Regards,
Bart
Plugin Builder
QUOTE (Bart Lagerweij @ Feb 17 2006, 02:54 PM) *
v3.1.10a is available.
http://www.nu2.nu/pebuilder/

Please read the change log below:
CODE
# PE Builder changes (from v3.1.10 until v3.1.10a)

Bugfix release
  PE Builder would report, File
  "C:\pebuilder3110\BartPE\i386\system32\NTOSKRNL.EXE" not found, on some older
  windows versions.

Changes to pebuilder.exe:
- After building, PE Builder checks if files required for booting BartPE are
  missing. The messages printed about missing files should have been warning
  messages, but they where error messages. Changed them to warning.
- The pre-flight check did not work OK for server 2003 (with no SP) and
  Windows XP with SP1, this has been fixed.


Bart.



It takes me hours to move my stuff from one peb3.1.X version
onto another high version. Anyway, I do this to be
sure that the new peb version burn me a better and stable
BartCD that wont write a bit on any HD (except the RAM drive),
etc... but for each new peb version, I got more problems.

HELP

On bootable BartPE CD, created by using peb3.13 or 3.14-beta:

:-)
OK, work almost fine.

==================================

On bootable BartPE CD, created by using peb3.19:

:-)
The USERPROFILES folders are created on RAM drive, "B:\Documents and settings\...".
Hmmmm, maybe ok for some reasons, but a bit annoying its now not in English.
Supporters using English, users using whatever along with Explore and
adventures/rubbish in other languages).

:-(
App for burning do NOT work:
Nero5
Nero6
DeepBurner
ExpressBurner
Small CD Burner

==================================

On bootable BartPE CD, created by using peb3.1.10a:

:-(
Only one app can be open.
If another app is open, Nu2menu wont work.
Programs freezing.
Most programs wont start.
The USERPROFILES folders is not created on the RAM drive B.
The A43 app said that "X:\Documents and settings\..." do
not exist (drive X is the CD).
The right click option is gone.

In other words, you sit and stare.

==================================

A question:

On a PC that Im now working on, I have to include a
disk driver for a "ATA Maxtor" on Asus M.Board. I got the
Asus CD (A7V880). I think that I can find a driver on that
Asus CD. The problem is that my BartPE CD (used peb3.19)
can not see the drive C. So I can't support that PC with
any recover tools. So I think that I can put a
ATA driver on a floppy, BUT the BartPE CD maybe not responding
on F6 key while booting?

---
Benny Pedersen (Plugin Builder),
PS: WinXP Pro SP2
1024 MB RAM. My BartPE CD is using 64MB RAM drive B.

BTW: Maybe the burning problems on BartPE created with peb3.19
is cause of enabled dos16, or another plugin that I
disabled previous in peb314-beta ?
blink.gif
mpsan
I saw a fix for my problem and now can not find it any more.

I just got 3.1.10a and still have the same issue with it not creating the ISO because I get a setupreg.hiv access denied error.

I saw that there was a fix (rev cool.gif to make it upper case, but now can not find it.

Can someone point me to it, or can I patch this in an INF somewhere to make it upper case?

TIA
Bart Lagerweij
QUOTE (Plugin Builder @ Feb 20 2006, 11:37 PM) *
App for burning do NOT work:
Nero5
Nero6
DeepBurner
ExpressBurner
Small CD Burner
Only one app can be open.
If another app is open, Nu2menu wont work.
Programs freezing.
Most programs wont start.
The USERPROFILES folders is not created on the RAM drive B.
The A43 app said that "X:\Documents and settings\..." do
not exist (drive X is the CD).
The right click option is gone.


These problems al sound very strang and I think you should try a "bare" BartPE, thinks like nu2menu and deepburner should work perfect (don't eject the booted CD!)...

QUOTE
A question:

On a PC that Im now working on, I have to include a
disk driver for a "ATA Maxtor" on Asus M.Board. I got the
Asus CD (A7V880). I think that I can find a driver on that
Asus CD. The problem is that my BartPE CD (used peb3.19)
can not see the drive C. So I can't support that PC with
any recover tools. So I think that I can put a
ATA driver on a floppy, BUT the BartPE CD maybe not responding
on F6 key while booting?
Yes, you can use the F6 key to add driver by floppy (a:)



QUOTE (bcerhart @ Feb 19 2006, 03:04 PM) *
Awesome program, please continue with the regular updates. Will you also update the Firefox web browser plugin to version 1.5.0.1?


Just added the v1.5.0.1 version to the firefox page.
http://www.nu2.nu/pebuilder/firefox/

Will remove v1.5 when the new version is OK.

Regards,
Bart.
mpsan
Well, for the first time ever I created a BartPE ISO. I logged in to my ADMIN account. I have admin on my user account but it must be loading something that pebuilder does not like.

I just thought I would follow up on my previous post.
Ed_P
What is the recommended approach for updating from 3.1.3 to 3.1.10a? A straight install of 3.1.10a over 3.1.3 or install 10a into it's own folder and copy the 3.1.3 plugin folder over the 3.1.10a plugin folder? Or....?
SteelTrepid
If you copy over your plugin folder from 3.1.3 on top of 3.1.10a you will overwrite files that have been updated.

If you install 3.1.10a on top of your 3.1.3 you could lose some of your customizations.

I always compare the files and versions. It's tedious and take some time but I then know what all has changed.
krash_silver
I guess I may asking some silly question here...I'm just a newbie here in BARTPE and I'm really confuse afterall the cd I built and seem like cant work at all... Hope guys may sort out this for me..

1. What is SLIPSTREAMMING?
2. what it is doing ?
3. it is necessary to do this while my PC is using the XP SP2? I only run the build without the Slipstreamming.

after went through few of the forum and they kinda emphasize on da Slipstreamming thingie and I;m just wondering what is that and is it important steps.

Besides, any website to browse through to understanding more on the slipStreaming in BARTPE??


Another question here, is BARTPE allow us to do like, Full Image or Partition or thing like how the WinPE is?? because I plan to store a image.ghost in the BARTPE folder/ISO and hope it runs the image when the 1st boot in nother pc. (some sysPrep and hd mounting has been done) and is good that if it loads the image file. Any recommendation?

Anyway, I'm still trying to build a runable BARTPE to be install in another PC. *Cross Finger* Hope it works this time using 3.1.10a
flipit
Slipstreaming is integrating a service pack or hotfixes into an install disc. Since you have a SP2 source, you don't need this functionality. It was for SP1'ers to upgrade to SP2 source. Hope that helps. Sorry, I can't help you with Ghost. unsure.gif
Ed_P
QUOTE (SteelTrepid @ Feb 23 2006, 02:36 AM) *
If you copy over your plugin folder from 3.1.3 on top of 3.1.10a you will overwrite files that have been updated.

If you install 3.1.10a on top of your 3.1.3 you could lose some of your customizations.

I always compare the files and versions. It's tedious and take some time but I then know what all has changed.

Yeah, that's what I thought. Thanks for the confirmation SteelTrepid. This is my 1st upgrade and when I look at the two folders it's scarey the number of differences. There's got to be an easier way, at least for the plugin folder. Need some kind of a cmd script to automate the process. smile.gif
krash_silver
QUOTE (flipit @ Feb 23 2006, 08:57 PM) *
Slipstreaming is integrating a service pack or hotfixes into an install disc. Since you have a SP2 source, you don't need this functionality. It was for SP1'ers to upgrade to SP2 source. Hope that helps. Sorry, I can't help you with Ghost. unsure.gif


Thank for that... btw, I'm still trying out and hope I can really understand what I am doin. haha biggrin.gif ..thank anyway.. tongue.gif

Hi, any idea of this Error Code, NTOSKRNL.exe is not loaded, and Error Code is 4....

I saw most the post up is mention about the Error Code is 14, and it is odd where I got the error code as 4...DO you guys have any idea of this ??
Ed_P
See posting here.
CWorks
@Ed_P

an easy way to update is put any plugins that you change or add in a subfolder under plugins
just remember some plugins need to be run in a certain order to overwrite others

then when a new pebuilder comes out move your subfolder to the new folder and compare the changes to any you have changed
Ed_P
@CWorks

QUOTE
put any plugins that you change or add in a subfolder under plugins


Thanks CWorks.

In that all plugins are in a subfolder under plugins by definitions could you explain that a little further? Are you saying to create a plugin called Eds and then put all my plugins in it? Or under it? How would that work enabling them?

I tried to keep mine separate by making the 1st letter a cap but then I also have original plugins that I have mod'ed but didn't rename. Plus I have a bunch of cmd files I've created and things like FolderSort and SortMenu and personized wallpaper and support utilities like wget and PEReg and etc. The folder kinda got out of control. sad.gif
CWorks
just create a folder under plugins and put any changed or added plugins in it (the folders)
and yes some things may break

pebuilder will still find and show them in plugins list
and sortmenu works on the output folder doesn't it
FolderSort should still sort them i think
don't know if it's recursive or not

any tools you use can be added to the path by just putting them in sys32
or do what i do and create a folder and put any tools in it and then add the folder to the path
in system properties under advanced tab choose "environment variables" and then dble click PATH and add it to the end by adding a semicolon and then the full path like this
C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\syscmd

won't take effect until a reboot
but then you can call them from anywhere
Ed_P
Thanks for the advice CWorks. smile.gif

QUOTE
add the folder to the path in system properties under advanced tab choose "environment variables" and then dble click PATH and add it to the end by adding a semicolon and then the full path like this
C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\syscmd

Wow!! Shades of DOS live. And overall, not a bad idea. smile.gif
paraglider
Note - sortmenu is not a plugin. Its a utility you use before creating the iso file and hence should not be in the plugin directory. Either put it in your main pebuilder directory or create a bin directory off the main pebuilder directory and put it in that.
Ed_P
QUOTE (paraglider @ Feb 25 2006, 07:19 PM) *
Note - sortmenu is not a plugin. Its a utility you use before creating the iso file and hence should not be in the plugin directory. Either put it in your main pebuilder directory or create a bin directory off the main pebuilder directory and put it in that.

I know that. I'm not a noobie ya kno. laugh.gif Though I can see how you would think I am. smile.gif
Ed_P
ohmy.gif ohmy.gif ohmy.gif

Ok, I got all my 3.1.3 stuff moved to the 3.1.10a folder. smile.gif Organized and documented even. smile.gif Ran a pebuilder build ok. smile.gif Built an ISO via pebuilder ok. smile.gif Booted the BartPE ISO in QEMU and got the error: CDBOOT: Couldn't find NTLDR. sad.gif

Looking in the 3.1.10a BartPE folder there is no NTLDR, or ntldr, in either the root or the i386 folders. In the BartPE root I have autorun.inf, bootsect.bin, win51ic, win51ic.sp2. What happened? blink.gif unsure.gif

Windows XP, Home, SP2 system and install folder.
CWorks
got the same message and if i remember right it was just a one time thing and a rebuild fixed it
of course i could have fixed it and forgot about it

oh i just remembered what it was
i had don't uppercase windows selected in options
unselected it and it never happened again

NTLDR is SETUPLDR.BIN on a cd\dvd

i'm not using any pre-processing script with this
just a straight UBCD4Win build with PE Builder v3.1.10a
Ed_P
Thanks CWorks.

I didn't have that option set on initially but I set it on Ok'ed it then unselected it and rebuilt the ISO. Same problem. I also rebuilt the ISO with the option on and got the same problem. No NTLDR.

I'm running 3.1.10a with nu2menu and a bunch of plugins that I have downloaded from here over the past 6 months that worked fine under 3.1.3. I've also disabled the following 5 plugins that defaulted to enabled with 3.1.10a:

a43 - A43 File Management Utility
bst5 - Bart's Stuff Test
mstsc - Remote Desktop Client
peinst - BartPE Installer v2
snapshot - Drive SnapShot

Maybe I need to re-enable one of the new plugins for PEBuilder to create NTLDR. Or add a post processing step to manually copy it in.

Always something. sad.gif

BTW My upgrade wasn't that bad. All cmd files that I added I named with a ! as the 1st character and all plugins I added I had named with the 1st character a Cap. What I had to find was the plugins that came with 3.1.3 that I added files to or tweaked the inf someway. Those have now been identified also. And I created a log of what I have to migrate for the next time. smile.gif
CWorks
SETUPLDR.BIN is NTLDR
so NTLDR will not be on cd only SETUPLDR.BIN

rather than a log create a batch file to do all the hard work for you biggrin.gif
Ed_P
QUOTE (CWorks @ Mar 4 2006, 12:16 AM) *
SETUPLDR.BIN is NTLDR
so NTLDR will not be on cd only SETUPLDR.BIN

Interesting, the BartPE folders look the same between the 3.1.3 and 3.1.10a versions. But one boots fine in QEMU and one doesn't. setupldr.bin is in the i386 folder on both. Note, it's lower case name. bootsect.bin is in the root and what's issuing the error msg and it appears to be the same in both versions.

What the hell... huh.gif
CWorks
they should always be uppercase
as long as the box is unchecked

the check box was added for post processing to do the upper casing of only the files in the list
if you're not using a post processing script that uppercases you should not check the box and let pebuilder do the uppercasing

oh fogot to mention bootsect.bin is lower case for me but everything under i386 is upper case
Ed_P
QUOTE (CWorks @ Mar 4 2006, 01:05 AM) *
they should always be uppercase
as long as the box is unchecked

the check box was added for post processing to do the upper casing of only the files in the list
if you're not using a post processing script that uppercases you should not check the box and let pebuilder do the uppercasing

None of 3.1.10a's Advanced options are checked.
None of the BartPE root or i386 files are uppercased in either the 3.1.3 or 3.1.10a versions.
The pebuilder log shows that the execution of mkisofs.exe does not contain the -force-uppercase operand.
The pebuilder log for 3.1.3 however does show the -force-uppercase operand being used.
hmmmmm
Does checking the box put the -force-uppercase operand into the execution of mkisofs.exe?

Update

ohmy.gif It just booted!!

The Starburn Verify data option was on and I deselected it. Since I didn't think I used Starburn I didn't care what it was set to before.

At this point NO options are selected.

Glad to get pass this problem, now I can see if everything else works.

Don't understand why the Starburn option was set on or why it caused the error that it did. Would be interested to find out the whys and hows at some point. smile.gif

Thanks for your help CWorks.
CWorks
ah yes another thing i forgot that i unchecked
but didn't think that was actually the problem so i never metioned it

before building the first time with new version i think i went in and checked the no uppercase box but left the rest

booted up and got the error unchecked it and at same time unchecked the other one but thought it was unrelated

and i don't know or care about what the uppercase checkbox does as long as my cd boots it's all good
but the command sent will be in the log if you must know biggrin.gif

I think Starburn Verify data is meant to be used along with using StarBurn to burn the iso
and it verify's that the burned files match the source

I usually forget to disable burning when a new version comes out so i get an error at the end but the iso still get's created
and then i test iso in vmware and if it's good i burn with nero
mbarnes
Hi Ed_P

One thing which is easy to forget when building with V3.1.10 or 3.1.10a is that for uppercasing of files & folders to work you have to select 'create iso', even if you want to do post processing first.
I renamed mkisofs.exe to !mkisofs.exe. (upper casing is no longer done by mkisofs)

regards
Mike Barnes
Ed_P
QUOTE (CWorks @ Mar 4 2006, 02:38 AM) *
ah yes another thing i forgot that i unchecked

You need to start keeping a written Change Log. laugh.gif

QUOTE (CWorks @ Mar 4 2006, 02:38 AM)
but didn't think that was actually the problem so i never metioned it

Understandable. It was a fluke that I stumbled upon it.

QUOTE (CWorks @ Mar 4 2006, 02:38 AM)
and i don't know or care about what the uppercase checkbox does as long as my cd boots it's all good

laugh.gif Me too.

QUOTE (CWorks @ Mar 4 2006, 02:38 AM)
I think Starburn Verify data is meant to be used along with using StarBurn to burn the iso
and it verify's that the burned files match the source

Sounds logical to me. But somehow it's impacting the ability to boot the ISO. It's got to be a bug of some kind.

QUOTE (CWorks @ Mar 4 2006, 02:38 AM)
and then i test iso in vmware and if it's good i burn with nero

blink.gif vmware! Your sig states "use QEMU to test with iso ...". smile.gif

QUOTE (mbarnes @ Mar 4 2006, 03:45 AM)
for uppercasing of files & folders to work you have to select 'create iso', even if you want to do post processing first.

huh.gif So I have to have PEBuilder create an ISO even though I'm going to run paraglider's SortMenu and manually create the ISO? blink.gif

Course as long as the CD boots I don't really care if the files names are uppercase or lowercase or written in a foreign script. smile.gif

QUOTE (mbarnes @ Mar 4 2006, 03:45 AM)
I renamed mkisofs.exe to !mkisofs.exe. (upper casing is no longer done by mkisofs)

Even if the -force-uppercase operand is added to it? huh.gif
CWorks
-force-uppercase will make everything upper case though right?
you can always just unselect build iso then build & then run SortMenu
select build iso & select don't build reg & files and then hit F5 to build iso

or just use filecase.exe (last thing on page)
CODE
filecase.exe /u /h /q "%OutDir%\BOOTSECT.BIN"
filecase.exe /u /h /q "%OutDir%\BOOTFONT.BIN"
filecase.exe /u /h /q "%OutDir%\WIN*"
filecase.exe /u /h /q "%OutDir%\i386\BOOTFIX.BIN"
filecase.exe /u /h /q "%OutDir%\i386\NTDETECT.COM"
filecase.exe /u /h /q "%OutDir%\i386\SETUPLDR.BIN"
filecase.exe /u /h /q "%OutDir%\i386\SPCMDCON.SYS"
filecase.exe /u /h /q "%OutDir%\i386\*.SIF"
filecase.exe /u /h /q "%OutDir%\i386\system32\BIOSINFO.INF"
filecase.exe /u /h /q "%OutDir%\i386\system32\BOOTVID.DLL"
filecase.exe /u /h /q "%OutDir%\i386\system32\KDCOM.DLL"
filecase.exe /u /h /q "%OutDir%\i386\system32\NTKRNLMP.EXE"
filecase.exe /u /h /q "%OutDir%\i386\system32\ntoskrnl.exe"
filecase.exe /u /h /q "%OutDir%\i386\system32\SETUPREG.HIV"
filecase.exe /u /h /q "%OutDir%\i386\system32\*.SIF"
filecase.exe /u /h /q "%OutDir%\i386\system32\HAL*.DLL"
filecase.exe /u /h /q "%OutDir%\i386\system32\*.NLS"
filecase.exe /u /h /q "%OutDir%\i386\system32\*.FON"
filecase.exe /u /h /q /d /s "%OutDir%\i386\system32\drivers"


and i suggest QEMU because i've tried it and know it works fine for testing and 2nd because it's free
if vmware were free i'd recommend that

ok i think we completly poluted this thread
sorry Bart
Ed_P
QUOTE (CWorks @ Mar 5 2006, 01:55 AM) *
ok i think we completly poluted this thread
sorry Bart

Agreed.

Will touch back when/if a cause for the Starburn Verify problem is explained.
Plugin Builder
QUOTE (CWorks @ Feb 24 2006, 06:35 AM) *
@Ed_P

an easy way to update is put any plugins that you change or add in a subfolder under plugins
just remember some plugins need to be run in a certain order to overwrite others

then when a new pebuilder comes out move your subfolder to the new folder and compare the changes to any you have changed




' Maybe you can use this file. (DEMO.VBS)
' It write a HTML file.
' Lightgreen for plugin enabled.
' Yellow for disabled.
' PS. It work better if the INF (and XML)
' files is named as the same name like its folder.
' Safe to use: It wont write anything except the HTML file.
' BTW. If you hide a plugin folder, it wont see it.
' Regards Plugin Builder, (Benny Pedersen). rolleyes.gif

option explicit
'** Adjust the next 2 lines (if only one PEB version: path1=path0)
dim path0: path0= "C:\peb314b\plugin"
dim path1: path1= "C:\pebuilder3110a\plugin"
dim htm: htm= "C:\tmp.htm"

dim str0,e0,bg0,bd0
dim str1,e1,bg1,bd1, a(300,1),arr,str,i,iEnd,e,b,f
dim fso: set fso= createObject("scripting.fileSystemObject")
str0= lcase(GetFolders(path0))
str1= lcase(GetFolders(path1))
str = str0 & str1
arr = split(str,vbLf): iEnd= uBound(arr)-1: sort arr,iEnd
for i=0 to iEnd
e= mid(arr(i),inStrRev(arr(i),"\"))
a(i,0)= path0 & e
a(i,1)= path1 & e
b= -(instr(str0,e& vbLf)>0) & -(instr(str1,e& vbLf)>0)
select case b: case 11 i=i+1: case else a(i,-(b>1))=""
end select
next
set f=fso.openTextFile(htm,2,true)
f.writeLine"<html><head><style>" & vbCrLf & "img{border:0;}"&_
"a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;"_
&"text-decoration:none;}a:hover,a:active{background-color:white;}"
f.writeLine"</style></head>" & vbCrLf & "<body bgColor=white>"
f.writeLine"<table border=1>"
f.writeLine"<tr><td><a target=a href=""file:\"&_
path0 & "\.."">"&vbCrLf& "<img src=""file:\"& path0 &_
"\..\bartpe.bmp"" width=99></a>" &vbCrLf&_
"<a target=a href=""file:\"& path0 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& path0 &_
"\nu2menu\nu2go.bmp""></a></td>" &vbCrLf&_
"<td><a target=b href=""file:\"& path1 & "\.."">" &vbCrLf&_
"<img src=""file:\"& path1 &_
"\..\bartpe.bmp"" width=99></a>" &vbCrLf&_
"<a target=b href=""file:\"& path1 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& path1 &_
"\nu2menu\nu2go.bmp""></a></td></tr>"
for i=0 to iEnd
e0= mid(a(i,0), inStrRev(a(i,0), "\")+1)
e1= mid(a(i,1), inStrRev(a(i,1), "\")+1)
if e0 & e1 <> "" then
bg0= color(a(i,0) & "\" & e0 & ".inf")
bd0= color(a(i,0) & "\" & e0 & ".xml")
bg1= color(a(i,1) & "\" & e1 & ".inf")
bd1= color(a(i,1) & "\" & e1 & ".xml")
f.writeLine"<tr>"
f.writeLine"<td border"& bd0 &" bg"& _
bg0 &"><a target=a href=""file:\"& a(i,0) &_
""">"& e0 &"</a></td>"
f.writeLine"<td border"& bd1 &" bg"& _
bg1 &"><a target=b href=""file:\"& a(i,1) &_
""">"& e1 &"</a></td>"
f.writeLine"</tr>"
end if
next
f.writeLine"</table></body></html>":f.close
createObject("wScript.shell").run htm

function color(byVal file)
if fso.fileExists(file)then
select case right(file,3)
case "inf" color="#"& mid("90ee90.ffff00",(2+cBool(inStr(1,_
fso.openTextFile(file,1).readAll,"Enable=1",1)))^3,6)
case "xml" color="white"
end select
else color="white"
' color="red":if "\"=left(right(file,5),1)then color="white"
end if: color="Color="& color
end function

function GetFolders(P): dim f
for each f in FSO.getFolder(P).subfolders
if f.attributes and 2 then
' hidden
else GetFolders=GetFolders& f &vbLf
end if
next
end function

sub switch(byRef A,byRef B,byRef T):T=A:A=B:B=T:end sub
function Sort(byRef ArrF,byVal iEnd)
dim F2,F1,i,T:T=empty
if iEnd>0 then T=""
do until isEmpty(T):T=empty
for i=1 to iEnd
F1=fso.getFilename(ArrF(i))
F2=fso.getFilename(ArrF(i-1))
if F1<F2 then switch ArrF(i-1),ArrF(i),T
next
loop
end function
Ed_P
Wow!!

Thanks Plugin Builder but I don't have a VB compiler. sad.gif
d4vr0s
@Ed_P
That is a vbscript file, which your system should be able to process.
paste it into a text file with .vbs extension, DEMO.VBS for example wink.gif laugh.gif
Ed_P
I'll be dipped!!! ohmy.gif Thanks d4vr0s. smile.gif

And thank you Plugin Builder. rolleyes.gif This thing is really cool! Wow, a whole new world opens up. biggrin.gif
Plugin Builder
QUOTE (Ed_P @ Mar 6 2006, 06:27 AM) *
I'll be dipped!!! ohmy.gif Thanks d4vr0s. smile.gif

And thank you Plugin Builder. rolleyes.gif This thing is really cool! Wow, a whole new world opens up. biggrin.gif


Lightgreen 0: no differences.
Red 1: (ex. nu2menu.exe) files differ.
Red "other number" (ex. nu2menu.inf) difference at line number.



Thanks. WOW, Cool and Smiley dribbled, usually motivates me to
construct and publish some additional information.

The something like this:
[... "<td onClick='vb script:createObject(""wScript.shell
"").run """"""pfe32"""" /g" & LINENUMBER & " """""& FILE0 & """"""":
createObject ...SNIP... & FILE1 & """""""'>" & diff & "</td>" ... ]

would open two files in the same editor window along with jumping to a line number, but
since both Firefox wont, and the Pfe32.exe editor should be opened before the process along with
some of my settings/preferences, then I found another solution just like this instead:

'*** Replace this line:
select case b: case 11 i=i+1: case else a(i,-(b>1))=""

'*** with this line instead:
select case b: case 11 MyFiles a(i,0),a(i,1): i=i+1: case else a(i,-(b>1))=""

'*** Then append the following 3 functions to the end of DEMO.VBS:

sub MyFiles(byVal path0, byVal path1)
path0= lCase(path0): path1= lCase(path1)
dim htm:htm= "C:\tmp1.htm"
dim str0,str1,arr,iEnd,i,a(2000,1),b,len0,len1,f,diff
str0= lcase(GetFiles(path0,true,""))
str1= lcase(GetFiles(path1,true,""))
arr = split(str0 & str1,vbLf): iEnd= uBound(arr)-1: sort arr,iEnd
for i=0 to iEnd
a(i,0)= replace(arr(i), path1, path0)
a(i,1)= replace(arr(i), path0, path1)
b= -(instr(str0,a(i,0)& vbLf)>0)& -(instr(str1,a(i,1)& vbLf)>0)
select case b:case 11 i=i+1:case else a(i,-(b>1))="":end select
next
len0= len(path0)+2: len1= len(path1)+2
set f= fso.openTextFile(htm,2,true)
f.write"<html><head><style>"& vbCrLf & "img{border:0;}"&_
"a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;"_
&"text-decoration:none;"_
&"line-height:12px;}a:hover,a:active{background-color:red;}"_
& vbCrLf & "</style></head>" & vbCrLf & "<body bgColor=#f5f5f5>"
f.writeLine"<table border=1>" & vbCrLf _
&"<tr><td><a target=a href="""& path0 & """>"&path0 &"</a></td>"_
&"<td><a target=b href="""& path1 &""">"& path1 &"</a></td>"_
&"<td></td></tr>"
for i=0 to iEnd
if a(i,0) & a(i,1) <> "" then
f.writeLine"<tr>"
f.writeLine"<td><a target=a href=""file:\"& a(i,0) &""">"_
& mid(a(i,0),len0) &"</a></td>"
f.writeLine"<td><a target=b href=""file:\"& a(i,1) &""">"_
& mid(a(i,1),len1) &"</a></td>"
diff= Difference(a(i,0), a(i,1))
select case diff
case -1 f.write"<td borderColor=#ff0000 bgColor=#f5f5f5>"
case 0 f.write"<td borderColor=#f5f5f5 bgColor=#90ee90>"
case else f.write"<td borderColor=#f5f5f5 bgColor=#ff0000>"
end select: f.writeLine diff & "</td></tr>"
end if
next
f.writeLine"</table></body></html>":f.close
createObject("wScript.shell").run htm
msgBox path0 & vbLf & path1, 4096, "/ Press ESC Key . . ."
end sub

function GetFiles(P,Recurse,List): dim f
for each f in FSO.getFolder(P).files
List= List & f & vbLf
next
if(Recurse)then
for each f in FSO.getFolder(P).subfolders
GetFiles f,Recurse,List
next
end if
GetFiles= List
end function

function Difference(byVal file0, byVal file1)
if not fso.fileExists(file0) _
or not fso.fileExists(file1) _
then Difference= -1:exit function
Difference= 0: dim f0,f1,r0,r1,lineNumb:lineNumb=true
if inStr(1,".exe.com.zip.bin.iso",_
right(file0,4),1)then lineNumb=false
set f0= fso.openTextFile(file0,1)
set f1= fso.openTextFile(file1,1): on error resume next
do: Difference= Difference +1
if lineNumb then
r0= f0.readLine: r1= f1.readLine
else r0= f0.read(100000000): r1= f1.read(100000000)
end if
if r0 <> r1 then on error goto 0:exit function
loop until err: on error goto 0: Difference= 0
end function
Ed_P
Wow!!

When I initially tried this I didn't think it was working so I of course kept clicking. That was a mistake. biggrin.gif

By automatically checking for differences it slows down the initial display of the plugin folders. Having this capability as an option would be better, imo. Being able to do it selectively from the original display would be better but unfortunately I don't see how you can intereface HTML to VBS.

Clicking on a file that has differences invokes Notepad. Notepad is worthless when looking for a difference on line numbers above 3. biggrin.gif imo Notepad doesn't number the lines. One of the main reasons I switched to PFE32 years ago, trying to resolve javascript errors on large webpages was impossible with notepad. If the revised DEMO could interface with PFE32 or PSPAD it would be more useful (for me smile.gif ).

BTW I have been tinkering with the code. My changes are:
CODE
' Plugin Builder : http://www.911cd.net/forums//index.php?s=&showtopic=16021&view=findpost&p=105827

option explicit
'** Adjust the next 6 lines (if only one PEB version: path1=path0)
dim path0: path0= "e:\pebuilder313\plugin"
dim path1: path1= "e:\pebuilder3110a\plugin"
dim bmp0: bmp0= path0 & "\..\bartpe.bmp"
dim bmp1: bmp1= path1 & "\!custom\Eds.bmp"
dim go0: go0= path0 & "\nu2menu\nu2goOLD.bmp"
dim go1: go1= path1 & "\nu2menu\nu2go.bmp"
dim htm: htm= "PEupgrade.htm"

dim str0,e0,bg0,bd0
dim str1,e1,bg1,bd1, a(300,1),arr,str,i,iEnd,e,b,f
dim fso: set fso= createObject("scripting.fileSystemObject")
' Listing sorts better if lcase used. Separates my mixed case names from defaults.
' str0= lcase(GetFolders(path0))
' str1= lcase(GetFolders(path1))
str0= GetFolders(path0)
str1= GetFolders(path1)
str = str0 & str1
arr = split(str,vbLf): iEnd= uBound(arr)-1: sort arr,iEnd
for i=0 to iEnd
e= mid(arr(i),inStrRev(arr(i),"\"))
a(i,0)= path0 & e
a(i,1)= path1 & e
b= -(instr(str0,e& vbLf)>0) & -(instr(str1,e& vbLf)>0)
' select case b: case 11 i=i+1: case else a(i,-(b>1))=""
' Display file differences.  : http://www.911cd.net/forums//index.php?s=&showtopic=16021&view=findpost&p=106048
select case b: case 11 MyFiles a(i,0),a(i,1): i=i+1: case else a(i,-(b>1))=""
end select
next
set f=fso.openTextFile(htm,2,true)
f.writeLine"<html><head><style>" & vbCrLf & "img{border:0;}"&_
"a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;"_
&"text-decoration:none;}a:hover,a:active{background-color:white;}"
f.writeLine"</style></head>" & vbCrLf & "<body bgColor=white>"
f.writeLine"<table border=1>"
f.writeLine"<tr><td><a target=a href=""file:\"&_
path0 & "\.."">"&vbCrLf& "<img src=""file:\"& bmp0 & """ width=99></a>" &vbCrLf&_
"<a target=a href=""file:\"& path0 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& go0 & """></a></td>" &vbCrLf&_
"<td><a target=b href=""file:\"& path1 & "\.."">" &vbCrLf&_
"<img src=""file:\"& bmp1 & """ width=99></a>" &vbCrLf&_
"<a target=b href=""file:\"& path1 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& go1 & """></a></td></tr>"

f.writeLine"<tr><td borderColor=white>"&_
"<b>Yellow = disabled</b></td><td borderColor=white>"&_
"<b>Green = enabled</b></td></tr>"

for i=0 to iEnd
e0= mid(a(i,0), inStrRev(a(i,0), "\")+1)
e1= mid(a(i,1), inStrRev(a(i,1), "\")+1)
if e0 & e1 <> "" then
bg0= color(a(i,0) & "\" & e0 & ".inf")
bd0= color(a(i,0) & "\" & e0 & ".xml")
bg1= color(a(i,1) & "\" & e1 & ".inf")
bd1= color(a(i,1) & "\" & e1 & ".xml")
f.writeLine"<tr>"
f.writeLine"<td border"& bd0 &" bg"& _
bg0 &"><a target=a href=""file:\"& a(i,0) &_
""">"& e0 &"</a></td>"
f.writeLine"<td border"& bd1 &" bg"& _
bg1 &"><a target=b href=""file:\"& a(i,1) &_
""">"& e1 &"</a></td>"
f.writeLine"</tr>"
end if
next

f.writeLine"<tr><td border"& bd0 &_
"><b>Yellow = disabled</b></td><td border"& bd0 &_
"><b>Green = enabled</b></td></tr>"
f.writeLine"</table></body></html>":f.close
createObject("wScript.shell").run htm

sans the functions.
Plugin Builder
Its now under heavy optimizing, theoretically bugs analyzing (found some few), better sorting, etc...
The show next page / OK button, now got a cancel button to skip all next pages upto the last page,
Done. rolleyes.gif

I will soon take a look at your modification blink.gif , and I will also make the goto linenumber function.
Need more time to make it a secure and bug free monster app... ph34r.gif

QUOTE (Ed_P @ Mar 8 2006, 07:55 PM) *
Wow!!

When I initially tried this I didn't think it was working so I of course kept clicking. That was a mistake. biggrin.gif

By automatically checking for differences it slows down the initial display of the plugin folders. Having this capability as an option would be better, imo. Being able to do it selectively from the original display would be better but unfortunately I don't see how you can intereface HTML to VBS.

Clicking on a file that has differences invokes Notepad. Notepad is worthless when looking for a difference on line numbers above 3. biggrin.gif imo Notepad doesn't number the lines. One of the main reasons I switched to PFE32 years ago, trying to resolve javascript errors on large webpages was impossible with notepad. If the revised DEMO could interface with PFE32 or PSPAD it would be more useful (for me smile.gif ).

SNIP...

createObject("wScript.shell").run htm: wScript.sleep 100
if vbCancel=msgBox(path0 & vbLf & path1, vbOKCancel+4096)then ShowNext=0
SNIP... laugh.gif
Ed_P
QUOTE (Plugin Builder @ Mar 8 2006, 09:40 PM) *
createObject("wScript.shell").run htm: wScript.sleep 100
if vbCancel=msgBox(path0 & vbLf & path1, vbOKCancel+4096)then ShowNext=0
SNIP... laugh.gif

Windows Script Host
:
Error: Variable is undefined: 'ShowNext'
Code: 800A01F4

I think it would be better to drop the drive part of the path for the htm variable. Straight tmp1.htm vs c:\tmp1.htm. This way the htm files stay with the vbs file.
Plugin Builder
QUOTE (Ed_P @ Mar 9 2006, 08:52 AM) *
Windows Script Host
:
Error: Variable is undefined: 'ShowNext'
Code: 800A01F4

I think it would be better to drop the drive part of the path for the htm variable. Straight tmp1.htm vs c:\tmp1.htm. This way the htm files stay with the vbs file.


'1. somewhere in the beginning
dim ShowNext:ShowNext=1

'2. where its called
select case b:case 11 if ShowNext then MyFiles a(i,0),a(i,1)

'3. after the wScript.sleep 100
ShowNext= msgBox(path0 & vbLf & path1, 4097) -2

... havnt apointment, have to run... see you later biggrin.gif
Ed_P
Well those changes got rid of the error and the script does allow for stopping the compare function. Unfortunately the initial display is totally screwed up, double entries, everything matches, etc.

This is what I have at this point:
CODE
' Maybe you can use this file. (DEMO.VBS)
' It write a HTML file.
' Lightgreen for plugin enabled.
' Yellow for disabled.
' PS. It work better if the INF (and XML)
' files is named as the same name like its folder.
' Safe to use: It wont write anything except the HTML file.
' BTW. If you hide a plugin folder, it wont see it.
' Regards Plugin Builder, (Benny Pedersen).
' Plugin Builder : http://www.911cd.net/forums//index.php?s=&showtopic=16021&view=findpost&p=105827

option explicit
'** Adjust the next 6 lines (if only one PEB version: path1=path0)
dim path0: path0= "e:\pebuilder313\plugin"
dim path1: path1= "e:\pebuilder3110a\plugin"
dim bmp0: bmp0= path0 & "\..\bartpe.bmp"
dim bmp1: bmp1= path1 & "\!custom\Eds.bmp"
dim go0: go0= path0 & "\nu2menu\nu2goOLD.bmp"
dim go1: go1= path1 & "\nu2menu\nu2go.bmp"
dim htm: htm= "PEupgrade.htm"

dim ShowNext:ShowNext=1
dim str0,e0,bg0,bd0
dim str1,e1,bg1,bd1, a(300,1),arr,str,i,iEnd,e,b,f
dim fso: set fso= createObject("scripting.fileSystemObject")
' Listing sorts better if lcase used. Separates my mixed case names from defaults.
' str0= lcase(GetFolders(path0))
' str1= lcase(GetFolders(path1))
str0= GetFolders(path0)
str1= GetFolders(path1)
str = str0 & str1
arr = split(str,vbLf): iEnd= uBound(arr)-1: sort arr,iEnd
for i=0 to iEnd
e= mid(arr(i),inStrRev(arr(i),"\"))
a(i,0)= path0 & e
a(i,1)= path1 & e
b= -(instr(str0,e& vbLf)>0) & -(instr(str1,e& vbLf)>0)
' Plugin Builder : http://www.911cd.net/forums//index.php?s=&showtopic=16021&view=findpost&p=106048
' select case b: case 11 i=i+1: case else a(i,-(b>1))=""
' select case b: case 11 MyFiles a(i,0),a(i,1): i=i+1: case else a(i,-(b>1))=""
select case b:case 11 if ShowNext then MyFiles a(i,0),a(i,1)
end select
next
set f=fso.openTextFile(htm,2,true)
f.writeLine"<html><head><style>" & vbCrLf & "img{border:0;}"&_
"a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;"_
&"text-decoration:none;}a:hover,a:active{background-color:white;}"
f.writeLine"</style></head>" & vbCrLf & "<body bgColor=white>"
f.writeLine"<table border=1>"
f.writeLine"<tr><td><a target=a href=""file:\"&_
path0 & "\.."">"&vbCrLf& "<img src=""file:\"& bmp0 & """ width=99></a>" &vbCrLf&_
"<a target=a href=""file:\"& path0 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& go0 & """></a></td>" &vbCrLf&_
"<td><a target=b href=""file:\"& path1 & "\.."">" &vbCrLf&_
"<img src=""file:\"& bmp1 & """ width=99></a>" &vbCrLf&_
"<a target=b href=""file:\"& path1 & "\nu2menu"">" &vbCrLf&_
"<img src=""file:\"& go1 & """></a></td></tr>"

f.writeLine"<tr><td borderColor=white>"&_
"<b>Yellow = disabled</b></td><td borderColor=white>"&_
"<b>Green = enabled</b></td></tr>"

for i=0 to iEnd
e0= mid(a(i,0), inStrRev(a(i,0), "\")+1)
e1= mid(a(i,1), inStrRev(a(i,1), "\")+1)
if e0 & e1 <> "" then
bg0= color(a(i,0) & "\" & e0 & ".inf")
bd0= color(a(i,0) & "\" & e0 & ".xml")
bg1= color(a(i,1) & "\" & e1 & ".inf")
bd1= color(a(i,1) & "\" & e1 & ".xml")
f.writeLine"<tr>"
f.writeLine"<td border"& bd0 &" bg"& _
bg0 &"><a target=a href=""file:\"& a(i,0) &_
""">"& e0 &"</a></td>"
f.writeLine"<td border"& bd1 &" bg"& _
bg1 &"><a target=b href=""file:\"& a(i,1) &_
""">"& e1 &"</a></td>"
f.writeLine"</tr>"
end if
next

f.writeLine"<tr><td border"& bd0 &_
"><b>Yellow = disabled</b></td><td border"& bd0 &_
"><b>Green = enabled</b></td></tr>"
f.writeLine"</table></body></html>":f.close
createObject("wScript.shell").run htm

function color(byVal file)
if fso.fileExists(file)then
select case right(file,3)
case "inf" color="#"& mid("90ee90.ffff00",(2+cBool(inStr(1,_
fso.openTextFile(file,1).readAll,"Enable=1",1)))^3,6)
case "xml" color="white"
end select
else color="white"
' color="red":if "\"=left(right(file,5),1)then color="white"
end if: color="Color="& color
end function

function GetFolders(P): dim f
for each f in FSO.getFolder(P).subfolders
if f.attributes and 2 then
' hidden
else GetFolders=GetFolders& f &vbLf
end if
next
end function

sub switch(byRef A,byRef B,byRef T):T=A:A=B:B=T:end sub
function Sort(byRef ArrF,byVal iEnd)
dim F2,F1,i,T:T=empty
if iEnd>0 then T=""
do until isEmpty(T):T=empty
for i=1 to iEnd
F1=fso.getFilename(ArrF(i))
F2=fso.getFilename(ArrF(i-1))
if F1<F2 then switch ArrF(i-1),ArrF(i),T
next
loop
end function

sub MyFiles(byVal path0, byVal path1)
path0= lCase(path0): path1= lCase(path1)
dim htm:htm= "tmp1.htm"
dim str0,str1,arr,iEnd,i,a(2000,1),b,len0,len1,f,diff
str0= lcase(GetFiles(path0,true,""))
str1= lcase(GetFiles(path1,true,""))
arr = split(str0 & str1,vbLf): iEnd= uBound(arr)-1: sort arr,iEnd
for i=0 to iEnd
a(i,0)= replace(arr(i), path1, path0)
a(i,1)= replace(arr(i), path0, path1)
b= -(instr(str0,a(i,0)& vbLf)>0)& -(instr(str1,a(i,1)& vbLf)>0)
select case b:case 11 i=i+1:case else a(i,-(b>1))="":end select
next
len0= len(path0)+2: len1= len(path1)+2
set f= fso.openTextFile(htm,2,true)
f.write"<html><head><style>"& vbCrLf & "img{border:0;}"&_
"a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;"_
&"text-decoration:none;"_
&"line-height:12px;}a:hover,a:active{background-color:red;}"_
& vbCrLf & "</style></head>" & vbCrLf & "<body bgColor=#f5f5f5>"
f.writeLine"<table border=1>" & vbCrLf _
&"<tr><td><a target=a href="""& path0 & """>"&path0 &"</a></td>"_
&"<td><a target=b href="""& path1 &""">"& path1 &"</a></td>"_
&"<td></td></tr>"
for i=0 to iEnd
if a(i,0) & a(i,1) <> "" then
f.writeLine"<tr>"
f.writeLine"<td><a target=a href=""file:\"& a(i,0) &""">"_
& mid(a(i,0),len0) &"</a></td>"
f.writeLine"<td><a target=b href=""file:\"& a(i,1) &""">"_
& mid(a(i,1),len1) &"</a></td>"
diff= Difference(a(i,0), a(i,1))
select case diff
case -1 f.write"<td borderColor=#ff0000 bgColor=#f5f5f5>"
case 0 f.write"<td borderColor=#f5f5f5 bgColor=#90ee90>"
case else f.write"<td borderColor=#f5f5f5 bgColor=#ff0000>"
end select: f.writeLine diff & "</td></tr>"
end if
next
f.writeLine"</table></body></html>":f.close
' createObject("wScript.shell").run htm
' msgBox path0 & vbLf & path1, 4096, "/ Press ESC Key . . ."
createObject("wScript.shell").run htm: wScript.sleep 100
ShowNext= msgBox(path0 & vbLf & path1, 4097) -2
if vbCancel=msgBox(path0 & vbLf & path1, vbOKCancel+4096)then ShowNext=0
end sub

function GetFiles(P,Recurse,List): dim f
for each f in FSO.getFolder(P).files
List= List & f & vbLf
next
if(Recurse)then
for each f in FSO.getFolder(P).subfolders
GetFiles f,Recurse,List
next
end if
GetFiles= List
end function

function Difference(byVal file0, byVal file1)
if not fso.fileExists(file0) _
or not fso.fileExists(file1) _
then Difference= -1:exit function
Difference= 0: dim f0,f1,r0,r1,lineNumb:lineNumb=true
if inStr(1,".exe.com.zip.bin.iso",_
right(file0,4),1)then lineNumb=false
set f0= fso.openTextFile(file0,1)
set f1= fso.openTextFile(file1,1): on error resume next
do: Difference= Difference +1
if lineNumb then
r0= f0.readLine: r1= f1.readLine
else r0= f0.read(100000000): r1= f1.read(100000000)
end if
if r0 <> r1 then on error goto 0:exit function
loop until err: on error goto 0: Difference= 0
end function


Note, I have PFE32, line number references do work. smile.gif
d4vr0s
You two ought to move this to a topic under the PE Builder - General section. smile.gif
It looks like it's beginning to take on a life of it's own. biggrin.gif
Ed_P
I understand. And agree. Do we need an admin to move the posts or is there some other procedure to follow?
d4vr0s
You could ask SteelTrepid if you wanted to move the posts.
I was referring to further discussions. smile.gif
Plugin Builder
Okay, where to further discussion, maybe you can start it ?

http://home1.stofanet.dk/photo/plugin/Work.7z
rolleyes.gif

Web: http://home1.stofanet.dk/photo
E-mail: ben?y.pede??en@sto??n?t.d?

QUOTE (d4vr0s @ Mar 9 2006, 09:24 PM) *
You could ask SteelTrepid if you wanted to move the posts.
I was referring to further discussions. smile.gif
Plugin Builder
OOPS. my e-mail should end with
@gmail.com blink.gif

If you want to start our discussion other place, then you
could paste the "work.VBS" from the 7zip file?

benny.pedersen smile.gif

QUOTE (Plugin Builder @ Mar 10 2006, 05:31 AM) *
Okay, where to further discussion, maybe you can start it ?

http://home1.stofanet.dk/photo/plugin/Work.7z
rolleyes.gif

Web: http://home1.stofanet.dk/photo
E-mail: ben?y.pede??en@sto??n?t.d?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2013 Invision Power Services, Inc.