I have receive question from some users about I small tool formally known as "Dev-Type". To be as simple as possible, it's a small program capable to generate macros and procedure to manipulate user defined structures.
For example you work on a project and you have chosen to use a structure to store some information about "Employee"
Code: Select all
Structure Employee
PrimaryKeyID.l
LoginName.s
LoginPassword.s
Type.l
Rights.l
FirstName.s
LastName.s
NumberID.l
TownName.s
CivicNumber.s
StreetName.s
ZipPostalCode.s
Email.s
PhoneNumber01.s
PhoneNumbe
Comments.s
EndStructure
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Type V4.0.0
; Project name : the project name here
; File name : File name here
; File Version : 0.0.0
; Programmation : In progress
; Programmed by : Guimauve
; Creation Date : 27-01-2013
; Last update : 27-01-2013
; Coded for : PureBasic 5.10 Beta 5
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Employee
PrimaryKeyID.l
LoginName.s
LoginPassword.s
Type.l
Rights.l
FirstName.s
LastName.s
NumberID.l
TownName.s
CivicNumber.s
StreetName.s
ZipPostalCode.s
Email.s
PhoneNumber01.s
PhoneNumber02.s
Comments.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Macro GetEmployeePrimaryKeyID(EmployeeA)
EmployeeA\PrimaryKeyID
EndMacro
Macro GetEmployeeLoginName(EmployeeA)
EmployeeA\LoginName
EndMacro
Macro GetEmployeeLoginPassword(EmployeeA)
EmployeeA\LoginPassword
EndMacro
Macro GetEmployeeType(EmployeeA)
EmployeeA\Type
EndMacro
Macro GetEmployeeRights(EmployeeA)
EmployeeA\Rights
EndMacro
Macro GetEmployeeFirstName(EmployeeA)
EmployeeA\FirstName
EndMacro
Macro GetEmployeeLastName(EmployeeA)
EmployeeA\LastName
EndMacro
Macro GetEmployeeNumberID(EmployeeA)
EmployeeA\NumberID
EndMacro
Macro GetEmployeeTownName(EmployeeA)
EmployeeA\TownName
EndMacro
Macro GetEmployeeCivicNumber(EmployeeA)
EmployeeA\CivicNumber
EndMacro
Macro GetEmployeeStreetName(EmployeeA)
EmployeeA\StreetName
EndMacro
Macro GetEmployeeZipPostalCode(EmployeeA)
EmployeeA\ZipPostalCode
EndMacro
Macro GetEmployeeEmail(EmployeeA)
EmployeeA\Email
EndMacro
Macro GetEmployeePhoneNumber01(EmployeeA)
EmployeeA\PhoneNumber01
EndMacro
Macro GetEmployeePhoneNumber02(EmployeeA)
EmployeeA\PhoneNumber02
EndMacro
Macro GetEmployeeComments(EmployeeA)
EmployeeA\Comments
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Macro SetEmployeePrimaryKeyID(EmployeeA, P_PrimaryKeyID)
GetEmployeePrimaryKeyID(EmployeeA) = P_PrimaryKeyID
EndMacro
Macro SetEmployeeLoginName(EmployeeA, P_LoginName)
GetEmployeeLoginName(EmployeeA) = P_LoginName
EndMacro
Macro SetEmployeeLoginPassword(EmployeeA, P_LoginPassword)
GetEmployeeLoginPassword(EmployeeA) = P_LoginPassword
EndMacro
Macro SetEmployeeType(EmployeeA, P_Type)
GetEmployeeType(EmployeeA) = P_Type
EndMacro
Macro SetEmployeeRights(EmployeeA, P_Rights)
GetEmployeeRights(EmployeeA) = P_Rights
EndMacro
Macro SetEmployeeFirstName(EmployeeA, P_FirstName)
GetEmployeeFirstName(EmployeeA) = P_FirstName
EndMacro
Macro SetEmployeeLastName(EmployeeA, P_LastName)
GetEmployeeLastName(EmployeeA) = P_LastName
EndMacro
Macro SetEmployeeNumberID(EmployeeA, P_NumberID)
GetEmployeeNumberID(EmployeeA) = P_NumberID
EndMacro
Macro SetEmployeeTownName(EmployeeA, P_TownName)
GetEmployeeTownName(EmployeeA) = P_TownName
EndMacro
Macro SetEmployeeCivicNumber(EmployeeA, P_CivicNumber)
GetEmployeeCivicNumber(EmployeeA) = P_CivicNumber
EndMacro
Macro SetEmployeeStreetName(EmployeeA, P_StreetName)
GetEmployeeStreetName(EmployeeA) = P_StreetName
EndMacro
Macro SetEmployeeZipPostalCode(EmployeeA, P_ZipPostalCode)
GetEmployeeZipPostalCode(EmployeeA) = P_ZipPostalCode
EndMacro
Macro SetEmployeeEmail(EmployeeA, P_Email)
GetEmployeeEmail(EmployeeA) = P_Email
EndMacro
Macro SetEmployeePhoneNumber01(EmployeeA, P_PhoneNumber01)
GetEmployeePhoneNumber01(EmployeeA) = P_PhoneNumber01
EndMacro
Macro SetEmployeePhoneNumber02(EmployeeA, P_PhoneNumber02)
GetEmployeePhoneNumber02(EmployeeA) = P_PhoneNumber02
EndMacro
Macro SetEmployeeComments(EmployeeA, P_Comments)
GetEmployeeComments(EmployeeA) = P_Comments
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Macro ResetEmployee(EmployeeA)
SetEmployeePrimaryKeyID(EmployeeA, 0)
SetEmployeeLoginName(EmployeeA, "")
SetEmployeeLoginPassword(EmployeeA, "")
SetEmployeeType(EmployeeA, 0)
SetEmployeeRights(EmployeeA, 0)
SetEmployeeFirstName(EmployeeA, "")
SetEmployeeLastName(EmployeeA, "")
SetEmployeeNumberID(EmployeeA, 0)
SetEmployeeTownName(EmployeeA, "")
SetEmployeeCivicNumber(EmployeeA, "")
SetEmployeeStreetName(EmployeeA, "")
SetEmployeeZipPostalCode(EmployeeA, "")
SetEmployeeEmail(EmployeeA, "")
SetEmployeePhoneNumber01(EmployeeA, "")
SetEmployeePhoneNumber02(EmployeeA, "")
SetEmployeeComments(EmployeeA, "")
; ClearStructure(EmployeeA, Employee)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Copy operator : A = Source : B = Destination <<<<<
Macro CopyEmployee(EmployeeA, EmployeeB)
SetEmployeePrimaryKeyID(EmployeeB, GetEmployeePrimaryKeyID(EmployeeA))
SetEmployeeLoginName(EmployeeB, GetEmployeeLoginName(EmployeeA))
SetEmployeeLoginPassword(EmployeeB, GetEmployeeLoginPassword(EmployeeA))
SetEmployeeType(EmployeeB, GetEmployeeType(EmployeeA))
SetEmployeeRights(EmployeeB, GetEmployeeRights(EmployeeA))
SetEmployeeFirstName(EmployeeB, GetEmployeeFirstName(EmployeeA))
SetEmployeeLastName(EmployeeB, GetEmployeeLastName(EmployeeA))
SetEmployeeNumberID(EmployeeB, GetEmployeeNumberID(EmployeeA))
SetEmployeeTownName(EmployeeB, GetEmployeeTownName(EmployeeA))
SetEmployeeCivicNumber(EmployeeB, GetEmployeeCivicNumber(EmployeeA))
SetEmployeeStreetName(EmployeeB, GetEmployeeStreetName(EmployeeA))
SetEmployeeZipPostalCode(EmployeeB, GetEmployeeZipPostalCode(EmployeeA))
SetEmployeeEmail(EmployeeB, GetEmployeeEmail(EmployeeA))
SetEmployeePhoneNumber01(EmployeeB, GetEmployeePhoneNumber01(EmployeeA))
SetEmployeePhoneNumber02(EmployeeB, GetEmployeePhoneNumber02(EmployeeA))
SetEmployeeComments(EmployeeB, GetEmployeeComments(EmployeeA))
; CopyMemory(EmployeeA, EmployeeB, SizeOf(Employee))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Compare operator <<<<<
Procedure.b CompareEmployee(*EmployeeA.Employee, *EmployeeB.Employee)
If GetEmployeePrimaryKeyID(*EmployeeA) <> GetEmployeePrimaryKeyID(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeLoginName(*EmployeeA) <> GetEmployeeLoginName(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeLoginPassword(*EmployeeA) <> GetEmployeeLoginPassword(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeType(*EmployeeA) <> GetEmployeeType(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeRights(*EmployeeA) <> GetEmployeeRights(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeFirstName(*EmployeeA) <> GetEmployeeFirstName(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeLastName(*EmployeeA) <> GetEmployeeLastName(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeNumberID(*EmployeeA) <> GetEmployeeNumberID(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeTownName(*EmployeeA) <> GetEmployeeTownName(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeCivicNumber(*EmployeeA) <> GetEmployeeCivicNumber(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeStreetName(*EmployeeA) <> GetEmployeeStreetName(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeZipPostalCode(*EmployeeA) <> GetEmployeeZipPostalCode(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeEmail(*EmployeeA) <> GetEmployeeEmail(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeePhoneNumber01(*EmployeeA) <> GetEmployeePhoneNumber01(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeePhoneNumber02(*EmployeeA) <> GetEmployeePhoneNumber02(*EmployeeB)
ProcedureReturn #False
EndIf
If GetEmployeeComments(*EmployeeA) <> GetEmployeeComments(*EmployeeB)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
; Macro CompareEmployee(EmployeeA, EmployeeB)
; CompareMemory(EmployeeA, EmployeeB, SizeOf(Employee))
; EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Swap operator <<<<<
Macro SwapEmployee(EmployeeA, EmployeeB)
Swap GetEmployeePrimaryKeyID(EmployeeA), GetEmployeePrimaryKeyID(EmployeeB)
Swap GetEmployeeLoginName(EmployeeA), GetEmployeeLoginName(EmployeeB)
Swap GetEmployeeLoginPassword(EmployeeA), GetEmployeeLoginPassword(EmployeeB)
Swap GetEmployeeType(EmployeeA), GetEmployeeType(EmployeeB)
Swap GetEmployeeRights(EmployeeA), GetEmployeeRights(EmployeeB)
Swap GetEmployeeFirstName(EmployeeA), GetEmployeeFirstName(EmployeeB)
Swap GetEmployeeLastName(EmployeeA), GetEmployeeLastName(EmployeeB)
Swap GetEmployeeNumberID(EmployeeA), GetEmployeeNumberID(EmployeeB)
Swap GetEmployeeTownName(EmployeeA), GetEmployeeTownName(EmployeeB)
Swap GetEmployeeCivicNumber(EmployeeA), GetEmployeeCivicNumber(EmployeeB)
Swap GetEmployeeStreetName(EmployeeA), GetEmployeeStreetName(EmployeeB)
Swap GetEmployeeZipPostalCode(EmployeeA), GetEmployeeZipPostalCode(EmployeeB)
Swap GetEmployeeEmail(EmployeeA), GetEmployeeEmail(EmployeeB)
Swap GetEmployeePhoneNumber01(EmployeeA), GetEmployeePhoneNumber01(EmployeeB)
Swap GetEmployeePhoneNumber02(EmployeeA), GetEmployeePhoneNumber02(EmployeeB)
Swap GetEmployeeComments(EmployeeA), GetEmployeeComments(EmployeeB)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read preferences group <<<<<
Procedure ReadPreferenceEmployee(GroupName.s, *EmployeeA.Employee)
PreferenceGroup(GroupName)
SetEmployeePrimaryKeyID(*EmployeeA, ReadPreferenceLong("PrimaryKeyID", GetEmployeePrimaryKeyID(*EmployeeA)))
SetEmployeeLoginName(*EmployeeA, ReadPreferenceString("LoginName", GetEmployeeLoginName(*EmployeeA)))
SetEmployeeLoginPassword(*EmployeeA, ReadPreferenceString("LoginPassword", GetEmployeeLoginPassword(*EmployeeA)))
SetEmployeeType(*EmployeeA, ReadPreferenceLong("Type", GetEmployeeType(*EmployeeA)))
SetEmployeeRights(*EmployeeA, ReadPreferenceLong("Rights", GetEmployeeRights(*EmployeeA)))
SetEmployeeFirstName(*EmployeeA, ReadPreferenceString("FirstName", GetEmployeeFirstName(*EmployeeA)))
SetEmployeeLastName(*EmployeeA, ReadPreferenceString("LastName", GetEmployeeLastName(*EmployeeA)))
SetEmployeeNumberID(*EmployeeA, ReadPreferenceLong("NumberID", GetEmployeeNumberID(*EmployeeA)))
SetEmployeeTownName(*EmployeeA, ReadPreferenceString("TownName", GetEmployeeTownName(*EmployeeA)))
SetEmployeeCivicNumber(*EmployeeA, ReadPreferenceString("CivicNumber", GetEmployeeCivicNumber(*EmployeeA)))
SetEmployeeStreetName(*EmployeeA, ReadPreferenceString("StreetName", GetEmployeeStreetName(*EmployeeA)))
SetEmployeeZipPostalCode(*EmployeeA, ReadPreferenceString("ZipPostalCode", GetEmployeeZipPostalCode(*EmployeeA)))
SetEmployeeEmail(*EmployeeA, ReadPreferenceString("Email", GetEmployeeEmail(*EmployeeA)))
SetEmployeePhoneNumber01(*EmployeeA, ReadPreferenceString("PhoneNumber01", GetEmployeePhoneNumber01(*EmployeeA)))
SetEmployeePhoneNumber02(*EmployeeA, ReadPreferenceString("PhoneNumber02", GetEmployeePhoneNumber02(*EmployeeA)))
SetEmployeeComments(*EmployeeA, ReadPreferenceString("Comments", GetEmployeeComments(*EmployeeA)))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write preferences group <<<<<
Procedure WritePreferenceEmployee(GroupName.s, *EmployeeA.Employee)
PreferenceGroup(GroupName)
WritePreferenceLong("PrimaryKeyID", GetEmployeePrimaryKeyID(*EmployeeA))
WritePreferenceString("LoginName", GetEmployeeLoginName(*EmployeeA))
WritePreferenceString("LoginPassword", GetEmployeeLoginPassword(*EmployeeA))
WritePreferenceLong("Type", GetEmployeeType(*EmployeeA))
WritePreferenceLong("Rights", GetEmployeeRights(*EmployeeA))
WritePreferenceString("FirstName", GetEmployeeFirstName(*EmployeeA))
WritePreferenceString("LastName", GetEmployeeLastName(*EmployeeA))
WritePreferenceLong("NumberID", GetEmployeeNumberID(*EmployeeA))
WritePreferenceString("TownName", GetEmployeeTownName(*EmployeeA))
WritePreferenceString("CivicNumber", GetEmployeeCivicNumber(*EmployeeA))
WritePreferenceString("StreetName", GetEmployeeStreetName(*EmployeeA))
WritePreferenceString("ZipPostalCode", GetEmployeeZipPostalCode(*EmployeeA))
WritePreferenceString("Email", GetEmployeeEmail(*EmployeeA))
WritePreferenceString("PhoneNumber01", GetEmployeePhoneNumber01(*EmployeeA))
WritePreferenceString("PhoneNumber02", GetEmployeePhoneNumber02(*EmployeeA))
WritePreferenceString("Comments", GetEmployeeComments(*EmployeeA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read in Binary file <<<<<
Procedure ReadEmployee(FileID.l, *EmployeeA.Employee)
SetEmployeePrimaryKeyID(*EmployeeA, ReadLong(FileID))
SetEmployeeLoginName(*EmployeeA, ReadString(FileID))
SetEmployeeLoginPassword(*EmployeeA, ReadString(FileID))
SetEmployeeType(*EmployeeA, ReadLong(FileID))
SetEmployeeRights(*EmployeeA, ReadLong(FileID))
SetEmployeeFirstName(*EmployeeA, ReadString(FileID))
SetEmployeeLastName(*EmployeeA, ReadString(FileID))
SetEmployeeNumberID(*EmployeeA, ReadLong(FileID))
SetEmployeeTownName(*EmployeeA, ReadString(FileID))
SetEmployeeCivicNumber(*EmployeeA, ReadString(FileID))
SetEmployeeStreetName(*EmployeeA, ReadString(FileID))
SetEmployeeZipPostalCode(*EmployeeA, ReadString(FileID))
SetEmployeeEmail(*EmployeeA, ReadString(FileID))
SetEmployeePhoneNumber01(*EmployeeA, ReadString(FileID))
SetEmployeePhoneNumber02(*EmployeeA, ReadString(FileID))
SetEmployeeComments(*EmployeeA, ReadString(FileID))
EndProcedure
; Macro ReadEmployee(FileID, EmployeeA)
; ReadData(FileID, EmployeeA, SizeOf(Employee))
; EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write in Binary file <<<<<
Procedure WriteEmployee(FileID.l, *EmployeeA.Employee)
WriteLong(FileID, GetEmployeePrimaryKeyID(*EmployeeA))
WriteStringN(FileID, GetEmployeeLoginName(*EmployeeA))
WriteStringN(FileID, GetEmployeeLoginPassword(*EmployeeA))
WriteLong(FileID, GetEmployeeType(*EmployeeA))
WriteLong(FileID, GetEmployeeRights(*EmployeeA))
WriteStringN(FileID, GetEmployeeFirstName(*EmployeeA))
WriteStringN(FileID, GetEmployeeLastName(*EmployeeA))
WriteLong(FileID, GetEmployeeNumberID(*EmployeeA))
WriteStringN(FileID, GetEmployeeTownName(*EmployeeA))
WriteStringN(FileID, GetEmployeeCivicNumber(*EmployeeA))
WriteStringN(FileID, GetEmployeeStreetName(*EmployeeA))
WriteStringN(FileID, GetEmployeeZipPostalCode(*EmployeeA))
WriteStringN(FileID, GetEmployeeEmail(*EmployeeA))
WriteStringN(FileID, GetEmployeePhoneNumber01(*EmployeeA))
WriteStringN(FileID, GetEmployeePhoneNumber02(*EmployeeA))
WriteStringN(FileID, GetEmployeeComments(*EmployeeA))
EndProcedure
; Macro WriteEmployee(FileID, EmployeeA)
; WriteData(FileID, EmployeeA, SizeOf(Employee))
; EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Set - Node with child nodes <<<<<
Procedure SetEmployeeXMLNode(CurrentNode, *EmployeeA.Employee)
If ParentXMLNode(CurrentNode) = #Null
StructNode = CreateXMLNode(CurrentNode)
SetXMLNodeName(StructNode, "Employee")
Else
StructNode = CurrentNode
EndIf
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "PrimaryKeyID")
SetXMLNodeText(FieldNode, Str(GetEmployeePrimaryKeyID(*EmployeeA)))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "LoginName")
SetXMLNodeText(FieldNode, GetEmployeeLoginName(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "LoginPassword")
SetXMLNodeText(FieldNode, GetEmployeeLoginPassword(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "Type")
SetXMLNodeText(FieldNode, Str(GetEmployeeType(*EmployeeA)))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "Rights")
SetXMLNodeText(FieldNode, Str(GetEmployeeRights(*EmployeeA)))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "FirstName")
SetXMLNodeText(FieldNode, GetEmployeeFirstName(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "LastName")
SetXMLNodeText(FieldNode, GetEmployeeLastName(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "NumberID")
SetXMLNodeText(FieldNode, Str(GetEmployeeNumberID(*EmployeeA)))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "TownName")
SetXMLNodeText(FieldNode, GetEmployeeTownName(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "CivicNumber")
SetXMLNodeText(FieldNode, GetEmployeeCivicNumber(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "StreetName")
SetXMLNodeText(FieldNode, GetEmployeeStreetName(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "ZipPostalCode")
SetXMLNodeText(FieldNode, GetEmployeeZipPostalCode(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "Email")
SetXMLNodeText(FieldNode, GetEmployeeEmail(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "PhoneNumber01")
SetXMLNodeText(FieldNode, GetEmployeePhoneNumber01(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "PhoneNumber02")
SetXMLNodeText(FieldNode, GetEmployeePhoneNumber02(*EmployeeA))
FieldNode = CreateXMLNode(StructNode)
SetXMLNodeName(FieldNode, "Comments")
SetXMLNodeText(FieldNode, GetEmployeeComments(*EmployeeA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Get - Node with child nodes <<<<<
Procedure GetEmployeeXMLNode(CurrentNode, *EmployeeA.Employee)
If ParentXMLNode(CurrentNode) = #Null
StructNode = ChildXMLNode(CurrentNode)
If GetXMLNodeName(StructNode) = "Employee"
Success = #True
EndIf
Else
Success = #True
StructNode = CurrentNode
EndIf
If Success = #True
FieldNode = ChildXMLNode(StructNode)
While FieldNode
Select GetXMLNodeName(FieldNode)
Case "PrimaryKeyID"
SetEmployeePrimaryKeyID(*EmployeeA, Val(GetXMLNodeText(FieldNode)))
Case "LoginName"
SetEmployeeLoginName(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "LoginPassword"
SetEmployeeLoginPassword(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "Type"
SetEmployeeType(*EmployeeA, Val(GetXMLNodeText(FieldNode)))
Case "Rights"
SetEmployeeRights(*EmployeeA, Val(GetXMLNodeText(FieldNode)))
Case "FirstName"
SetEmployeeFirstName(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "LastName"
SetEmployeeLastName(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "NumberID"
SetEmployeeNumberID(*EmployeeA, Val(GetXMLNodeText(FieldNode)))
Case "TownName"
SetEmployeeTownName(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "CivicNumber"
SetEmployeeCivicNumber(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "StreetName"
SetEmployeeStreetName(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "ZipPostalCode"
SetEmployeeZipPostalCode(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "Email"
SetEmployeeEmail(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "PhoneNumber01"
SetEmployeePhoneNumber01(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "PhoneNumber02"
SetEmployeePhoneNumber02(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
Case "Comments"
SetEmployeeComments(*EmployeeA, Trim(GetXMLNodeText(FieldNode)))
EndSelect
FieldNode = NextXMLNode(FieldNode)
Wend
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Set - Node with attributes <<<<<
Procedure SetEmployeeXMLAttribute(CurrentNode, *EmployeeA.Employee, NodeName.s = "Employee")
StructNode = CreateXMLNode(CurrentNode)
SetXMLNodeName(StructNode, NodeName)
SetXMLAttribute(StructNode, "PrimaryKeyID", Str(GetEmployeePrimaryKeyID(*EmployeeA)))
SetXMLAttribute(StructNode, "LoginName", GetEmployeeLoginName(*EmployeeA))
SetXMLAttribute(StructNode, "LoginPassword", GetEmployeeLoginPassword(*EmployeeA))
SetXMLAttribute(StructNode, "Type", Str(GetEmployeeType(*EmployeeA)))
SetXMLAttribute(StructNode, "Rights", Str(GetEmployeeRights(*EmployeeA)))
SetXMLAttribute(StructNode, "FirstName", GetEmployeeFirstName(*EmployeeA))
SetXMLAttribute(StructNode, "LastName", GetEmployeeLastName(*EmployeeA))
SetXMLAttribute(StructNode, "NumberID", Str(GetEmployeeNumberID(*EmployeeA)))
SetXMLAttribute(StructNode, "TownName", GetEmployeeTownName(*EmployeeA))
SetXMLAttribute(StructNode, "CivicNumber", GetEmployeeCivicNumber(*EmployeeA))
SetXMLAttribute(StructNode, "StreetName", GetEmployeeStreetName(*EmployeeA))
SetXMLAttribute(StructNode, "ZipPostalCode", GetEmployeeZipPostalCode(*EmployeeA))
SetXMLAttribute(StructNode, "Email", GetEmployeeEmail(*EmployeeA))
SetXMLAttribute(StructNode, "PhoneNumber01", GetEmployeePhoneNumber01(*EmployeeA))
SetXMLAttribute(StructNode, "PhoneNumber02", GetEmployeePhoneNumber02(*EmployeeA))
SetXMLAttribute(StructNode, "Comments", GetEmployeeComments(*EmployeeA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Get - Node with attributes <<<<<
Procedure GetEmployeeXMLAttribute(CurrentNode, *EmployeeA.Employee, NodeName.s = "Employee", Index = 1)
StructNode = ChildXMLNode(CurrentNode, Index)
If GetXMLNodeName(StructNode) = NodeName
SetEmployeePrimaryKeyID(*EmployeeA, Val(GetXMLAttribute(StructNode, "PrimaryKeyID")))
SetEmployeeLoginName(*EmployeeA, GetXMLAttribute(StructNode, "LoginName"))
SetEmployeeLoginPassword(*EmployeeA, GetXMLAttribute(StructNode, "LoginPassword"))
SetEmployeeType(*EmployeeA, Val(GetXMLAttribute(StructNode, "Type")))
SetEmployeeRights(*EmployeeA, Val(GetXMLAttribute(StructNode, "Rights")))
SetEmployeeFirstName(*EmployeeA, GetXMLAttribute(StructNode, "FirstName"))
SetEmployeeLastName(*EmployeeA, GetXMLAttribute(StructNode, "LastName"))
SetEmployeeNumberID(*EmployeeA, Val(GetXMLAttribute(StructNode, "NumberID")))
SetEmployeeTownName(*EmployeeA, GetXMLAttribute(StructNode, "TownName"))
SetEmployeeCivicNumber(*EmployeeA, GetXMLAttribute(StructNode, "CivicNumber"))
SetEmployeeStreetName(*EmployeeA, GetXMLAttribute(StructNode, "StreetName"))
SetEmployeeZipPostalCode(*EmployeeA, GetXMLAttribute(StructNode, "ZipPostalCode"))
SetEmployeeEmail(*EmployeeA, GetXMLAttribute(StructNode, "Email"))
SetEmployeePhoneNumber01(*EmployeeA, GetXMLAttribute(StructNode, "PhoneNumber01"))
SetEmployeePhoneNumber02(*EmployeeA, GetXMLAttribute(StructNode, "PhoneNumber02"))
SetEmployeeComments(*EmployeeA, GetXMLAttribute(StructNode, "Comments"))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Create Database table <<<<<
Procedure.b CreateDatabaseEmployeeTable(DatabaseID.l, TableName.s)
If DatabaseUpdate(DatabaseID, "CREATE TABLE IF NOT EXISTS " + TableName + " (PrimaryKeyID INTEGER PRIMARY KEY, LoginName STRING, LoginPassword STRING, Type INTEGER, Rights INTEGER, FirstName STRING, LastName STRING, NumberID INTEGER, TownName STRING, CivicNumber STRING, StreetName STRING, ZipPostalCode STRING, Email STRING, PhoneNumber01 STRING, PhoneNumber02 STRING, Comments STRING)")
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Drop Database table <<<<<
Procedure.b DropDatabaseEmployeeTable(DatabaseID.l, TableName.s)
If DatabaseUpdate(DatabaseID, "DROP TABLE IF EXISTS " + TableName)
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Turncate Database table <<<<<
Procedure.b TruncateDatabaseEmployeeTable(DatabaseID.l, TableName.s)
If DatabaseUpdate(DatabaseID, "TRUNCATE TABLE " + TableName)
Protected Success.b = #True
Else
If DatabaseUpdate(DatabaseID, "DELETE FROM " + TableName + " WHERE 1=1")
Success = #True
Else
Success = #False
EndIf
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Select Database table <<<<<
Procedure.b SelectDatabaseEmployeeTable(DatabaseID.l, TableName.s)
If DatabaseQuery(DatabaseID, "SELECT * FROM " + TableName)
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Count Row In Database table <<<<<
Procedure.l CountRowInDatabaseEmployeeTable(DatabaseID.l, TableName.s, Where.s = "")
If DatabaseQuery(DatabaseID, "SELECT COUNT(*) FROM " + TableName + " " + Where)
NextDatabaseRow(DatabaseID)
Protected TableRowCount.l = GetDatabaseLong(DatabaseID, 0)
FinishDatabaseQuery(DatabaseID)
EndIf
ProcedureReturn TableRowCount
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Insert Database Table entry <<<<<
Procedure.b InsertDatabaseEmployeeTableEntry(DatabaseID.l, TableName.s, *EmployeeA.Employee)
Protected DatabaseRequest.s = "INSERT INTO " + TableName + " (LoginName, LoginPassword, Type, Rights, FirstName, LastName, NumberID, TownName, CivicNumber, StreetName, ZipPostalCode, Email, PhoneNumber01, PhoneNumber02, Comments) VALUES ('"
DatabaseRequest + GetEmployeeLoginName(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeLoginPassword(*EmployeeA) + "', '"
DatabaseRequest + Str(GetEmployeeType(*EmployeeA)) + "', '"
DatabaseRequest + Str(GetEmployeeRights(*EmployeeA)) + "', '"
DatabaseRequest + GetEmployeeFirstName(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeLastName(*EmployeeA) + "', '"
DatabaseRequest + Str(GetEmployeeNumberID(*EmployeeA)) + "', '"
DatabaseRequest + GetEmployeeTownName(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeCivicNumber(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeStreetName(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeZipPostalCode(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeEmail(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeePhoneNumber01(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeePhoneNumber02(*EmployeeA) + "', '"
DatabaseRequest + GetEmployeeComments(*EmployeeA) + "')"
If DatabaseUpdate(DatabaseID, DatabaseRequest)
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Update Database Table entry <<<<<
Procedure.b UpdateDatabaseEmployeeTableEntry(DatabaseID.l, TableName.s, *EmployeeA.Employee)
Protected DatabaseRequest.s = "UPDATE " + TableName + " SET "
DatabaseRequest + "LoginName='" + GetEmployeeLoginName(*EmployeeA) + "', "
DatabaseRequest + "LoginPassword='" + GetEmployeeLoginPassword(*EmployeeA) + "', "
DatabaseRequest + "Type='" + Str(GetEmployeeType(*EmployeeA)) + "', "
DatabaseRequest + "Rights='" + Str(GetEmployeeRights(*EmployeeA)) + "', "
DatabaseRequest + "FirstName='" + GetEmployeeFirstName(*EmployeeA) + "', "
DatabaseRequest + "LastName='" + GetEmployeeLastName(*EmployeeA) + "', "
DatabaseRequest + "NumberID='" + Str(GetEmployeeNumberID(*EmployeeA)) + "', "
DatabaseRequest + "TownName='" + GetEmployeeTownName(*EmployeeA) + "', "
DatabaseRequest + "CivicNumber='" + GetEmployeeCivicNumber(*EmployeeA) + "', "
DatabaseRequest + "StreetName='" + GetEmployeeStreetName(*EmployeeA) + "', "
DatabaseRequest + "ZipPostalCode='" + GetEmployeeZipPostalCode(*EmployeeA) + "', "
DatabaseRequest + "Email='" + GetEmployeeEmail(*EmployeeA) + "', "
DatabaseRequest + "PhoneNumber01='" + GetEmployeePhoneNumber01(*EmployeeA) + "', "
DatabaseRequest + "PhoneNumber02='" + GetEmployeePhoneNumber02(*EmployeeA) + "', "
DatabaseRequest + "Comments='" + GetEmployeeComments(*EmployeeA) + "' "
DatabaseRequest + "WHERE PrimaryKeyID='" + Str(GetEmployeePrimaryKeyID(*EmployeeA)) + "'"
If DatabaseUpdate(DatabaseID, DatabaseRequest)
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Delete Database Table entry <<<<<
Procedure.b DeleteDatabaseEmployeeTableEntry(DatabaseID.l, TableName.s, *EmployeeA.Employee)
If DatabaseUpdate(DatabaseID, "DELETE FROM " + TableName + " WHERE PrimaryKeyID='" + Str(GetEmployeePrimaryKeyID(*EmployeeA)) + "'")
Protected Success.b = #True
EndIf
ProcedureReturn Success
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Extract Database Table entry <<<<<
Procedure ExtractDatabaseEmployeeTableEntry(DatabaseID.l, *EmployeeA.Employee)
SetEmployeePrimaryKeyID(*EmployeeA, GetDatabaseLong(DatabaseID, 00))
SetEmployeeLoginName(*EmployeeA, GetDatabaseString(DatabaseID, 01))
SetEmployeeLoginPassword(*EmployeeA, GetDatabaseString(DatabaseID, 02))
SetEmployeeType(*EmployeeA, GetDatabaseLong(DatabaseID, 03))
SetEmployeeRights(*EmployeeA, GetDatabaseLong(DatabaseID, 04))
SetEmployeeFirstName(*EmployeeA, GetDatabaseString(DatabaseID, 05))
SetEmployeeLastName(*EmployeeA, GetDatabaseString(DatabaseID, 06))
SetEmployeeNumberID(*EmployeeA, GetDatabaseLong(DatabaseID, 07))
SetEmployeeTownName(*EmployeeA, GetDatabaseString(DatabaseID, 08))
SetEmployeeCivicNumber(*EmployeeA, GetDatabaseString(DatabaseID, 09))
SetEmployeeStreetName(*EmployeeA, GetDatabaseString(DatabaseID, 10))
SetEmployeeZipPostalCode(*EmployeeA, GetDatabaseString(DatabaseID, 11))
SetEmployeeEmail(*EmployeeA, GetDatabaseString(DatabaseID, 12))
SetEmployeePhoneNumber01(*EmployeeA, GetDatabaseString(DatabaseID, 13))
SetEmployeePhoneNumber02(*EmployeeA, GetDatabaseString(DatabaseID, 14))
SetEmployeeComments(*EmployeeA, GetDatabaseString(DatabaseID, 15))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Debugging macro <<<<<
Macro DebugEmployee(EmployeeA)
Debug "PrimaryKeyID : " + Str(GetEmployeePrimaryKeyID(EmployeeA))
Debug "LoginName : " + GetEmployeeLoginName(EmployeeA)
Debug "LoginPassword : " + GetEmployeeLoginPassword(EmployeeA)
Debug "Type : " + Str(GetEmployeeType(EmployeeA))
Debug "Rights : " + Str(GetEmployeeRights(EmployeeA))
Debug "FirstName : " + GetEmployeeFirstName(EmployeeA)
Debug "LastName : " + GetEmployeeLastName(EmployeeA)
Debug "NumberID : " + Str(GetEmployeeNumberID(EmployeeA))
Debug "TownName : " + GetEmployeeTownName(EmployeeA)
Debug "CivicNumber : " + GetEmployeeCivicNumber(EmployeeA)
Debug "StreetName : " + GetEmployeeStreetName(EmployeeA)
Debug "ZipPostalCode : " + GetEmployeeZipPostalCode(EmployeeA)
Debug "Email : " + GetEmployeeEmail(EmployeeA)
Debug "PhoneNumber01 : " + GetEmployeePhoneNumber01(EmployeeA)
Debug "PhoneNumber02 : " + GetEmployeePhoneNumber02(EmployeeA)
Debug "Comments : " + GetEmployeeComments(EmployeeA)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Initialize operator <<<<<
Procedure InitializeEmployee(*EmployeeA.Employee)
SetEmployeePrimaryKeyID(*EmployeeA, 0)
SetEmployeeLoginName(*EmployeeA, "")
SetEmployeeLoginPassword(*EmployeeA, "")
SetEmployeeType(*EmployeeA, 0)
SetEmployeeRights(*EmployeeA, 0)
SetEmployeeFirstName(*EmployeeA, "")
SetEmployeeLastName(*EmployeeA, "")
SetEmployeeNumberID(*EmployeeA, 0)
SetEmployeeTownName(*EmployeeA, "")
SetEmployeeCivicNumber(*EmployeeA, "")
SetEmployeeStreetName(*EmployeeA, "")
SetEmployeeZipPostalCode(*EmployeeA, "")
SetEmployeeEmail(*EmployeeA, "")
SetEmployeePhoneNumber01(*EmployeeA, "")
SetEmployeePhoneNumber02(*EmployeeA, "")
SetEmployeeComments(*EmployeeA, "")
; ClearStructure(*EmployeeA, Employee)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.013 seconds (71538.46 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
In 2006, when I have try to expose this tool many people says :
Too long !?! Writing rate of 71538.46 lines/second, 00.013 seconds to generate, it's too long ? OK the record is 127 000 lines/second but unless I use a method of massively parallel programming it's impossible to go faster than that !It's to long to work that way
And yes the generated code is far from perfect but personally it's very close to most of my needs. Unfortunately, I have to warn all of you, if want to use it you have to adapt your programming style with the Based Object Programming concept. I not said Oriented Object Programming like C++ programming language.
Any drawbacks to the use of this programming tool ? Yes :
- - some generated command require custom libs (Pack File, Encoded File, Encrypted file and Double Security file)
- Pointer field like *Potatoes.Potato are not supported (You can edit the code manually after code generation or each code regeneration)
- One Structure at time (except for multi-dimension static array)
- Very large and multiple files source code, perhaps longer compilation time
- Available in French and English only (Translation in other language are possible but translators for other language will be needed)
So how many of you are interested by this programming tool ?
Best regards
Guimauve