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:
Visual FoxPro,
FoxPro