:'''If code examples only display partial code, use the browser Refresh button!'''
::For comments or suggestions about this WIKI goto the Forum:
::::[http://www.qb64.net/forum/index.php?board=14.0 QB64 Community Development Forum].
::Keywords beginning with an _underscore can only be compiled in QB64.
::::[[Main Page|Main Page with Appendix and Tutorials]]
== [[Arrays|Array]] and Data Storage: ==
<center>'''Arrays in Memory'''</center>
* [[_DEFINE]] (statement) {{text|defines a range of untyped variable names according to their first character as a datatype.}}
* [[_PRESERVE]] ([[REDIM]] option) {{text|preserves the existing element values when an array is resized.}}
* [[CLEAR]] (statement) {{text|resets all variable values and array element values to 0 or null [[STRING|strings]] and closes all open files.}}
* [[DIM]] (statement) {{text|dimensions(sizes) a [[STATIC|static]] array and defines the type.}}
* [[$DYNAMIC]] (metacommand) {{text|defines that all arrays are dynamic or changeable in size.}}
* [[ERASE]] (array statement) {{text|clears a [[STATIC|static]] array of all values and totally removes a [[$DYNAMIC|dynamic]] array.}}
* [[LBOUND]] (array function) {{text|returns the lowest valid index (lower boundary) of an [[arrays|array]].}}
* [[OPTION BASE]] (statement) {{text|sets the default starting index of an array to 0 or 1.}}
* [[REDIM]] (statement) {{text|re-dimensions the number of elements in a [[$DYNAMIC|dynamic]](resizeable) [[arrays|array]] and defines the type.}}
* [[SHARED]] (statement) {{text|designates variable values that can be shared with sub-procedures without using parameters.}}
* [[STATIC]] (statement) {{text|defines a variable or list of variables that will retain their values after the sub-procedure is exited.}}
* [[$STATIC]] (metacommand) {{text|defines that all arrays are static or unchangeable in size.}}
* [[SWAP]] (statement) {{text|trades the values of two numerical or string values or array elements.}}
* [[UBOUND]] (array function) {{text|returns the highest valid index (upper boundary) of an [[arrays|array]].}}
<center>See also: [[Arrays]]</center>
<center>'''Fixed Program DATA'''</center>
* [[DATA]] (statement) {{text|creates a field of built-in program data values separated by commas.}}
* [[READ]] (statement) {{text|reads the DATA from the data field sequentially.}}
* [[RESTORE]] (statement) {{text|sets the data pointer to the start of all DATA or a specified DATA field.}}
* '''WARNING! Do not place DATA fields after [[SUB]] or [[FUNCTION]] procedures! QB64 will FAIL to compile properly!'''
{{text| Qbasic allowed programmers to add DATA fields anywhere because the [[IDE]] separated the main code from other procedures.}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== [[COLOR|Colors]] and Transparency: ==
* [[_ALPHA]] (function) {{text|returns the alpha channel transparency level of a color value used on a screen page or image.}}
* [[_ALPHA32]] (function) {{text|function returns the alpha channel level of a 32 bit color value only.}}
* [[_BACKGROUNDCOLOR]] (function) {{text|returns the current background color.}}
* [[_BLEND]] (statement) {{text|turns on alpha blending for the current image or a specific one.}}
* [[_BLEND (function)]] {{text|returns if blending is enabled or disabled for the current window or a specified image handle.}}
* [[_BLUE]] (function) {{text|returns the palette intensity OR the blue component intensity of a 32-bit image color.}}
* [[_BLUE32]] (function) {{text|returns the blue component intensity of a 32-bit image color.}}
* [[_CLEARCOLOR]] (statement) {{text|sets a specific color to be treated as transparent in an image}}
* [[_CLEARCOLOR (function)]] {{text|returns the current transparent color of an image.}}
* [[_COPYPALETTE]] (statement) {{text|copies the color palette intensities from one image to another image or screen page.}}
* [[_DEFAULTCOLOR]] (function) {{text|returns the current default text color for an image handle or page.}}
* [[_DONTBLEND]] (statement) {{text|turns off alpha blending for an image handle.}}
* [[_GREEN]] (function) {{text|returns the palette index OR the green component intensity of a 32-bit image.}}
* [[_GREEN32]] (function) {{text|returns the green component intensity of a 32-bit image color.}}
* [[_NEWIMAGE]] (function) {{text|prepares a custom sized program [[SCREEN]] or page surface that can use 256 or 32 bit colors.}}
* [[_PALETTECOLOR]] (statement) {{text|sets the color value of a palette entry of an image using 256 color modes or less (4 or 8 BPP).}}
* [[_PALETTECOLOR (function)]] {{text|returns the 32 bit attribute color setting of an image or screen page handle's palette.}}
* [[_PIXELSIZE]] (function) {{text|returns the color depth (Bits Per Pixel) of an image.}}
* [[_RED]] (function) {{text|returns the palette index OR the red component intensity of a 32-bit screen.}}
* [[_RED32]] (function) {{text|returns the red component intensity of a 32-bit image color.}}
* [[_RGB]] (function) {{text|returns the closest palette attribute index OR the [[LONG]] 32 bit color value in 32 bit screens.}}
* [[_RGB32]] (function) {{text|returns the [[LONG]] 32 bit color value only.}}
* [[_RGBA]] (function) {{text|returns the closest palette attribute index OR the [[LONG]] 32 bit color value in [[_ALPHA]] screens.}}
* [[_RGBA32]] (function) {{text|returns the [[LONG]] 32 bit [[_ALPHA]] color value only.}}
* [[_SETALPHA]] (statement) {{text|sets the alpha channel transparency level of some or all of the pixel colors of an image.}}
* [[CLS]] (statement) {{text|clears the screen and can set the background color in QB64.}}
* [[COLOR]] (statement) {{text|sets the current text color attribute or [[_RGB]] value to be used or background colors in some screen modes.}}
* [[INP]] (function) {{text|returns the RGB color intensity values from color port register &H3C9 for a specific attributes.}}
* [[OUT]] (statement) {{text|sets the color port access mode and sets the RGB color intensity values using &H3C9.}}
* [[PALETTE]] (statement) {{text|sets the Red, Green and Blue color attribute intensities using a RGB multiplier calculation.}}
* [[PALETTE USING]] (statement) {{text|sets the color intensity settings using a designated [[arrays|array]].}}
* [[POINT]] (function) {{text|returns a pixel coordinate color attribute or the [[LONG]] [[_RGB]] color value of a 32 bit color.}}
* [[PRESET]] (statement) {{text|sets a pixel coordinate to the background color or a color specified.}}
* [[PSET]] (statement) {{text|sets a pixel coordinate a specified color or uses the current color when not designated.}}
* [[SCREEN]] {{text|sets the screen mode of a program which may determine the number of colors available in legacy modes.}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
==[[Console Window]]==
* [[$CONSOLE]] (QB64 [[Metacommand]]) {{text|creates a console window throughout the program.}}
* [[_CONSOLE]] (statement) {{text|can be used to turn the console window OFF or ON or designate it as [[_DEST]] _CONSOLE for output.}}
* [[_CONSOLETITLE]] (statement) {{Text|creates a title for the console window using a literal or variable [[STRING|string]].}}
* [[$SCREENHIDE]] (QB64 [[Metacommand]]) {{text|hides the program window throughout the program until [[$SCREENSHOW]] is used.}}
* [[_SCREENHIDE]] {{text|hides the main program window in a section of code until [[_SCREENSHOW]] is used.}}
* [[$SCREENSHOW]] (QB64 [[Metacommand]]) {{text|displays the main program window throughout the program after [[$SCREENHIDE]] has been used.}}
* [[_SCREENSHOW]] {{text|displays the main program window in a section of code after [[_SCREENHIDE]] has been used.}}
* [[SHELL (function)|SHELL (QB64 function)]] {{text|executes a [[DOS]] command or calls another program. Returns codes sent by [[END]] or [[SYSTEM]].}}
* [[_SHELLHIDE]] (function) {{text|hides a [[DOS]] command or call to another program. Returns codes sent by [[END]] or [[SYSTEM]].}}
<center>See also: [[Console Window]] and [[C_Libraries#Console_Window|C++ Console window Library]].</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Conditional Operations: ==
* [[AND (boolean)]] {{text|returns True if all of the arguments are True.}}
* [[NOT]] (boolean) {{text|returns the opposite condition of an argument.}}
* [[OR (boolean)]] {{text|returns True if one of the arguments is True.}}
* [[XOR (boolean)]] {{text|returns True if only one of two arguments are True.}}
{{Template:RelationalOperationsTable}}
<center>See also: [[#Logical Bitwise Operations:|Logical Operations:]] and [[Relational Operations]]</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Definitions and Variable Types: ==
* [[_BIT]] {` numerical [[TYPE|type]]) {{text|values of 0 (bit off) or -1 (bit on). [[_UNSIGNED|Unsigned]] of 0 or 1.}}
* [[_BYTE]] {%% numerical [[TYPE|type]]) {{text|values from -128 to 127 (one byte or 8 [[_BIT]]s). [[_UNSIGNED|Unsigned]] from 0 to 255.}}
* [[_DEFINE]] (statement) {{text|defines a range of untyped variable names according to their first character as a datatype.}}
* [[_FLOAT]] {## numerical [[TYPE|type]]) {{text|values offer the maximum floating-point decimal precision available using QB64.}}
* [[_INTEGER64]] (&& numerical [[TYPE|type]]) {{text|values -9223372036854775808 to 9223372036854775807. [[_UNSIGNED|Unsigned]] to 18446744073709551615.}}
* [[_MEM]] (variable type) {{text|contains read only dot elements for the OFFSET, SIZE, TYPE and ELEMENTSIZE of a block of memory.}}
* [[_OFFSET]](%& variable type) {{text|can store any memory offset integer value when using [[DECLARE LIBRARY]] or [[_MEM]]ory only.}}
* [[_OS$]] (function) {{text| returns the QB64 compiler version in which the program was compiled as [WINDOWS], [LINUX] or [MACOSX] and [32BIT] or [64BIT].}}
* [[CHDIR]] (statement) {{text|changes the program path to a new path.}}
* [[COMMAND$]] (function) {{text|returns command line parameters sent when a program is started.}}
* [[ENVIRON]] (statement) {{text|sets the environmental settings of the computer. NOT IMPLEMENTED!}}
* [[ENVIRON$]] (function) {{text|returns the environmental settings of the computer.}}
* [[FILES]] (statement) {{text|displays a specified list of files.}}
* [[MKDIR]] (statement) {{text|creates a new directory folder in the designated path.}}
* [[NAME]] (statement) {{text|renames a file.}}
* [[RMDIR]] (statement) {{text|removes an empty directory folder from the specified path.}}
* [[SHELL]] (statement) {{text|performs a command line operation in [[DOS]].}}
* [[SHELL (function)|SHELL (QB64 function)]] {{text|executes a [[DOS]] command or calls another program. Returns codes sent by [[END]] or [[SYSTEM]].}}
<center>''See also:'' [[Keyword_Reference_-_By_usage#Console_Window|Console Window]] to display [[DOS]] commands.</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Error Codes ==
The following table describes the error codes that are reported by the '''QB64''' compiler, as well as possible causes and solutions:
{| border="1" cellpadding="2"
|-
! colspan="6"|QB/64 Error Codes
|-
! Code || Description || Common cause/Resolution || QB64 Differences
|-
| 1 || [[NEXT]] without [[FOR]] || Missing loop end or look for a missing [[END IF]] or [[END SELECT]] statement. || none
|-
| 2 || Syntax error || Mistyped keyword statements or puctuation errors can create syntax errors. || none
|-
| 3 || [[RETURN]] without [[GOSUB]] || Place sub-procedure line label after program [[END]] or [[EXIT]] in a [[SUB]]-procedure.|| none
|-
| 4 || Out of DATA || A [[READ]] has read past the end of [[DATA]]. Use [[RESTORE]] to reset to data start. . || none
|-
| 5 || Illegal function call || A parameter passed does not match the function type or exceeds certain function limitations. See [[Illegal Function]]. || none
|-
| 6 || Overflow || A numerical value has exceeded the limitations of a [[Variable Types|variable type]]. || none
|-
| 7 || Out of memory || A module has exceeded the 64K memory limitation of QB. Try breaking the code up to smaller modules.|| no limit
|-
| 8 || Label not defined || [[GOTO]] or [[GOSUB]] tries to branch to a label that doesn't exist. || none
|-
| 9 || Subscript out of range || An [[Arrays|array's]] [[UBOUND|upper]] or [[LBOUND|lower]] [[DIM|dimensioned]] boundary has been exceeded. || none
|-
| 10 || Duplicate definition || You can't define a variable twice with [[DIM]], the first time a variable is used it is also defined. || none
|-
| 11 || Division by zero || You cannot divide any value by zero! Even using [[MOD]]. || none
|-
| 12 || Illegal in direct mode || A statement (like [[DIM]]) in the Immediate window wasn't allowed. || N/A
|-
| 13 || Type mismatch || A [[SUB]] or [[FUNCTION]] parameter does not match the procedure Declaration. || none
|-
| 14 || Out of [[STRING|string]] space || A module has exceeded the 32767 text character limit. Use SUB print procedures. || no limit.
|-
| 16 || String formula too complex. || A string formula was too long or [[INPUT]] statement requested more than 15 strings || N/A
|-
| 17 || Cannot continue. || The program while debugging has changed in a way that it cannot continue. || no debug
|-
| 18 || Function not defined. || The function used by the program must be defined. Did you include the .bi file while using a library? || none
|-
| 19 || No [[RESUME]]. || Use [[RESUME]] at the end of the [[ON ERROR]] [[GOTO]] routine, not [[RETURN]]. || none
|-
| 20 || RESUME without error. || [[RESUME]] can only be used in an error handler called by [[ON ERROR]] [[GOTO]]. || none
|-
| 24 || Device timeout. || Use DS0 (DSzero)in the [[OPEN COM]] statement to avoid modem timeouts. || none
|-
| 25 || Device fault. || Device not connected or does not exist. || none
|-
| 26 || [[FOR]] without [[NEXT]]. || Missing loop end or look for a missing [[END IF]] or [[END SELECT]] statement. || none
|-
| 27 || Out of paper || A printer paper error when using [[LPRINT]]. || none
|-
| 29 || [[WHILE]] without [[WEND]]. || [[WEND]] must end a [[WHILE]] loop. Otherwise look for missing [[END IF]] or [[END SELECT]] || none
|-
| 30 || [[WEND]] without [[WHILE]] || Missing loop end or look for a missing [[END IF]] or [[END SELECT]] statement. || none
|-
| 33 || Duplicate label || Line numbers or labels cannot be used twice in a procedure. || none
|-
| 35 || Subprogram not defined. || Often occurs when the Quickbasic Library is not used with [[CALL ABSOLUTE]] or [[INTERRUPT]] or a [[SUB]] or [[FUNCTION]] procedure has not been created for a [[CALL]]. || none
|-
| 37 || Argument-count mismatch || The number of sub-procedure [[parameters]] do not match the call. || none
|-
| 38 || Array not defined || [[Arrays]] using more than 10 elements must be [[DIM|DIMensioned]]. || none
|-
| 40 || Variable required. || [[LEN]] cannot read literal numerical values. A [[GET]] or [[PUT]] statement must specify a variable when reading or writing a file opened in [[BINARY]] mode. || none
|-
| 50 || [[FIELD]] overflow. || A [[FIELD]] statement tried to allocate more bytes than were specified for the record length of a random access file. || none
|-
| 51 || Internal error. || An internal malfunction occured in QuickBASIC or QB64. || none
|-
| 52 || Bad file name or number. || The filename must follow the rules for filenames in the OS and use filenumbers from 1 and 255. Use [[FREEFILE]] to avoid duplicate [[OPEN]] file numbers. || none
|-
| 53 || File not found. || File not in current directory or path. Use [[_FILEEXISTS]] to verify file names. || none
|-
| 54 || Bad file mode. || File access mode does not match a current [[OPEN]] file procedure. || none
|-
| 55 || File already open. || [[CLOSE]] a file to open it in a different mode. || none
|-
| 56 || FIELD statement active. || '''WRITEME''' || N/A
|-
| 57 || Device I/O error. || '''WRITEME''' || N/A
|-
| 58 || File already exists. || The filename specified in the [[NAME]] statement was identical to a file that already exists. || none
|-
| 59 || Bad record length. || Record length exceeds 32767 bytes or is 0 || none
|-
| 61 || Disk full. || The amount of data to write to the disk was more than the free space available, remove some files you don't need and try again. || none
|-
| 62 || Input past end of file. || Check for the end of file with [[EOF]] when reading from a file. || none
|-
| 63 || Bad record number. || [[GET]] read exceeds number of records in a [[RANDOM]] file. || none
|-
| 64 || Bad file name || File name contains illegal characters or exceeds 12 characters. || none
|-
| 67 || Too many files || Over 15 files are open in Qbasic. || none
|-
| 68 || Device unavailable. || Device does not exist, busy or not connected. || none
| 70 || Permission denied || A file or port is in use on a network, blocked, read only or locked. || none
|-
| 71 || Disk not ready. || Disk is busy or has no media. || none
|-
| 72 || Disk-media error. || Improper media format or bad data. || none
|-
| 73 || Feature unavailable. || Based on the DOS version available. || none
|-
| 74 || Rename across disks. || '''WRITEME''' || N/A
|-
| 75 || Path/File access error. || File or path cannot be accessed. || none
|-
| 76 || Path not found. || Path is not access-able or does not exist. Use [[_DIREXISTS]] to check paths.|| none
|-
| 97 || (no error message) || Can be used to trigger an error trap event with [[ERROR]] 97, nothing else will cause this error, so create your own errors for [[ON ERROR]]. || none
|-
|}
<center>'''N/A means Not Available or Not Applicable to QB64.'''</center>
{| border="1" cellpadding="2"
! colspan="6"|QB64 Error Codes
|-
! Code || Description || Common cause/resolution || QB Differences
|-
| 258 || Invalid handle || Zero or bad handle values cannot be used by the QB64 procedure creating the error. || N/A
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Game Controller Input (Joystick): ==
* [[_AXIS]] (function) {{text|returns a [[SINGLE]] value between -1 and 1 indicating the maximum distance from device axis center 0.}}
* [[_BUTTON]] (function) {{text|returns -1 when a device button is pressed and 0 when button is released.}}
* [[_BUTTONCHANGE]] (function) {{text|returns -1 when a device button has been pressed and 1 when released. Zero indicates no change.}}
* [[_DEVICE$]] (function) {{text|returns a [[STRING]] expression listing a designated numbered input device name and types of input.}}
* [[_DEVICEINPUT]] (function) {{text|returns the [[_DEVICES]] number of an [[_AXIS]], [[_BUTTON]] or [[_WHEEL]] event.}}
* [[_DEVICES]] (function) {{text|returns the number of input devices found on a computer system including the keyboard and mouse.}}
* [[_LASTAXIS]] (function) {{text|returns the number of axis available on a specified number device listed by [[_DEVICE$]].}}
*[[_LASTBUTTON]] (function) {{text|returns the number of buttons available on a specified number device listed by [[DEVICE$]].}}
* [[_LASTWHEEL]] (function) {{text|returns the number of scroll wheels available on a specified number device listed by [[_DEVICE$]].}}
* [[_MOUSEMOVEMENTX]] (function) {{text|returns the relative horizontal position of the mouse cursor compared to the previous position.}}
* [[_MOUSEMOVEMENTY]] (function) {{text|returns the relative vertical position of the mouse cursor compared to the previous position.}}
* [[_WHEEL]] (function) {{text|returns -1 when a device wheel is scrolled up and 1 when scrolled down. Zero indicates no activity.}}
* [[ON STRIG(n)]] (event statement) {{text|directs program flow upon a button press event of a game controller device.}}
* [[STICK]] (function) {{text|returns the directional axis coordinate values from 1 to 254 of game port (&H201) or USB controller devices.}}
* [[STRIG]] (function) {{text|returns the True or False button press status of game port (&H201) or USB controller devices.}}
* [[STRIG(n)]] (statement) {{text|enables, suspends or disables event trapping of STRIG button return values.}}
<center> See also: [[Windows_Libraries#Game_Pad|Windows Game Pad]] or [[SDL_Libraries#Joystick|SDL Joystick]] Libraries.</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
==Graphic GL Special Commands==
<center>[http://www.qb64.net/wiki/index.php/Keyword_Reference_-_Alphabetical#glA Full list of QB64 _GL prefixed statements and functions] </center>
* [[_COPYIMAGE]] (function) {{text|can copy a software surface to a hardware accelerated surface handle using mode 33.}}
* [[_DISPLAY]] (statement) {{text|renders surfaces visible in the [[_DISPLAYORDER]] previously set in the QB64GL program.}}
* [[_DISPLAYORDER]] (GL statement) {{text|sets the rendering order of _SOFTWARE, _HARDWARE and _GLRENDER with [[_DISPLAY]].}}
* [[_LOADIMAGE]] (function) {{text|can load images as hardware accelerated using mode 33.}}
* [[_MOUSESHOW]] (statement) {{text|a special string parameter after command in GL allows some special cursor shapes.}}
* [[_PUTIMAGE]] (statement) {{text|can place GL surfaces and allows the _SMOOTH action to blend stretched surfaces.}}
* [[_MEMFILL]] (statement) {{text|fills a designated memory block OFFSET with a certain SIZE and TYPE of value.}}
* [[_MEMFREE]] (statement) {{text|frees a designated memory block in a program. Only free memory once!}}
* [[_MEMGET]] (statement) {{text|reads a designated value from a designated memory OFFSET}}
* [[_MEMGET (function)]] {{text|returns a value from a designated memory block and OFFSET using a designated variable [[TYPE]].}}
* [[_MEMIMAGE]] (function) {{text|returns a [[_MEM]] block referring to a designated image handle's memory}}
* [[_MEMNEW]] (function) {{text|allocates new memory with a designated SIZE and returns a [[_MEM]] block referring to it.}}
* [[_MEMPUT]] (statement) {{text|places a designated value into a designated memory [[_OFFSET]]}}
* [[_OFFSET (function)]] {{text|returns the memory offset of a variable when used with [[DECLARE LIBRARY]] or [[_MEM]] only.}}
* [[_OFFSET]](%& numerical type) {{text|can be used store the value of an offset in memory when using [[DECLARE LIBRARY]] or [[_MEM]] only.}}
<center>'''Functions and statements using QB64's emulated 16 bit memory'''</center>
* [[DEF SEG]] (statement) {{text|defines the segment address in memory.}}
* [[FRE]] (function) {{text|returns the amount of Memory available in bytes to running programs. NOT IMPLEMENTED!}}
* [[PEEK]] (function) {{text|returns the value that is contained at a certain memory address offset.}}
* [[POKE]] (statement) {{text|sets the value of a specified memory address offset.}}
* [[SADD]] (function) {{text|returns the address of a STRING variable as an offset from the current data segment.}}
* [[SETMEM]] (function) {{text|is used to increase, decrease or return the current "far heap" byte size. NOT IMPLEMENTED!}}
* [[VARPTR]] (function) {{text|returns an [[INTEGER]] value that is the offset pointer of the memory address within it's [[segment]].}}
* [[VARPTR$]] (function) {{text|returns a STRING representation of a variable's memory address value}}
* [[VARSEG]] (function) {{text|returns an [[INTEGER]] value that is the [[segment]] part of a variable or array memory address.}}
<center>See also: [[Screen Memory]] or [[Using _OFFSET]]</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Metacommands ==
:Metacommands are commands that affect a program globally after they are in used. Error checking can be turned [[OFF]] or [[ON]].
<center>'''QB64 [[Metacommand]]s do NOT allow commenting or [[REM]]!'''</center>
* [[$CHECKING]]:OFF/ON {{text|(QB64 only) turns event and error checking ON and OFF. ON (default) can only be used after it is OFF.}}
* [[$CONSOLE]] {{text|creates a console window throughout the program.}}
* [[$SCREENHIDE]] {{text|hides the program window throughout the program until [[$SCREENSHOW]] is used.}}
* [[$SCREENSHOW]] {{text|displays the main program window throughout the program only after [[$SCREENHIDE]] or [[_SCREENHIDE]] has been used.}}
<center>'''Qbasic [[Metacommand]]s do not require commenting or [[REM]] in QB64!'''</center>
* '[[$DYNAMIC]] {{text|defines that all arrays are dynamic or changeable in size using [[DIM]] or [[REDIM]].}}
* '[[$INCLUDE]]: 'filename$' {{text|includes a text library file with procedures to be used in a program. Comment both sides of file name also.}}
* '[[$STATIC]] {{text|defines that all arrays are static or unchangeable in size using [[DIM]].}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Mouse Input: ==
* [[_AXIS]] (function) {{text|returns a [[SINGLE]] value between -1 and 1 indicating the maximum distances from device center 0.}}
* [[_BUTTON]] (function) {{text|returns -1 when a device button is pressed and 0 when button is released. 2 is the mouse center or scroll button}}
* [[_BUTTONCHANGE]] (function) {{text|returns -1 when a device button has been pressed and 1 when released. Zero indicates no change.}}
* [[_DEVICE$]] (function) {{text|returns a [[STRING]] expression listing device names and input types of system input devices.}}
* [[_DEVICEINPUT]] (function) {{text|returns the [[_DEVICES]] number of an [[_AXIS]], [[_BUTTON]] or [[_WHEEL]] event. Mouse is normally _DEVICEINPUT(2).}}
* [[_DEVICES]] (function) {{text|returns the number of input devices found on a computer system. The mouse is normally device 2.}}
* [[_EXIT (function)]] {{text|prevents a program user exit and indicates if a user has clicked the close X window button or CTRL + BREAK.}}
* [[_LASTAXIS]] (function) {{text|returns the number of axis available on a specified number device listed by [[_DEVICE$]].}}
*[[_LASTBUTTON]] (function) {{text|returns the number of buttons available on a specified number device listed by [[DEVICE$]].}}
* [[_LASTWHEEL]] (function) {{text|returns the number of scroll wheels available on a specified number device listed by [[_DEVICE$]].}}
* [[_MOUSEBUTTON]] (function) {{text|returns whether a specified mouse button number has been clicked. 3 is the mouse center or scroll button}}
* [[_MOUSEHIDE]] (statement) {{text|hides the OS mouse pointer from view.}}
* [[_MOUSEINPUT]] (function) {{text|must be used to monitor and read all changes in the mouse status.}}
* [[_MOUSEMOVE]] (statement) {{text|moves the mouse cursor pointer to a designated coordinate.}}
* [[_MOUSEMOVEMENTX]] (function) {{text|returns the relative horizontal position of the mouse cursor.}}
* [[_MOUSEMOVEMENTY]] (function) {{text|returns the relative vertical position of the mouse cursor.}}
* [[_MOUSESHOW]] (statement) {{text|displays(default) the mouse cursor after it has been hidden.}}
* [[_MOUSEWHEEL]] (function) {{text|returns a positive or negative count the mouse scroll wheel clicks since the last read.}}
* [[_MOUSEX]] (function) {{text|indicates the current horizontal position of the mouse pointer.}}
* [[_MOUSEY]] (function) {{text|indicates the current vertical position of the mouse pointer.}}
* [[_SCREENCLICK]] {{text|simulates clicking the mouse at a position on the screen to get focus.}}
* [[_WHEEL]] (function) {{text|returns -1 when a device wheel is scrolled up and 1 when scrolled down. Zero indicates no activity.}}
* [[CALL ABSOLUTE|CALL ABSOLUTE]] (statement) {{text|used to access Interrupt vector &H33 to work with the mouse. Functions 0 to 3 implemented.}}
* [[INTERRUPT]] (statement) {{text|used to access Interrupt vector &H33 to work with the mouse. Functions 0 to 3 implemented. }}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Numerical Manipulation and Conversion: ==
* [[&B]] [[Binary]] {{text|base number prefix used in QB64 to represent [[_BIT]]s on as 1 or off as 0.}}
* [[_CV]] (function) {{text|used to convert [[_MK$]] [[ASCII]] [[STRING|string]] values to specified numerical value types.}}
* [[_MK$]] (function) {{text|converts a specified numerical type into an [[ASCII]] [[STRING|string]] value that must be converted back using [[_CV]].}}
* [[_PRESERVE]] ([[REDIM]] action) {{text|preserves the current contents of an [[arrays|array]], when re-dimensioning it.}}
* [[_UNSIGNED]] {numerical [[TYPE|type]]) {{text|defines a numerical value as being positive only using QB64.}}
* [[ABS]] (function) {{text|returns the the positive value of a variable or literal numerical value.}}
* [[ASC]] (function) {{text|returns the [[ASCII]] code number of a certain [[STRING]] text character or a keyboard press.}}
* [[CDBL]] (function) {{text|converts a numerical value to the closest [[DOUBLE]]-precision value.}}
* [[CDECL]] (statement) {{text|used to indicate that the external procedure uses the C-language argument order.}}
* [[CHR$]] (function) {{text|returns the character associated with a certain [[ASCII]] character code as a [[STRING]].}}
* [[CINT]] (function) {{text|returns the closest [[INTEGER]] value of a number.}}
* [[CLEAR]] (statement) {{text|clears all variable values to 0 or null [[STRING|strings]] and closes all open files.}}
* [[CLNG]] (function) {{text| rounds decimal point numbers up or down to the nearest [[LONG]] integer value.}}
* [[CSNG]] (function) {{text|converts a numerical value to the closest [[SINGLE]]-precision number.}}
* [[CVD]] (function) {{text|converts [[STRING]] values to [[DOUBLE]] numerical values.}}
* [[CVDMBF]] (function) {{text|converts a 8-byte Microsoft Binary format [[STRING|string]] value to a [[DOUBLE]] precision number.}}
* [[CVSMBF]] (function) {{text|converts a 4-byte Microsoft Binary format [[STRING|string]] value to a [[SINGLE]]-precision number.}}
* [[DIM]] (statement) {{text|used to declare a variable type or dimension a [[STATIC]] array.}}
* [[ERASE]] (array statement) {{text|clears a [[STATIC]] array of all values and totally removes a [[$DYNAMIC]] array.}}
* [[HEX$]] (function) {{text|converts decimal [[INTEGER]] values to hexadecimal [[STRING]] number values. Prefix values with [[&H]]}}
* [[INT]] (function) {{text|rounds a numeric value down to the next whole number or [[INTEGER]] value.}}
* [[LEN]] (function) {{text|returns the byte size of strings or numerical variables.}}
* [[OCT$]] {{text|converts decimal numerical values to Octal [[STRING]] number values. Prefix values with [[&O]]}}
* [[RANDOMIZE]] (statement) {{text|seeds the [[RND]] random number generation sequence.}}
* [[REDIM]] (statement) {{text|re-dimensions the number of elements in a [[$DYNAMIC|dynamic]](resizeable) [[arrays|array]].}}
* [[RND]] (function) {{text|returns a randomly generated number from 0 to .9999999}}
* [[SGN]] (function) {{text|returns the sign as -1 for negative, zero for 0 and 1 for positive numerical values.}}
* [[STR$]] (function) {{text|converts a numerical value to a [[STRING]] value.}}
* [[SWAP]] (statement) {{text|trades the values of two numerical types or [[STRING|strings]].}}
* [[VAL]] (function) {{text|converts number [[STRING|strings]] into numerical values until it runs into a non-numeric character.}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Port Input and Output (COM and LPT): ==
* [[COM(n)]] (statement) {{text|used in an OPEN COM statement to open "COM1" or "COM2".}}
* [[GET]] (file I/O statement) {{text|reads port data data by byte or record positions.}}
* [[INP]] (function) {{text|returns a value from port hardware address. NOT IMPLEMENTED for port access! }}
* [[LOC]] (function) {{text|finds the current file location or size of a [[COM]] port receive buffer.}}
* [[ON COM(n)]] (event statement) {{text|branches to a line number or label when there is a value in the serial port specified.}}
* [[OPEN COM]] (statement) {{text|opens a computer serial COMmunications port.}}
* [[OUT]] (statement) {{text|sends values to register or port hardware addresses. Use with care! NOT IMPLEMENTED for port access!}}
* [[PRINT (file statement)]] {{text|writes text and numerical data to a port transmit buffer.}}
* [[PUT]] (file I/O statement) {{text|writes data into a [[RANDOM]] or [[BINARY]] port by byte or record position.}}
<center>'''See [[Port Access Libraries]] for other ways to access COM and LPT ports.'''.</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
==Print formatting==
* [[LPRINT USING]] (statement) {{text|prints template formatted [[STRING]] text to an LPT or USB printer page.}}
* [[PRINT USING]] (statement) {{text|prints template formatted [[STRING]] text to the screen.}}
* [[PRINT USING (file statement)]] {{text|prints template formatted [[STRING]] text to a text file.}}
{{PrintUsing}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
==Printer Output (LPT and USB):==
* [[_PRINTIMAGE]] (statement) {{text|prints an image stretched to the size of the paper setting of an LPT or USB printer.}}
* [[LPOS]] (function) {{text|returns the current parallel(LPT) printer head position.}}
* [[LPRINT]] (statement) {{text|prints text to an LPT or USB printer page.}}
* [[LPRINT USING]] (statement) {{text|prints template formatted [[STRING]] text to an LPT or USB printer page.}}
<center>'''QB64 will use the default system printer selected. [[_PRINTIMAGE]] images will be stretched to the paper size setting.'''</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Program Flow and Loops: ==
* [[_DEST]] (statement) {{text|sets the current write image or page. All graphics will go to this image.}}
* [[_DEST (function)]] {{text|returns the current write destination image or page.}}
*[[_EXIT (function)]] {{text|prevents a user exit and indicates if a user has clicked the close X window button or CTRL + BREAK.}}
* [[_SOURCE]] (statement) {{text|establishes the image SOURCE using a designated image handle}}
* [[_SOURCE (function)]] {{text|returns the present image _SOURCE handle value.}}
* [[_SHELLHIDE]] (function) {{text|returns the code sent by a program exit using [[END]] or [[SYSTEM]] followed by an [[INTEGER]] value.}}
* [[CALL]] (statement) {{text|sends code execution to a subroutine procedure in a program.}}
* [[CALLS]] (statement) {{text|transfers control to a procedure written in a different programming language. NOT IMPLEMENTED!}}
* [[CASE]] ([[SELECT CASE]] statement) {{text|used within a SELECT CASE block to specify a conditional value of the compared variable.}}
* [[CASE ELSE]] ([[SELECT CASE]] statement) {{text|used in a SELECT CASE block to specify an alternative to other CASE values.}}
* [[CASE IS]] ([[SELECT CASE]] statement) {{text|used within a SELECT CASE block to specify a conditional value of the compared variable.}}
* [[DO...LOOP]] (loop statement) {{text|used in programs to repeat code or return to the start of a procedure.}}
* [[ELSE]] (statement) {{text|used in [[IF...THEN]] statements to offer an alternative to other conditional statements.}}
* [[ELSEIF]] (statement) {{text|used in [[IF...THEN]] block statements to offer an alternative conditional statement.}}
* [[END]] (statement) {{text|ENDs a conditional block statement, a sub-procedure or ends the program with "Press any key..."}}
* [[END IF]] (IF statement end) {{text|ENDs an IF statement block.}}
* [[ERROR]] (error statement) {{text|used to simulate an error in a program.}}
* [[EXIT]] (statement) {{text|exits a loop, function or sub-procedure early.}}
* [[FOR...NEXT]] (statement) {{text|a counter loop procedure that repeats code a specified number of times.}}
* [[GOSUB]] (statement) {{text|send the program to a designated line label procedure in the main module or a [[SUB]] procedure.}}
* [[GOTO]] (statement) {{text|sends the program to a designated line number or label.}}
* [[IF...THEN]] (statement) {{text|a conditional flow statement or block of statements.}}
* [[LOOP]] {{text|end of a DO...LOOP procedure that repeats code until or while a condition is true.}}
* [[RESUME]] (error statement) {{text|an error statement that can return the program to the NEXT code line or a specific line number.}}
* [[RETURN]] (statement) {{text|a sub-procedure statement that returns the program to the code immediately after the procedure call.}}
* [[RUN]] (statement) {{text|clears and restarts the program currently in memory or executes another specified program.}}
* [[SELECT CASE]] (statement) {{text|determines the program flow by comparing the value of a variable to specific values.}}
* [[SHELL]] (DOS statement) {{text|directly accesses the Operating System's command line procedures.}}
* [[SLEEP]] (statement) {{text|stops program progression for a specific number of seconds or until a keypress is made.}}
* [[STEP]] (relational statement) {{text|is used to step through FOR loop values or use relative graphical coordinates.}}
* [[STOP]] (statement) {{text|is used when troubleshooting a program to stop the program at a specified code line.}}
* [[SYSTEM]] (statement) {{text|immediately exits a program and closes the program window.}}
* [[UNTIL]] (conditional statement) {{text|continues a DO LOOP procedure until a condition is true.}}
* [[WHILE]] (statement) {{text|continues a DO LOOP procedure while a condition is true.}}
* [[WHILE...WEND]] (statement) {{text|a loop procedure that repeats code while a condition is true.}}
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
== Sounds and Music using Sound Card: ==
* [[_SNDBAL]] (statement) {{text|attempts to set the balance or 3D position of a sound.}}
* [[_SNDCLOSE]] (statement) {{text|frees and unloads an open sound using a _SNDOPEN or _SNDCOPY handle.}}
* [[_SNDCOPY]] (function) {{text|copies a sound to a new handle so that two or more of the same sound can be played at once.}}
* [[_SNDGETPOS]] (function) {{text|returns the current playing position in seconds of a designated sound handle.}}
* [[_SNDLEN]] (function) {{text|returns the length of a sound in seconds of a designated sound handle.}}
* [[_SNDLIMIT]] (statement) {{text|stops playing a sound after it has been playing for a set number of seconds.}}
* [[_SNDLOOP]] (statement) {{text|loops the playing of a specified sound handle.}}
* [[_SNDOPEN]] (function) {{text|loads a sound file with certain capabilities and returns a handle value.}}
* [[_SNDPAUSE]] (statement) {{text|pauses a specified sound handle if it is playing.}}
* [[_SNDPAUSED]] (function) {{text|returns the pause status of a specified sound handle.}}
* [[_SNDPLAY]] (statement) {{text|plays a designated sound file handle.}}
* [[_SNDPLAYCOPY]] (statement) {{text|copies a sound, plays it and automatically closes the copy using a handle parameter}}
* [[_SNDPLAYFILE]] (statement) {{text|a simple command to play a sound file with limited options for SYNC and volume.}}
* [[_SNDPLAYING]] (function) {{text|returns whether a sound handle is being played.}}
* [[_SNDRATE]] (function) {{text|returns the sample rate frequency per second of the current computer's sound card.}}
* [[_SNDRAW]] (statement) {{text|plays sound wave sample frequencies created by a program.}}
* [[$SCREENHIDE]] (QB64 [[Metacommand]]) {{text|hides the program window throughout the program until [[$SCREENSHOW]] is used.}}
* [[_SCREENHIDE]] (statement) {{text|hides the main program window in a section of code until [[_SCREENSHOW]] is used.}}
* [[_SCREENIMAGE]] (function) {{text|creates an image of the current desktop and returns an image handle.}}
* [[_SCREENMOVE]] (statement) {{text|positions the program window on the desktop using designated coordinates or _MIDDLE.}}
* [[_SCREENPRINT]] (statement) {{text|simulates typing text into a Windows program using the keyboard.}}
* [[$SCREENSHOW]] (QB64 [[Metacommand]]) {{text|displays the main program window throughout the program after [[$SCREENHIDE]].}}
* [[_SCREENSHOW]] (statement) {{text|displays the main program window in a section of code after [[_SCREENHIDE]] has been used.}}
* [[_SCREENX]] (function) {{text|returns the current program window's upper left corner column position on the desktop.}}
* [[_SCREENY]] (function) {{text|returns the current program window's upper left corner row position on the desktop.}}
* [[_TITLE]] (statement) {{text|sets the program name [[STRING|string]] in the title bar of the program window.}}
* [[_WIDTH (function)]] {{text|returns the width of a [[_SCREENIMAGE]] handle to get the desktop resolution.}}
* [[SCREEN]] {{text|sets the screen mode of a program. No statement defaults the program to SCREEN 0 text mode.}}
<center>''See also:'' [[C_Libraries#Console_Window|Console Window]], [[SDL_Libraries#Window|SDL Frameless Window Library]], [[Windows_Libraries#Hot_Keys_.28maximize.29|Windows Hot Keys]] or [[Windows_Libraries#Focus|Focus on Program]].</center>
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
==QB64 Programming Symbols:==
<center>'''QB64 and QB Symbols:'''</center>
<center>''[Note: All symbols below can also be used inside of literal quoted strings except for quotation marks.]''</center>
:'''Print, Input or File Formatting'''
* [[Semicolon|; Semicolon]] after a [[PRINT]] stops the invisible cursor at end of the printed value. Can prevent screen rolling!
* [[Comma|, Comma]] after a [[PRINT]] tabs the invisible cursor past the end of the printed value.
* [[Quotation mark|" Quotation mark]] delimits the ends of a literal [[STRING]] value in a [[PRINT]], [[INPUT]] or [[LINE INPUT]] statement.
* [[Question mark|? Question mark]] is a shortcut substitute for the [[PRINT]] keyword. Will change to PRINT when cursor leaves the code line.
:'''Program Code Markers'''
* [[Apostrophe|' Apostrophe]] denotes a program comment, to ignore a code line or a Qbasic [[Metacommand]]. Same as using [[REM]].
* [[Comma|, Comma]] is a statement variable or [[DATA]], [[SUB]] or [[FUNCTION]] parameter separator.
* [[Colon|: Colon]]s can be used to separate two procedure statements on one code line.
* [[Dollar_Sign|$ Dollar sign]] prefix denotes a Qbasic [[Metacommand]]. Only '''QB64''''s event [[$CHECKING]] should NOT be commented.
* [[Parenthesis|( ) Parenthesis]] enclose a math or conditional procedure order, [[SUB]] or [[FUNCTION]] parameters or to pass by value.
* [[+|+ Plus]] [[concatenation]] operator MUST be used to combine literal string values in a variable definition.
* [[Quotation mark|" Quotation mark]] delimits the ends of a literal [[STRING]] value. Use [[CHR$]](34) to insert quotes in a text [[STRING]].
* [[REM]] or apostrophe are used to make comments or ignore code or precedes a [[Metacommand]].
* [[Underscore|_ Underscore]] at the end of a code line is used to continue a line of code to the next program line in '''QB64 only'''.
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p>
:'''Variable Name Type Suffixes'''
* [[STRING|$ STRING]] text character type: 1 byte
* [[SINGLE|! SINGLE]] floating decimal point numerical type (4 bytes)
* [[DOUBLE|# DOUBLE]] floating decimal point numerical type (8 bytes)
* [[_FLOAT|## _FLOAT]] '''QB64''' decimal point numerical type (32 bytes)
* [[_UNSIGNED|~ _UNSIGNED]] '''QB64''' [[INTEGER|whole]] positive numerical type when it precedes the 6 numerical suffixes below:
* [[INTEGER|% INTEGER]] [[INTEGER|whole]] numerical type (2 bytes)
* [[LONG|& LONG]] [[INTEGER|whole]] numerical type (4 bytes}
* [[_INTEGER64|&& _INTEGER64]] '''QB64''' [[INTEGER|whole]] numerical type (8 bytes)
* [[_BIT|` _BIT]] '''QB64''' [[INTEGER|whole]] numerical type (1 bit)(Key below tilde(~) or [[CHR$]](96))
* [[_BYTE|%% _BYTE]] '''QB64''' [[INTEGER|whole]] numerical type (1 byte)