Wednesday, September 26, 2007 8:12 PM
kkchan
Edit project version info
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