VFP allow us to edit project version info from build dialog.

We also can edit it programmatically as below.

Both ways is working fine, except VFP IDE is required.

I have written a simple class to enable Project and Version Info edition programmatically without need of VFP IDE. This class would open pjx file, read/write content to DevInfo column.

USE myProj.pjx

loDevInfo = NEWOBJECT("DevInfo", "DevInfo.prg")
loDevInfo.VersionMajor = TRANSFORM(THIS.Major)
loDevInfo.VersionMinor = TRANSFORM(THIS.Minor)
loDevInfo.VersionRevision = TRANSFORM(THIS.Revision)

LOCATE FOR type = "H"
REPLACE DevInfo WITH loDevInfo.GetDevInfo()

** Author	0x00-0x2D
** Company	0x2E-0x5B
** Address	0x5C-0x89
** City		0x8A-0x9E
** State		0x9F-0xA4
** Postcode	0xA5-0xAF
** Country	0xB0-0xDD
** Comment	0xDE-0x1DC
** Company	0x1DD-0x2DB
** Descr		0x2DC-0x3DA
** (C)		0x3DB-0x4D9
** Trade		0x4DA-0x5D8
** Product	0x5d9-0x6D7
** Major		0x6D8-0X6DC
** Minor		0x6DD-0x6E1
** Revision	0x6E2-0x6E6
** Language	0x6E7-0x702

#DEFINE	AUTHOR_LENGTH				0X2D - 0X00 + 1
#DEFINE	COMPANY_LENGTH				0X5B - 0X2E + 1
#DEFINE	ADDRESS_LENGTH				0X89 - 0X5C + 1
#DEFINE	CITY_LENGTH					0X9E - 0X8A + 1
#DEFINE	STATE_LENGTH				0XA4 - 0X9F + 1
#DEFINE	POSTCODE_LENGTH			0XAF - 0XA5 + 1
#DEFINE	COUNTRY_LENGTH				0XDD - 0XB0 + 1
#DEFINE	COMMENTS_LENGTH			0X1DC - 0XDE + 1
#DEFINE	COMPANYNAME_LENGTH		0X2DB - 0X1DE + 1
#DEFINE	FILEDESCRIPTION_LENGTH	0X3DA - 0X2DD + 1
#DEFINE	COPYRIGHT_LENGTH			0X4D9 - 0X3DB + 1
#DEFINE	TRADEMARKS_LENGTH			0X5D8 - 0X4DA + 1
#DEFINE	PRODUCTNAME_LENGTH		0X6D7 - 0X5DA + 1
#DEFINE	VERSIONMAJOR_LENGTH		0X6DC - 0X6D8 + 1
#DEFINE	VERSIONMINOR_LENGTH		0X6E1 - 0X6DD + 1
#DEFINE	VERSIONREVISION_LENGTH	0X6E6 - 0X6E2 + 1
#DEFINE	LANGUAGEID_LENGTH			0X702 - 0X6E7 + 1

#DEFINE	AUTHOR_POSITION	 			1
#DEFINE	COMPANY_POSITION	 			0X2E + 1
#DEFINE	ADDRESS_POSITION	 			0X5C + 1
#DEFINE	CITY_POSITION	 				0X8A + 1
#DEFINE	STATE_POSITION	 				0X9F + 1
#DEFINE	POSTCODE_POSITION	 			0XA5 + 1
#DEFINE	COUNTRY_POSITION	 			0XB0 + 1
#DEFINE	COMMENTS_POSITION	 			0XDE + 1
#DEFINE	COMPANYNAME_POSITION	 		0X1DE + 1
#DEFINE	FILEDESCRIPTION_POSITION	0X2DD + 1
#DEFINE	COPYRIGHT_POSITION	 		0X3DB + 1
#DEFINE	TRADEMARKS_POSITION	 		0X4DA + 1
#DEFINE	PRODUCTNAME_POSITION	 		0X5DA + 1
#DEFINE	VERSIONMAJOR_POSITION	 	0X6D8 + 1
#DEFINE	VERSIONMINOR_POSITION	 	0X6DD + 1
#DEFINE	VERSIONREVISION_POSITION	0X6E2 + 1
#DEFINE	LANGUAGEID_POSITION	 		0X6E7 + 1

DEFINE CLASS DevInfo AS Line

	#IF .F.
		LOCAL THIS AS DevInfo OF DevInfo.prg
	#ENDIF

	Author = ""
	Company = ""
	Address = ""
	City = ""
	State = ""
	Postcode = ""
	Country = ""
	Comments = ""
	CompanyName = ""
	FileDescription = ""
	Copyright = ""
	Trademarks = ""
	ProductName = ""
	VersionMajor = ""
	VersionMinor = ""
	VersionRevision = ""
	LanguageID = ""

	PROCEDURE Parse(tcDevInfo AS String)
	
		THIS.Author = STRTRAN(SUBSTR(tcDevInfo, AUTHOR_POSITION, AUTHOR_LENGTH), CHR(0), "")
		THIS.Company = STRTRAN(SUBSTR(tcDevInfo, COMPANY_POSITION, COMPANY_LENGTH), CHR(0), "")
		THIS.Address = STRTRAN(SUBSTR(tcDevInfo, ADDRESS_POSITION, ADDRESS_LENGTH), CHR(0), "")
		THIS.City = STRTRAN(SUBSTR(tcDevInfo, CITY_POSITION, CITY_LENGTH), CHR(0), "")
		THIS.State = STRTRAN(SUBSTR(tcDevInfo, STATE_POSITION, STATE_LENGTH), CHR(0), "")
		THIS.Postcode = STRTRAN(SUBSTR(tcDevInfo, POSTCODE_POSITION, POSTCODE_LENGTH), CHR(0), "")
		THIS.Country = STRTRAN(SUBSTR(tcDevInfo, COUNTRY_POSITION, COUNTRY_LENGTH), CHR(0), "")
		THIS.Comments = STRTRAN(SUBSTR(tcDevInfo, COMMENTS_POSITION, COMMENTS_LENGTH), CHR(0), "")
		THIS.CompanyName = STRTRAN(SUBSTR(tcDevInfo, COMPANYNAME_POSITION, COMPANYNAME_LENGTH), CHR(0), "")
		THIS.FileDescription = STRTRAN(SUBSTR(tcDevInfo, FILEDESCRIPTION_POSITION, FILEDESCRIPTION_LENGTH), CHR(0), "")
		THIS.Copyright = STRTRAN(SUBSTR(tcDevInfo, COPYRIGHT_POSITION, COPYRIGHT_LENGTH), CHR(0), "")
		THIS.Trademarks = STRTRAN(SUBSTR(tcDevInfo, TRADEMARKS_POSITION, TRADEMARKS_LENGTH), CHR(0), "")
		THIS.ProductName = STRTRAN(SUBSTR(tcDevInfo, PRODUCTNAME_POSITION, PRODUCTNAME_LENGTH), CHR(0), "")
		THIS.VersionMajor = STRTRAN(SUBSTR(tcDevInfo, VERSIONMAJOR_POSITION, VERSIONMAJOR_LENGTH), CHR(0), "")
		THIS.VersionMinor = STRTRAN(SUBSTR(tcDevInfo, VERSIONMINOR_POSITION, VERSIONMINOR_LENGTH), CHR(0), "")
		THIS.VersionRevision = STRTRAN(SUBSTR(tcDevInfo, VERSIONREVISION_POSITION, VERSIONREVISION_LENGTH), CHR(0), "")
		THIS.LanguageID = STRTRAN(SUBSTR(tcDevInfo, LANGUAGEID_POSITION, LANGUAGEID_LENGTH), CHR(0), "")
		
	ENDPROC
	
	PROCEDURE GetDevInfo() AS String
	
		LOCAL lcDevInfo AS String
		
		lcDevInfo = "" 

		lcDevInfo = lcDevInfo + PADR(THIS.Author, AUTHOR_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Company, COMPANY_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Address, ADDRESS_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.City, CITY_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.State, STATE_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Postcode, POSTCODE_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Country, COUNTRY_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Comments, COMMENTS_LENGTH, CHR(0)) + CHR(0x20)
		lcDevInfo = lcDevInfo + PADR(THIS.CompanyName, COMPANYNAME_LENGTH, CHR(0)) + CHR(0x20)
		lcDevInfo = lcDevInfo + PADR(THIS.FileDescription, FILEDESCRIPTION_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Copyright, COPYRIGHT_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.Trademarks, TRADEMARKS_LENGTH, CHR(0)) + CHR(0x20)
		lcDevInfo = lcDevInfo + PADR(THIS.ProductName, PRODUCTNAME_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.VersionMajor, VERSIONMAJOR_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.VersionMinor, VERSIONMINOR_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.VersionRevision, VERSIONREVISION_LENGTH, CHR(0))
		lcDevInfo = lcDevInfo + PADR(THIS.LanguageID, LANGUAGEID_LENGTH, CHR(0))
	
		RETURN lcDevInfo
		 
	ENDPROC
	
ENDDEFINE
Technorati tags: ,