Max. Compilation lines of code... ?

Just starting out? Need help? Post your questions and find answers here.
marc_256
Addict
Addict
Posts: 844
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: Max. Compilation lines of code... ?

Post by marc_256 »

Hi again,

Other question,
I convert all my bmp images to data files as my own .pix data.
If one day a hacker will try to hack my program,
with IncludeBinary he or she will find it in a flash.
With binary data, and createimage() it is a little bit more difficult.

Or am I wrong thinking :mrgreen:

Whats your idea about this ??

Marc,
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
BorisTheOld
Enthusiast
Enthusiast
Posts: 542
Joined: Tue Apr 24, 2012 5:08 pm
Location: Ontario, Canada

Re: Max. Compilation lines of code... ?

Post by BorisTheOld »

MachineCode wrote:
Franky wrote:How did you get so many lines of code?
Number of lines never impresses me. Half could be blank lines for white space reasons, or even lots of single lines like "a=a+1".
Good programmers shouldn't make wild assumptions about programs they know nothing about. And they certainly shouldn't assume that small programs are, by their nature, better than big ones.

We typically compile 500,000 line programs, with some closer to 1,000,000 lines. Compile times vary from 2 to 10 minutes depending on the complexity of the code, but this isn't important since we rarely need to compile.

Our code is machine-generated from a database that contains the specifications of all our applications. These specs include such items as data elements, data structures, files, reports, screen layouts, processing rules, etc, etc. The nucleus of the code generator consists of about 20,000 lines of hand written code, but the entire package self-generates to about 400,000 lines.

We prefer to work entirely with source code, rather than use static and dynamic libraries, as this avoids maintaining extra stuff between the design specs and the final executable file. Only about 20% of the source code is devoted to comments and white space. Anything less makes the code unreadable.

Here's a snippet from one of our Classes. The code was machine generated from the Data Dictionary database.

Code: Select all

;===============================================
;
;  File233 Class                                 Elements
;
;===============================================
;
;  strRecord233  :  Elements
;
Structure strRecord233
  Field(nElementKey, typDword)                                                           ; 14401 : element number (key)
  Field(sElementName, typString)                                                         ; 10528 : element name
  Field(cDataType, typChar)                                                              ; 12038 : element data type
  Field(nDataLength, typDword)                                                           ; 12039 : data length
  Field(nDataScale, typDword)                                                            ; 12040 : data scale
  Field(sEntityNote1, typString)                                                         ; 14182 : entity note 1
  Field(sEntityNote2, typString)                                                         ; 14183 : entity note 2
  Field(cCaseFlag, typChar)                                                              ; 13605 : edit case :  U=uppercase, L=lowercase, X=all
  Field(cCharsFlag, typChar)                                                             ; 13639 : chars:  A=alpha, N=num, H=hex, E=element, C=constant, X=all
  Field(cSignFlag, typChar)                                                              ; 13606 : edit sign : U=unsigned X=sign depends on data type
  Field(cValueFlag, typChar)                                                             ; 13640 : edit value : B=blank, P=positive N=negative, Z=zero, X=all
  Field(cNegateFlag, typChar)                                                            ; 13641 : edit negate : X=no negation N=negate the value test
  Field(cZeroSuppressFlag, typChar)                                                      ; 12075 : Y = suppress leading zeros
  Field(cCommaInsertFlag, typChar)                                                       ; 12076 : Y = insert commas in numbers
  Field(cBlankZeroFlag, typChar)                                                         ; 12098 : Y = display blanks if zero value
  Field(cSecureFlag, typChar)                                                            ; 13644 : Y = data is hidden on screen
  Field(nDefaultConstant, typDword)                                                      ; 13696 : element default:  constant
  Field(cKeyMode, typChar)                                                               ; 10508 : program mode for file key fields N = normal or none
  Field(nMessageNumber, typDword)                                                        ; 12085 : message number:  4001-5999
  Field(nEnquiryProgram, typDword)                                                       ; 10611 : element enquiry program number
  Field(nKeyFile, typDword)                                                              ; 10613 : file holding last sequ num used
  Field(nKeyElement, typDword)                                                           ; 10622 : pointer to last sequ number used
  Field(cStatusFlag, typChar)                                                            ; 11246 : entity status: E=enter, C=code, T=test, D=doc, R=release, X=obs
  Field(nDefaultFile, typDword)                                                          ; 14405 : element default:  file
  Field(nDefaultElement, typDword)                                                       ; 14406 : element default:  element
  Field(nDataWidth, typDword)                                                            ; 12041 : data width within a structure
  Field(nDataStructure, typDword)                                                        ; 14576 : element data structure
  Field(sControlPrefix, typString)                                                       ; 14810 : control prefix:  lbl, txt, fra, cmd, frm, lst, pgr, tmr
  Field(nDataClass, typDword)                                                            ; 14973 : element data class
  Field(sNotUsed064, typString)                                                          ; 10757 :
EndStructure
;
;===============================================
;
;  Interface  :  Elements
;
Interface objFile233
  Fun(Destroy, typObject) ()
  Fun(Clone,   typObject) ()
  Sub(Open)      (ByRef(bruHcb, udtIsamHcb), ByVal(bvsPackageCode, typString), ByVal(bvdDateToday, typDate), ByVal(bvnBatch, typDword))
  Sub(Close)     (ByRef(bruHcb, udtIsamHcb))
  Sub(EqualHigh) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(LowEqual)  (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Read)      (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32))
  Sub(Next)      (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Previous)  (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Add)       (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233))
  Sub(Update)    (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233))
  Sub(Delete)    (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233))
  Sub(First)     (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Last)      (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Empty)     (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233))
  Sub(Find)      (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
  Sub(Write)     (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord233))
EndInterface
;
;===============================================
;
;  Properties  :  Elements
;
Structure strFile233
  Pointer(prpVirtualTable)                                                               ; 16393 : pointer to a class virtual table
  Field(priReferenceCount, typInt32)                                                     ; 16394 : class reference count
  Field(proDvsam, objDvsam)                                                              ; 16395 : instance of the Dvsam class
EndStructure
;
;===============================================
;
;  Create  :  Elements
;
Function(clsFile233_funCreate, typObject) ()
  Local(Me, strFile233)
  Me = AllocateMemory(SizeOf(strFile233))
  If IsObject(Me)
    InitializeStructure(Me, strFile233)
    Me\prpVirtualTable   = LabelPtr(clsFile233_VirtualTable)
    Me\priReferenceCount = 1
    Me\proDvsam          = Create(clsDvsam)
  EndIf
  ProcedureReturn Me
EndFunction
;
;===============================================
;
;  Destroy  :  Elements
;
Function(clsFile233_funDestroy, typObject) (ByVal(Me, strFile233))
  If IsObject(Me)
    If Me\priReferenceCount > 1
      Me\priReferenceCount = Me\priReferenceCount - 1
    Else
      Me\proDvsam = Me\proDvsam\funDestroy()
      ClearStructure(Me, strFile233)
      FreeMemory(Me)
    EndIf
  EndIf
  ProcedureReturn 0
EndFunction
;
;===============================================
;
;  Clone  :  Elements
;
Function(clsFile233_funClone, typObject) (ByVal(Me, strFile233))
  If IsObject(Me)
    Me\priReferenceCount = Me\priReferenceCount + 1
  EndIf
  ProcedureReturn Me
EndFunction
;
;===============================================
;
;  Get                                           get record data
;
Subroutine(clsFile233_subGet) (ByVal(Me, strFile233), ByRef(brrRecord, strRecord233))
;
;  brrRecord                                     file record
;

  Ref(brrRecord)\nElementKey = Me\proDvsam\funGetDword(1, 6)
  Ref(brrRecord)\sElementName = Me\proDvsam\funGetString(7, 32)
  Ref(brrRecord)\cDataType = Me\proDvsam\funGetChar(39)
  Ref(brrRecord)\nDataLength = Me\proDvsam\funGetDword(40, 6)
  Ref(brrRecord)\nDataScale = Me\proDvsam\funGetDword(46, 1)
  Ref(brrRecord)\sEntityNote1 = Me\proDvsam\funGetString(47, 32)
  Ref(brrRecord)\sEntityNote2 = Me\proDvsam\funGetString(79, 32)
  Ref(brrRecord)\cCaseFlag = Me\proDvsam\funGetChar(111)
  Ref(brrRecord)\cCharsFlag = Me\proDvsam\funGetChar(112)
  Ref(brrRecord)\cSignFlag = Me\proDvsam\funGetChar(113)
  Ref(brrRecord)\cValueFlag = Me\proDvsam\funGetChar(114)
  Ref(brrRecord)\cNegateFlag = Me\proDvsam\funGetChar(115)
  Ref(brrRecord)\cZeroSuppressFlag = Me\proDvsam\funGetChar(116)
  Ref(brrRecord)\cCommaInsertFlag = Me\proDvsam\funGetChar(117)
  Ref(brrRecord)\cBlankZeroFlag = Me\proDvsam\funGetChar(118)
  Ref(brrRecord)\cSecureFlag = Me\proDvsam\funGetChar(119)
  Ref(brrRecord)\nDefaultConstant = Me\proDvsam\funGetDword(120, 6)
  Ref(brrRecord)\cKeyMode = Me\proDvsam\funGetChar(126)
  Ref(brrRecord)\nMessageNumber = Me\proDvsam\funGetDword(127, 6)
  Ref(brrRecord)\nEnquiryProgram = Me\proDvsam\funGetDword(133, 6)
  Ref(brrRecord)\nKeyFile = Me\proDvsam\funGetDword(139, 6)
  Ref(brrRecord)\nKeyElement = Me\proDvsam\funGetDword(145, 6)
  Ref(brrRecord)\cStatusFlag = Me\proDvsam\funGetChar(151)
  Ref(brrRecord)\nDefaultFile = Me\proDvsam\funGetDword(152, 6)
  Ref(brrRecord)\nDefaultElement = Me\proDvsam\funGetDword(158, 6)
  Ref(brrRecord)\nDataWidth = Me\proDvsam\funGetDword(164, 6)
  Ref(brrRecord)\nDataStructure = Me\proDvsam\funGetDword(170, 6)
  Ref(brrRecord)\sControlPrefix = Me\proDvsam\funGetString(176, 3)
  Ref(brrRecord)\nDataClass = Me\proDvsam\funGetDword(179, 6)
  Ref(brrRecord)\sNotUsed064 = Me\proDvsam\funGetString(185, 64)

EndSubroutine
;
;===============================================
;
;  Put                                           put record data
;
Subroutine(clsFile233_subPut) (ByVal(Me, strFile233), ByRef(brrRecord, strRecord233))
;
;  brrRecord                                     file record
;

  Me\proDvsam\subPutDword(Ref(brrRecord)\nElementKey, 1, 6)
  Me\proDvsam\subPutString(Ref(brrRecord)\sElementName, 7, 32)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cDataType, 39)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDataLength, 40, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDataScale, 46, 1)
  Me\proDvsam\subPutString(Ref(brrRecord)\sEntityNote1, 47, 32)
  Me\proDvsam\subPutString(Ref(brrRecord)\sEntityNote2, 79, 32)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cCaseFlag, 111)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cCharsFlag, 112)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cSignFlag, 113)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cValueFlag, 114)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cNegateFlag, 115)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cZeroSuppressFlag, 116)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cCommaInsertFlag, 117)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cBlankZeroFlag, 118)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cSecureFlag, 119)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDefaultConstant, 120, 6)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cKeyMode, 126)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nMessageNumber, 127, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nEnquiryProgram, 133, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nKeyFile, 139, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nKeyElement, 145, 6)
  Me\proDvsam\subPutChar(Ref(brrRecord)\cStatusFlag, 151)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDefaultFile, 152, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDefaultElement, 158, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDataWidth, 164, 6)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDataStructure, 170, 6)
  Me\proDvsam\subPutString(Ref(brrRecord)\sControlPrefix, 176, 3)
  Me\proDvsam\subPutDword(Ref(brrRecord)\nDataClass, 179, 6)
  Me\proDvsam\subPutString(Ref(brrRecord)\sNotUsed064, 185, 64)

EndSubroutine
;
;===============================================
;
;  Open                                          start file operations
;
Subroutine(clsFile233_subOpen) (ByVal(Me, strFile233), ByRef(bruHcb, udtIsamHcb), ByVal(bvsPackageCode, typString), ByVal(bvdDateToday, typDate), ByVal(bvnBatch, typDword))
;
;  bruHcb                                        14869 : isam file handle control block
;  bvsPackageCode                                10001 : package code
;  bvdDateToday                                  12312 : effective sign-on date
;  bvnBatch                                      10305 : file batch number
;
;--} local data

  Local(sPackageCode, typString)                                                         ; 10001 : package code
  Local(sUniqueName, typString)                                                          ; 11236 : unique part of dos file name
  Local(sFileExtension, typString)                                                       ; 14843 : dos file extension
  Local(sStringValue, typString)                                                         ; 14890 : generic string value
  Local(sDosFileName, typString)                                                         ; 14704 : dos file name:  xxaaaaaa.nnn
  Local(sFilePath, typString)                                                            ; 15040 : generic file path

;--} local code

  sPackageCode = "DD"
  sUniqueName = "ELEMNT"
  sFileExtension = "233"

  sDosFileName = sPackageCode + sUniqueName + #cCHAR_PERIOD + sFileExtension             ; create file name
  sFilePath = Me\proDvsam\funGetPath(sDosFileName)                                       ; create file path

  Me\proDvsam\subDefineFile(Ref(bruHcb), 233, "Elements", sFilePath, 248, 30, 2)

  Me\proDvsam\subDefineField(Ref(bruHcb), 1, #vFIELD_DWORD, 0, 6)                        ; 14401 : element number (key)
  Me\proDvsam\subDefineField(Ref(bruHcb), 2, #vFIELD_STRING, 6, 32)                      ; 10528 : element name
  Me\proDvsam\subDefineField(Ref(bruHcb), 3, #vFIELD_CHAR, 38, 1)                        ; 12038 : element data type
  Me\proDvsam\subDefineField(Ref(bruHcb), 4, #vFIELD_DWORD, 39, 6)                       ; 12039 : data length
  Me\proDvsam\subDefineField(Ref(bruHcb), 5, #vFIELD_DWORD, 45, 1)                       ; 12040 : data scale
  Me\proDvsam\subDefineField(Ref(bruHcb), 6, #vFIELD_STRING, 46, 32)                     ; 14182 : entity note 1
  Me\proDvsam\subDefineField(Ref(bruHcb), 7, #vFIELD_STRING, 78, 32)                     ; 14183 : entity note 2
  Me\proDvsam\subDefineField(Ref(bruHcb), 8, #vFIELD_CHAR, 110, 1)                       ; 13605 : edit case :  U=uppercase, L=lowercase, X=all
  Me\proDvsam\subDefineField(Ref(bruHcb), 9, #vFIELD_CHAR, 111, 1)                       ; 13639 : chars:  A=alpha, N=num, H=hex, E=element, C=constant, X=all
  Me\proDvsam\subDefineField(Ref(bruHcb), 10, #vFIELD_CHAR, 112, 1)                      ; 13606 : edit sign : U=unsigned X=sign depends on data type
  Me\proDvsam\subDefineField(Ref(bruHcb), 11, #vFIELD_CHAR, 113, 1)                      ; 13640 : edit value : B=blank, P=positive N=negative, Z=zero, X=all
  Me\proDvsam\subDefineField(Ref(bruHcb), 12, #vFIELD_CHAR, 114, 1)                      ; 13641 : edit negate : X=no negation N=negate the value test
  Me\proDvsam\subDefineField(Ref(bruHcb), 13, #vFIELD_CHAR, 115, 1)                      ; 12075 : Y = suppress leading zeros
  Me\proDvsam\subDefineField(Ref(bruHcb), 14, #vFIELD_CHAR, 116, 1)                      ; 12076 : Y = insert commas in numbers
  Me\proDvsam\subDefineField(Ref(bruHcb), 15, #vFIELD_CHAR, 117, 1)                      ; 12098 : Y = display blanks if zero value
  Me\proDvsam\subDefineField(Ref(bruHcb), 16, #vFIELD_CHAR, 118, 1)                      ; 13644 : Y = data is hidden on screen
  Me\proDvsam\subDefineField(Ref(bruHcb), 17, #vFIELD_DWORD, 119, 6)                     ; 13696 : element default:  constant
  Me\proDvsam\subDefineField(Ref(bruHcb), 18, #vFIELD_CHAR, 125, 1)                      ; 10508 : program mode for file key fields N = normal or none
  Me\proDvsam\subDefineField(Ref(bruHcb), 19, #vFIELD_DWORD, 126, 6)                     ; 12085 : message number:  4001-5999
  Me\proDvsam\subDefineField(Ref(bruHcb), 20, #vFIELD_DWORD, 132, 6)                     ; 10611 : element enquiry program number
  Me\proDvsam\subDefineField(Ref(bruHcb), 21, #vFIELD_DWORD, 138, 6)                     ; 10613 : file holding last sequ num used
  Me\proDvsam\subDefineField(Ref(bruHcb), 22, #vFIELD_DWORD, 144, 6)                     ; 10622 : pointer to last sequ number used
  Me\proDvsam\subDefineField(Ref(bruHcb), 23, #vFIELD_CHAR, 150, 1)                      ; 11246 : entity status: E=enter, C=code, T=test, D=doc, R=release, X=obs
  Me\proDvsam\subDefineField(Ref(bruHcb), 24, #vFIELD_DWORD, 151, 6)                     ; 14405 : element default:  file
  Me\proDvsam\subDefineField(Ref(bruHcb), 25, #vFIELD_DWORD, 157, 6)                     ; 14406 : element default:  element
  Me\proDvsam\subDefineField(Ref(bruHcb), 26, #vFIELD_DWORD, 163, 6)                     ; 12041 : data width within a structure
  Me\proDvsam\subDefineField(Ref(bruHcb), 27, #vFIELD_DWORD, 169, 6)                     ; 14576 : element data structure
  Me\proDvsam\subDefineField(Ref(bruHcb), 28, #vFIELD_STRING, 175, 3)                    ; 14810 : control prefix:  lbl, txt, fra, cmd, frm, lst, pgr, tmr
  Me\proDvsam\subDefineField(Ref(bruHcb), 29, #vFIELD_DWORD, 178, 6)                     ; 14973 : element data class
  Me\proDvsam\subDefineField(Ref(bruHcb), 30, #vFIELD_STRING, 184, 64)                   ; 10757 :

  Me\proDvsam\subDefineIndex(Ref(bruHcb), 1, 1, 0, 0, 0, 0, 0, 0, 0)
  Me\proDvsam\subDefineIndex(Ref(bruHcb), 2, 2, 0, 0, 0, 0, 0, 0, 0)

  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 1, "N")                                     ; report flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 2, "N")                                     ; cvt flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 3, "N")                                     ; date flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 4, "N")                                     ; job flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 5, "E")                                     ; status flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 6, "C")                                     ; style flag
  Me\proDvsam\subDefineUserFlag(Ref(bruHcb), 7, "N")                                     ; package flag

  Me\proDvsam\subOpenFile(Ref(bruHcb))                                                   ; open file: 233 - Elements

EndSubroutine
For ten years Caesar ruled with an iron hand, then with a wooden foot, and finally with a piece of string.
~ Spike Milligan
Fred
Administrator
Administrator
Posts: 18247
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: Max. Compilation lines of code... ?

Post by Fred »

To answer the question, PureBasic doesn't have hard limit for source size, and if you use the 64 bit version with enough memory you should be able to compile very large programs (probably slowly but it should still work).
Puffolino
User
User
Posts: 49
Joined: Thu Jan 05, 2012 12:27 am

Re: Max. Compilation lines of code... ?

Post by Puffolino »

marc_256 wrote:Hi again,

Other question,
I convert all my bmp images to data files as my own .pix data.
If one day a hacker will try to hack my program,
with IncludeBinary he or she will find it in a flash.
With binary data, and createimage() it is a little bit more difficult.

Or am I wrong thinking :mrgreen:

Whats your idea about this ??

Marc,
IncludeBinary and binary data will produce the same results – the latter is just more work to keep your source code up to date, when you do some changes on your bitmaps (sorry, pix-files).
So changing the file format (or at least the well known image header) should be enough to reduce the possibility for hacking, but you can also integrate a checksum for the whole exe file to "secure" not only your bitmap but also the text strings...
User avatar
djes
Addict
Addict
Posts: 1806
Joined: Sat Feb 19, 2005 2:46 pm
Location: Pas-de-Calais, France

Re: Max. Compilation lines of code... ?

Post by djes »

Puffolino wrote:
marc_256 wrote:Hi again,

Other question,
I convert all my bmp images to data files as my own .pix data.
If one day a hacker will try to hack my program,
with IncludeBinary he or she will find it in a flash.
With binary data, and createimage() it is a little bit more difficult.

Or am I wrong thinking :mrgreen:

Whats your idea about this ??

Marc,
IncludeBinary and binary data will produce the same results – the latter is just more work to keep your source code up to date, when you do some changes on your bitmaps (sorry, pix-files).
So changing the file format (or at least the well known image header) should be enough to reduce the possibility for hacking, but you can also integrate a checksum for the whole exe file to "secure" not only your bitmap but also the text strings...
Here's a small snippet to do exactly what you want. Automagically create/encrypt/depack, with just one constant. http://www.purebasic.fr/english/viewtop ... 16&t=45683
marc_256
Addict
Addict
Posts: 844
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: Max. Compilation lines of code... ?

Post by marc_256 »

To Fred,
To answer the question, PureBasic doesn't have hard limit for source size, and if you use the 64 bit version with enough memory you should be able to compile very large programs (probably slowly but it should still work).
Thanks for the answer, that's what I was waiting for. :wink:
So, I can go on now with my work...


To Puffolino,
IncludeBinary and binary data will produce the same results – the latter is just more work to keep your source code up to date, when you do some changes on your bitmaps (sorry, pix-files).
So changing the file format (or at least the well known image header) should be enough to reduce the possibility for hacking, but you can also integrate a checksum for the whole exe file to "secure" not only your bitmap but also the text strings...
Yes :oops: that what it is, cut off the well known image header...


To djes,

Thanks for the hint, I will use this the day the program is working well,
without bugs. :mrgreen: 8)


Marc,
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
Post Reply