{{fbdoc item="title" value="Programmer's Guide"}}----
""FreeBASIC"" programmer's guide.

//Work in Progress: **New pages created for this guide should use the ""ProPg""* prefix.**//

<<{{fbdoc item="section" value="Getting Started"}}
	{{fbdoc item="keyword" value="ProPgHelloWorld|Hello World"}}
	{{fbdoc item="keyword" value="ProPgPrimer1|FreeBASIC Primer #1"}}

{{fbdoc item="section" value="Source Files"}}
	{{fbdoc item="keyword" value="ProPgSourceFiles|Source Files (.bas)"}}
	{{fbdoc item="keyword" value="ProPgHeaderFiles|Header Files (.bi)"}}
	{{fbdoc item="keyword" value="ProPgPrebuiltLibraries|Using Prebuilt Libraries"}}
	{{fbdoc item="keyword" value="ProPgSourceCompiledModule|Manage Reusable Procedures by Including Source vs Compiled Modules"}}

{{fbdoc item="section" value="Lexical Conventions"}}
	{{fbdoc item="keyword" value="ProPgComments|Comments"}}
	{{fbdoc item="keyword" value="ProPgIdentifierRules|Identifier Rules"}}
	{{fbdoc item="keyword" value="ProPgLiterals|Literals"}}
	{{fbdoc item="keyword" value="ProPgLabels|Labels"}}
	{{fbdoc item="keyword" value="ProPgLineContinuation|Line Continuation"}}
	{{fbdoc item="keyword" value="ProPgLineSeparator|Line Separator"}}

{{fbdoc item="section" value="Variables and Datatypes"}}
	{{fbdoc item="keyword" value="ProPgEnumerations|Constants and Enumerations"}}
	{{fbdoc item="keyword" value="ProPgNumericTypes|Numeric Types"}}
	{{fbdoc item="keyword" value="ProPgStringsTypes|Strings (string, zstring, and wstring)"}}
	{{fbdoc item="keyword" value="ProPgDataConversion|Coercion and Conversion"}}
	{{fbdoc item="keyword" value="ProPgConstants|Constants"}}
	{{fbdoc item="keyword" value="ProPgVariables|Variables"}}
	
	{{fbdoc item="subsect" value="Arrays"}}
		{{fbdoc item="keyword" value="ProPgArrays|Overview"}}
		{{fbdoc item="keyword" value="ProPgFixLenArrays|Fixed-length Arrays"}}
		{{fbdoc item="keyword" value="ProPgVarLenArrays|Variable-length Arrays"}}
		{{fbdoc item="keyword" value="ProPgArrayIndex|Array Indexing"}}
		{{fbdoc item="keyword" value="ProPgPassingArrays|Passing Arrays to Procedures"}}
		
	{{fbdoc item="subsect" value="Pointers"}}
		{{fbdoc item="keyword" value="ProPgPointers|Overview"}}
		{{fbdoc item="keyword" value="ProPgPtrArithmetic|Pointer Arithmetic"}}
		
	{{fbdoc item="subsect" value="References"}}
		{{fbdoc item="keyword" value="ProPgFromPtrToRef|From Pointers to References"}}
		{{fbdoc item="keyword" value="ProPgReferences|Using References"}}

{{fbdoc item="section" value="Declarations"}}
	{{fbdoc item="keyword" value="ProPgImplicitdeclarations|Implicit Declarations"}}
	{{fbdoc item="keyword" value="ProPgInitialization|Initialization"}}
	{{fbdoc item="keyword" value="ProPgStorageClasses|Storage Classes"}}
	{{fbdoc item="keyword" value="ProPgVariableScope|Variable Scope"}}
	{{fbdoc item="keyword" value="ProPgVariableLifetime|Simple Variable Lifetime vs Scope"}}
	{{fbdoc item="keyword" value="ProPgObjectLifetime|Dynamic Object and Data Lifetime"}}
	{{fbdoc item="keyword" value="ProPgNamespaces|Namespaces"}}
	{{fbdoc item="keyword" value="ProPgVarProcLinkage|Variable and Procedure Linkage"}}

{{fbdoc item="section" value="User Defined Types"}}
	{{fbdoc item="keyword" value="ProPgUDTs|Overview"}}
	{{fbdoc item="keyword" value="ProPgTypeAliases|Type Aliases"}}
	{{fbdoc item="keyword" value="KeyPgTypeTemp|Temporary Types"}}
	{{fbdoc item="keyword" value="ProPgTypeUnion|Type (UDT/Alias/Temporary) and Union"}}
	{{fbdoc item="keyword" value="ProPgCtorsDtors|Constructors and Destructors (basics)"}}
	{{fbdoc item="keyword" value="ProPgMemberProcedures|Member Procedures"}}
	{{fbdoc item="keyword" value="ProPgProperties|Properties"}}
	{{fbdoc item="keyword" value="ProPgVariableLengthData|Variable-length member data"}}
	{{fbdoc item="keyword" value="ProPgMemberAccessRights|Member Access Rights and Encapsulation"}}
	{{fbdoc item="keyword" value="ProPgOperatorOverloading|Operator Overloading"}}
	{{fbdoc item="keyword" value="ProPgTypeIterators|Iterators"}}
	{{fbdoc item="keyword" value="ProPgNewDelete|New and Delete"}}
	{{fbdoc item="keyword" value="ProPgTypeObjects|Types as Objects"}}
	{{fbdoc item="keyword" value="ProPgCompoAggregInherit|Composition, Aggregation, Inheritance"}}
	{{fbdoc item="keyword" value="ProPgPolymorphism|Inheritance Polymorphism"}}
	{{fbdoc item="keyword" value="ProPgCtorsAssignDtors|Constructors, '=' Assignment-Operators, and Destructors (advanced, part #1)"}}
	{{fbdoc item="keyword" value="ProPgCtorsAssignDtors2|Constructors, '=' Assignment-Operators, and Destructors (advanced, part #2)"}}

<<>>{{fbdoc item="section" value="Statements and Expressions"}}
	{{fbdoc item="keyword" value="ProPgExpressionsStatements|Differences between Expressions and Statements"}}
	{{fbdoc item="keyword" value="ProPgConstantExpressions|Constant Expressions"}}
	{{fbdoc item="keyword" value="ProPgAssignments|Assignments"}}
	{{fbdoc item="keyword" value="CatPgOperators|Operator List"}}
	{{fbdoc item="keyword" value="OpPrecedence|Operator Precedence"}}
	{{fbdoc item="keyword" value="ProPgControlFlow|Control Flow Statements"}}

{{fbdoc item="section" value="Procedures"}}
	{{fbdoc item="keyword" value="ProPgProcedures|Procedures Overview"}}
	{{fbdoc item="keyword" value="ProPgPassingArguments|Passing Arguments to Procedures"}}
	{{fbdoc item="keyword" value="ProPgReturnValue|Returning Values"}}
	{{fbdoc item="keyword" value="ProPgProcedureScopes|Procedure Scopes"}}
	{{fbdoc item="keyword" value="ProPgCallingConventions|Calling Conventions"}}
	{{fbdoc item="keyword" value="ProPgRecursion|Recursion"}}
	{{fbdoc item="keyword" value="ProPgCallback|Callback"}}
	{{fbdoc item="keyword" value="ProPgProcCtorsDtors|Constructors and Destructors"}}
	{{fbdoc item="keyword" value="ProPgProcedurePointers|Pointers to Procedures"}}
	{{fbdoc item="keyword" value="ProPgVariadicArguments|Variadic Arguments"}}

{{fbdoc item="section" value="Graphics"}}
	{{fbdoc item="keyword" value="GfxLib|FreeBASIC GfxLib overview"}}
	{{fbdoc item="keyword" value="ProPgAntiFlickering|Graphics Mode Refresh and Anti-Flickering"}}
	{{fbdoc item="keyword" value="GfxInternalFormats|Internal Graphics Formats"}}
	{{fbdoc item="keyword" value="ProPgExternalFormats|External Graphics File Formats"}} ##(page to be completed)##
	{{fbdoc item="keyword" value="ProPgLiteRegulate|Lite regulation function to be integrated into user loop for FPS control"}}
	{{fbdoc item="keyword" value="ProPgDelayRegulate|Fine-grain procedure for waiting and in-loop procedure for fine-regulating FPS"}}

{{fbdoc item="section" value="Multi-Threading"}}
	{{fbdoc item="keyword" value="ProPgMultiThreading|Overview"}}
	{{fbdoc item="keyword" value="ProPgMtThreads|Threads"}}
	{{fbdoc item="keyword" value="ProPgMtMutualExclusion|Mutual Exclusion"}}
	{{fbdoc item="keyword" value="ProPgMtConditionalVariables|Conditional Variables"}}
	{{fbdoc item="keyword" value="ProPgMtCriticalSections|Critical Sections"}}
	{{fbdoc item="keyword" value="ProPgMtCriticalSectionsFAQ|Critical Sections FAQ"}}

{{fbdoc item="section" value="Making Binaries"}}
	{{fbdoc item="keyword" value="ProPgExecutables|Executables"}}
	{{fbdoc item="keyword" value="ProPgStaticLibraries|Static Libraries"}}
	{{fbdoc item="keyword" value="ProPgSharedLibraries|Shared Libraries (DLLs)"}}
	{{fbdoc item="keyword" value="ProPgProfilingFbProfiler|Profiling with fb's profiler"}}
	{{fbdoc item="keyword" value="ProPgProfilingGmonGprof|Profiling for gmon/gprof"}}

{{fbdoc item="section" value="Preprocessor"}}
	{{fbdoc item="keyword" value="ProPgPreprocessor|Overview"}}
	{{fbdoc item="keyword" value="ProPgConditionalCompilation|Conditional Compilation"}}
	{{fbdoc item="keyword" value="ProPgMacros|Macros"}}

{{fbdoc item="section" value="Other Topics"}}
(And topics that need to get placed elsewhere)
	{{fbdoc item="keyword" value="CptAscii|ASCII"}}
	{{fbdoc item="keyword" value="ProPgDates|Date Serials"}}
	{{fbdoc item="keyword" value="ProPgRadians|Radians"}}
	{{fbdoc item="keyword" value="ProPgErrorHandling|Error Handling"}}
	{{fbdoc item="keyword" value="ProPgEventHandling|Event Handling"}}
	{{fbdoc item="keyword" value="CatPgDddefines|Intrinsic Defines"}}
	{{fbdoc item="keyword" value="ProPgIdentifierLookup|Identifier Look-ups in namespaces and types"}}

{{fbdoc item="section" value="Technical Articles"}}
	{{fbdoc item="keyword" value="KeyPgAsm|Inline ASM"}}
	{{fbdoc item="keyword" value="ProPgCruntime|C Standard Library Functions"}}
	{{fbdoc item="keyword" value="ProPgFileIO|File I/O with FreeBASIC"}}
	{{fbdoc item="keyword" value="ProPgDynamicMemory|Dynamic memory management with FreeBASIC"}}
	{{fbdoc item="keyword" value="ProPgRecursionIteration|Replace Recursion with Iteration"}}
	{{fbdoc item="keyword" value="ProPgObjectRtti|OBJECT built-in and RTTI info"}}
	{{fbdoc item="keyword" value="ProPgDataExecutable|Embed and Access binary Data in Executable"}}
	{{fbdoc item="keyword" value="ProPgUseNewDelete|Use Implicit / Overload New([]) and Delete([]) Operators with Inheritance Polymorphism"}}
	{{fbdoc item="keyword" value="ProPgEmulateTlsTp|Emulate a TLS (Thread Local Storage) and a TP (Thread Pooling) feature"}}

NOTE: Existing ""CatPg"" pages should be recreated as ""ProPg"" pages providing a general overview to the grouping of keywords.
>>::c::

{{fbdoc item="back" value="DocToc|Table of Contents"}}