mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-03 10:01:21 +00:00
Merge pull request #118 from QB64Team/Fix-ResizingScreen
Fixes resizing screen and tweaks help system
This commit is contained in:
commit
e3b9c468fc
|
@ -2,11 +2,15 @@ The [[DIM]] statement is used to declare a variable or a list of variables as a
|
||||||
|
|
||||||
|
|
||||||
{{PageSyntax}}
|
{{PageSyntax}}
|
||||||
::''Syntax 1:'' [[DIM]] [{{KW|SHARED}}] ''variable''[{suffix| {{KW|AS}} ''type''}] [, ''variable2''...]]
|
::''To declare variables:''
|
||||||
|
:::[[DIM]] [{{KW|SHARED}}] ''variable''[{suffix| {{KW|AS}} [{{KW|_UNSIGNED}}] ''type''}] [, ''variable2''...]]
|
||||||
|
|
||||||
::''Syntax 2:'' [[DIM]] [{{KW|SHARED}}] ''array(lowest% [{{KW|TO}}) highest%])''[{suffix| {{KW|AS}} ''type''}] [, ''variable2''...]
|
::''To declare arrays:''
|
||||||
|
:::[[DIM]] [{{KW|SHARED}}] ''array([lowest% {{KW|TO}}] highest%])''[{suffix| {{KW|AS}} [{{KW|_UNSIGNED}}] ''type''}] [, ''variable2''...]
|
||||||
|
|
||||||
:'' '''QB64''' Syntax:'' [[DIM]] [{{KW|SHARED}}] ''variable''[{suffix| {{KW|AS}} [{{KW|_UNSIGNED}}] ''type''}] [, ''variable2''...]
|
::'' '''QB64''' Alternative Syntax:''
|
||||||
|
:::[[DIM]] [{{KW|SHARED}}] {{KW|AS}} [{{KW|_UNSIGNED}}] ''type'' ''variable'' [, ''variable2''...]
|
||||||
|
:::[[DIM]] [{{KW|SHARED}}] {{KW|AS}} [{{KW|_UNSIGNED}}] ''type'' ''array([lowest% {{KW|TO}}] highest%])'' [, ''array2(elements)''...]
|
||||||
|
|
||||||
|
|
||||||
{{PageDescription}}
|
{{PageDescription}}
|
||||||
|
@ -26,7 +30,8 @@ The [[DIM]] statement is used to declare a variable or a list of variables as a
|
||||||
** [[_FLOAT]] (or use variable suffix '''##''')
|
** [[_FLOAT]] (or use variable suffix '''##''')
|
||||||
** [[_OFFSET]] (or use variable suffix '''%&''')
|
** [[_OFFSET]] (or use variable suffix '''%&''')
|
||||||
** DIM AS [[_MEM]] (the _MEM type has no type suffix).
|
** DIM AS [[_MEM]] (the _MEM type has no type suffix).
|
||||||
* '''Note: When a variable has not been defined or has no type suffix, the value defaults to [[SINGLE]].'''
|
* '''Note: When a variable has not been defined or has no type suffix, the type defaults to [[SINGLE]].'''
|
||||||
|
* When using the '''AS type variable-list''' syntax, type symbols cannot be used.
|
||||||
* When the [[$DYNAMIC]] metacommand or [[REDIM]] is used, array element sizes are changeable (not [[$STATIC]]).
|
* When the [[$DYNAMIC]] metacommand or [[REDIM]] is used, array element sizes are changeable (not [[$STATIC]]).
|
||||||
* Use [[REDIM]] instead of DIM to dimension arrays as dynamic without the {{KW|$DYNAMIC}} metacommand.
|
* Use [[REDIM]] instead of DIM to dimension arrays as dynamic without the {{KW|$DYNAMIC}} metacommand.
|
||||||
* Use [[REDIM]] [[_PRESERVE]] in '''QB64''' to retain previous array values when changing the size of an array.
|
* Use [[REDIM]] [[_PRESERVE]] in '''QB64''' to retain previous array values when changing the size of an array.
|
||||||
|
@ -84,6 +89,13 @@ x = 1 'x is a {{Cl|SINGLE}} variable
|
||||||
: ''Explanation:'' QB64 gives an error because the creation of the new variable would make referring to the existing one impossible.
|
: ''Explanation:'' QB64 gives an error because the creation of the new variable would make referring to the existing one impossible.
|
||||||
|
|
||||||
|
|
||||||
|
''Example 8:'' Using QB64's alternative syntax to declare multiple variables/arrays of the same type.
|
||||||
|
{{CodeStart}} '' ''
|
||||||
|
{{Cl|DIM}} {{Cl|AS}} {{Cl|LONG}} w, h, id, weight, index 'all of these variables are created as type LONG
|
||||||
|
{{Cl|DIM}} {{Cl|AS}} {{Cl|SINGLE}} x, y, z ' all of these variables are created as type SINGLE
|
||||||
|
{{CodeEnd}} '' ''
|
||||||
|
|
||||||
|
|
||||||
{{PageSeeAlso}}
|
{{PageSeeAlso}}
|
||||||
* [[_DEFINE]], [[_PRESERVE]]
|
* [[_DEFINE]], [[_PRESERVE]]
|
||||||
* [[REDIM]], [[TYPE]]
|
* [[REDIM]], [[TYPE]]
|
||||||
|
|
|
@ -3,23 +3,24 @@ A {{KW|REDIM}} statement can re-dimension one [[$DYNAMIC|dynamic]](flexible) [[A
|
||||||
|
|
||||||
{{PageSyntax}}
|
{{PageSyntax}}
|
||||||
:[[REDIM]] [{{KW|_PRESERVE}}] [{{KW|SHARED}}] ArrayName[''typesuffix''] ({''max_element''|low_element[{{KW|TO}} ''upper_element'', ...]}) [{{KW|AS}} {{KW|TYPE|Type}}]
|
:[[REDIM]] [{{KW|_PRESERVE}}] [{{KW|SHARED}}] ArrayName[''typesuffix''] ({''max_element''|low_element[{{KW|TO}} ''upper_element'', ...]}) [{{KW|AS}} {{KW|TYPE|Type}}]
|
||||||
|
:[[REDIM]] [{{KW|_PRESERVE}}] [{{KW|SHARED}}] [{{KW|AS}} {{KW|TYPE|Type}}] ArrayName({''max_element''|low_element[{{KW|TO}} ''upper_element'', ...]})
|
||||||
|
|
||||||
|
|
||||||
{{PageDescription}}
|
{{PageDescription}}
|
||||||
* Can change the number of elements in an array (the present array data is lost unless [[_PRESERVE]] is used).
|
* Can change the number of elements in an array (the present array data is lost unless [[_PRESERVE]] is used).
|
||||||
* Dynamic array elements can also be sized or resized by a program user's entry.
|
* Dynamic array elements can also be sized or resized by a program user's entry.
|
||||||
* The [[_PRESERVE]] option also allows the ''element'' range values to be moved upward or downward in '''QB64 only!'''
|
* The [[_PRESERVE]] option also allows the ''element'' range values to be moved upward or downward.
|
||||||
* {{Parameter|Array}} is the name of the array to be dimensioned or re-dimensioned.
|
* {{Parameter|Array}} is the name of the array to be dimensioned or re-dimensioned.
|
||||||
* {{Parameter|elements}} is the number of elements the array should hold. Use the optional [[TO]] {{Parameter|elements2}} to set a range.
|
* {{Parameter|elements}} is the number of elements the array should hold. Use the optional [[TO]] {{Parameter|elements2}} to set a range.
|
||||||
* '''Always use the same array [[TYPE]] suffix ([[AS]] type) or a new array type with the same name may be created.'''
|
* '''Always use the same array [[TYPE]] suffix ([[AS]] type) or a new array type with the same name may be created.'''
|
||||||
* REDIM cannot change [[$STATIC]] arrays created with a [[DIM]] statement unless the [[$DYNAMIC]] [[Metacommand]] is used!
|
* REDIM cannot change [[$STATIC]] arrays created with a [[DIM]] statement unless the [[$DYNAMIC]] [[Metacommand]] is used.
|
||||||
* To create a dynamic array use the [[$DYNAMIC]] metacommand or use [[REDIM]] rather than [[DIM]] when first creating the array.
|
* To create a dynamic array use the [[$DYNAMIC]] metacommand or use [[REDIM]] rather than [[DIM]] when first creating the array.
|
||||||
* Use REDIM [[_PRESERVE]] to change the range or number of array elements without losing the remaining elements. Data may move up or down to accommodate those boundary changes.
|
* Use REDIM [[_PRESERVE]] to change the range or number of array elements without losing the remaining elements. Data may move up or down to accommodate those boundary changes.
|
||||||
* '''REDIM [[_PRESERVE]] cannot change the number of array dimensions or type!'''
|
* '''REDIM [[_PRESERVE]] cannot change the number of array dimensions or type.'''
|
||||||
* [[$DYNAMIC|Dynamic]] arrays MUST be [[REDIM]]ensioned if [[ERASE]] or [[CLEAR]] are used to clear the arrays as they no longer exist.
|
* [[$DYNAMIC|Dynamic]] arrays MUST be [[REDIM]]ensioned if [[ERASE]] or [[CLEAR]] are used to clear the arrays as they no longer exist.
|
||||||
* When [[AS]] is used to declare the type, use [[AS]] to retain that type or it will change to [[SINGLE]]!
|
* When [[AS]] is used to declare the type, use [[AS]] to retain that type or it will change to [[SINGLE]]!
|
||||||
* '''NOTE: Many Qbasic keyword variable names CAN be used with a [[STRING]] suffix($) ONLY! You CANNOT use them without the suffix, use a numerical suffix or use [[DIM]], [[REDIM]], [[_DEFINE]], [[BYVAL]] or [[TYPE]] variable [[AS]] statements!'''
|
* '''Warning! Do not use negative array upper bound index values as OS access or "Out of Memory" [[ERROR Codes|errors]] will occur.'''
|
||||||
* '''Warning! Do not use negative array upper bound index values as OS access or "Out of Memory" [[ERROR Codes|errors]] will occur!'''
|
* When using the '''AS type variable-list''' syntax, type symbols cannot be used.
|
||||||
|
|
||||||
|
|
||||||
''Example 1:'' The [[$DYNAMIC]] Metacommand allows an array to be re-sized using [[DIM]] and REDIM.
|
''Example 1:'' The [[$DYNAMIC]] Metacommand allows an array to be re-sized using [[DIM]] and REDIM.
|
||||||
|
|
|
@ -4,12 +4,14 @@ The '''SHARED''' statement allows variables to be passed automatically to any [[
|
||||||
|
|
||||||
{{PageSyntax}}
|
{{PageSyntax}}
|
||||||
:: DIM SHARED Qt AS STRING * 1
|
:: DIM SHARED Qt AS STRING * 1
|
||||||
|
:: DIM SHARED AS STRING * 1 Qt
|
||||||
|
|
||||||
|
|
||||||
* [[DIM]]ensioned variables are shared with all procedures in the program module.
|
* [[DIM]]ensioned variables are shared with all procedures in the program module.
|
||||||
* When used with [[DIM]] in the main module, it eliminates the need to pass a parameter variable to a [[SUB]] or [[FUNCTION]].
|
* When used with [[DIM]] in the main module, it eliminates the need to pass a parameter variable to a [[SUB]] or [[FUNCTION]].
|
||||||
* Use [[COMMON SHARED]] to share a list of variable values with sub-procedures or other modules. See also: [[COMMON]]
|
* Use [[COMMON SHARED]] to share a list of variable values with sub-procedures or other modules. See also: [[COMMON]]
|
||||||
* SHARED ('''without [[DIM]]''') can share a list of variables inside of [[SUB]] or [[FUNCTION]] procedures with the main module only.
|
* SHARED ('''without [[DIM]]''') can share a list of variables inside of [[SUB]] or [[FUNCTION]] procedures with the main module only.
|
||||||
|
* When using the '''AS type variable-list''' syntax, type symbols cannot be used.
|
||||||
:'''Note: SHARED variables in sub-procedures will not be passed to other sub-procedures, only the main module.'''
|
:'''Note: SHARED variables in sub-procedures will not be passed to other sub-procedures, only the main module.'''
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,31 +1,40 @@
|
||||||
'''TYPE''' definitions are used to create variables that can hold more than one variable type of a fixed byte length.
|
'''TYPE''' definitions are used to create variables that can hold more than one element.
|
||||||
|
|
||||||
|
|
||||||
{{PageSyntax}}
|
{{PageSyntax}}
|
||||||
::'''TYPE''' typename
|
::'''TYPE''' typename
|
||||||
|
::: element-name1 AS type
|
||||||
|
::: element-name2 AS type
|
||||||
|
::: .
|
||||||
|
::: .
|
||||||
|
::: .
|
||||||
|
::: element-nameN AS type
|
||||||
|
::'''END TYPE'''
|
||||||
|
|
||||||
::.
|
|
||||||
|
|
||||||
::. variable(s) AS type
|
|
||||||
|
|
||||||
::.
|
|
||||||
|
|
||||||
|
::'''TYPE''' typename
|
||||||
|
::: AS type element-list1
|
||||||
|
::: AS type element-list2
|
||||||
|
::: .
|
||||||
|
::: .
|
||||||
|
::: .
|
||||||
|
::: AS type element-listN
|
||||||
::'''END TYPE'''
|
::'''END TYPE'''
|
||||||
|
|
||||||
|
|
||||||
* Typename is an undefined type name holder as it can hold any variable types.
|
* Typename is an undefined type name holder as it can hold any variable types.
|
||||||
* TYPE definitions should be placed in the main module before the start of the program code execution.
|
* TYPE definitions are usually placed in the main module before the start of the program code execution.
|
||||||
* TYPE definitions CAN be placed in [[SUB]] or [[FUNCTION]] procedures using QB64 only!
|
* TYPE definitions cam also be placed in [[SUB]] or [[FUNCTION]] procedures.
|
||||||
* TYPE definitions cannot contain Array variables! Arrays can be [[DIM]]ensioned as a TYPE definition.
|
* TYPE definitions cannot contain Array variables. Arrays can be [[DIM]]ensioned as a TYPE definition.
|
||||||
* TYPE definitions cannot be inside of another TYPE definition, but variables can be defined AS another type.(See Example 3)
|
* TYPE definitions cannot be inside of another TYPE definition, but variables can be defined AS another type.(See Example 4)
|
||||||
* TYPE definitions must be ended with [[END TYPE]].
|
* TYPE definitions must be ended with [[END TYPE]].
|
||||||
* A TYPE variable MUST be assigned to the type after it is defined. Array variables are allowed.
|
* A TYPE variable must be assigned to the type after it is defined. Array variables are allowed.
|
||||||
* Type variables must be defined in every SUB or FUNCTION unless the type variable is [[DIM]]ensioned as [[SHARED]].
|
* Type variables must be defined in every SUB or FUNCTION unless the type variable is [[DIM]]ensioned as [[SHARED]].
|
||||||
* Type variables use DOT variable names to read or write specific values. They do not use type suffixes as they can hold ANY variable type values! The name before the dot is the one you defined after the type definition and the name after is the variable name used inside of the TYPE. The name of the dimensioned type variable alone can be used to [[PUT]] # or [[GET]] # all of the data at once!
|
* Type variables use DOT variable names to read or write specific values. They do not use type suffixes as they can hold ANY variable type values! The name before the dot is the one you defined after the type definition and the name after is the variable name used inside of the TYPE. The name of the dimensioned type variable alone can be used to [[PUT]] # or [[GET]] # all of the data at once!
|
||||||
* Once the TYPE variable is created you can find the record or byte size by using [[LEN]](typevariable).
|
* Once the TYPE variable is created you can find the record or byte size by using [[LEN]](typevariable).
|
||||||
* TYPE definitions can also be placed in [[$INCLUDE]] .BI text files such as [[QB.BI]] is used by [[INTERRUPT]] and [[INTERRUPTX]].
|
* TYPE definitions can also be placed in [[$INCLUDE]] .BI text files such as [[QB.BI]] is used by [[INTERRUPT]] and [[INTERRUPTX]].
|
||||||
* '''[[_BIT]] is not currently supported in User Defined [[TYPE]]s'''.
|
* You can mix the '''element-name AS type''' syntax with the '''AS type element-list''' syntax in the same TYPE block.
|
||||||
* '''NOTE: Many Qbasic keyword variable names CAN be used with a [[STRING]] suffix($) ONLY! You CANNOT use them without the suffix, use a numerical suffix or use [[DIM]], [[REDIM]], [[_DEFINE]], [[BYVAL]] or [[TYPE]] variable [[AS]] statements!'''
|
* '''[[_BIT]] is not supported in User Defined [[TYPE]]s'''.
|
||||||
|
|
||||||
|
|
||||||
{{DataTypeTable}}
|
{{DataTypeTable}}
|
||||||
|
@ -58,11 +67,20 @@
|
||||||
|
|
||||||
::::Each TYPE variable is designated as the DOT variable's suffix.
|
::::Each TYPE variable is designated as the DOT variable's suffix.
|
||||||
|
|
||||||
'''* Note: Omitting variables in the RegType definition can change other program variable values!'''
|
'''* Note: Omitting variables in the RegType definition can change other program variable values.'''
|
||||||
|
|
||||||
|
|
||||||
|
''Example 2:'' Simplifying the TYPE from Example 1 using the alternative TYPE syntax.
|
||||||
|
{{CodeStart}}
|
||||||
|
TYPE RegType
|
||||||
|
AS INTEGER AX, BX, CX, DX, BP, SI, DI, Flags, FS, ES
|
||||||
|
END TYPE
|
||||||
|
{{CodeEnd}}
|
||||||
|
:''Explanation:'' By using '''AS type element-list''' you reduce typing in your TYPE definition, while achieving the same results.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
''Example 2:'' Creating an addressbook database for a [[RANDOM]] file.
|
''Example 4:'' Creating an addressbook database for a [[RANDOM]] file.
|
||||||
{{CodeStart}}
|
{{CodeStart}}
|
||||||
TYPE ContactInfo
|
TYPE ContactInfo
|
||||||
First AS STRING * 10
|
First AS STRING * 10
|
||||||
|
@ -85,10 +103,10 @@
|
||||||
{{CodeEnd}}
|
{{CodeEnd}}
|
||||||
|
|
||||||
:''Explanation:'' Use the assigned type variable to find the RANDOM record length which is 118 bytes.
|
:''Explanation:'' Use the assigned type variable to find the RANDOM record length which is 118 bytes.
|
||||||
::::The DOT variable names consist of Contact as the prefix:
|
|
||||||
|
|
||||||
|
|
||||||
''Example 3:'' Defining a TYPE variable as another variable type from a previous TYPE definition in QB64.
|
|
||||||
|
''Example 4:'' Defining a TYPE variable as another variable type from a previous TYPE definition in QB64.
|
||||||
{{CodeStart}}
|
{{CodeStart}}
|
||||||
{{Cl|TYPE}} bar
|
{{Cl|TYPE}} bar
|
||||||
b {{Cl|AS}} {{Cl|STRING}} * 10
|
b {{Cl|AS}} {{Cl|STRING}} * 10
|
||||||
|
@ -108,7 +126,7 @@ PRINT foobar.a, foobar.c.b
|
||||||
{{CodeEnd}}
|
{{CodeEnd}}
|
||||||
|
|
||||||
|
|
||||||
''Example 4:'' A bitmap header information TYPE [[$INCLUDE]] File.
|
''Example 5:'' A bitmap header information TYPE [[$INCLUDE]] File.
|
||||||
{{TextStart}}
|
{{TextStart}}
|
||||||
' ********
|
' ********
|
||||||
'Bitmap.BI can be included at start of program
|
'Bitmap.BI can be included at start of program
|
||||||
|
@ -153,6 +171,7 @@ PRINT foobar.a, foobar.c.b
|
||||||
|
|
||||||
|
|
||||||
''See also:''
|
''See also:''
|
||||||
|
* [[DIM]], [[REDIM]]
|
||||||
* [[INTEGER]], [[SINGLE]], [[DOUBLE]]
|
* [[INTEGER]], [[SINGLE]], [[DOUBLE]]
|
||||||
* [[LONG]], [[_INTEGER64]], [[_FLOAT]]
|
* [[LONG]], [[_INTEGER64]], [[_FLOAT]]
|
||||||
* [[STRING]], [[_BYTE]], [[_BIT]], [[_OFFSET]]
|
* [[STRING]], [[_BYTE]], [[_BIT]], [[_OFFSET]]
|
||||||
|
|
|
@ -770,6 +770,7 @@ FUNCTION ide2 (ignore)
|
||||||
_PALETTECOLOR 13, IDETextColor, 0
|
_PALETTECOLOR 13, IDETextColor, 0
|
||||||
_PALETTECOLOR 14, IDEQuoteColor, 0
|
_PALETTECOLOR 14, IDEQuoteColor, 0
|
||||||
|
|
||||||
|
SCREEN , , 3, 0
|
||||||
'static background
|
'static background
|
||||||
COLOR 0, 7
|
COLOR 0, 7
|
||||||
_PRINTSTRING (1, 1), SPACE$(idewx)
|
_PRINTSTRING (1, 1), SPACE$(idewx)
|
||||||
|
@ -800,8 +801,10 @@ FUNCTION ide2 (ignore)
|
||||||
ideshowtext
|
ideshowtext
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
PCOPY 3, 0
|
||||||
|
|
||||||
_DISPLAY
|
_DISPLAY
|
||||||
_LIMIT 30
|
_LIMIT 15
|
||||||
LOOP WHILE _RESIZE
|
LOOP WHILE _RESIZE
|
||||||
|
|
||||||
IF retval = 1 THEN 'screen dimensions have changed and everything must be redrawn/reapplied
|
IF retval = 1 THEN 'screen dimensions have changed and everything must be redrawn/reapplied
|
||||||
|
@ -2442,177 +2445,155 @@ FUNCTION ide2 (ignore)
|
||||||
contextualhelp:
|
contextualhelp:
|
||||||
IdeContextHelpSF = 0
|
IdeContextHelpSF = 0
|
||||||
'identify word or character at current cursor position
|
'identify word or character at current cursor position
|
||||||
a$ = idegetline(idecy)
|
a2$ = UCASE$(getWordAtCursor$)
|
||||||
x = idecx
|
lnks = 0
|
||||||
IF LEN(a$) > 0 AND x = LEN(a$) + 1 THEN x = x - 1
|
lnks$ = findHelpTopic$(a2$, lnks, 0)
|
||||||
IF x <= LEN(a$) THEN
|
|
||||||
a2$ = UCASE$(getWordAtCursor$)
|
IF lnks THEN
|
||||||
'check if F1 is in help links
|
lnks$ = MID$(lnks$, 2, LEN(lnks$) - 2)
|
||||||
fh = FREEFILE
|
lnk$ = lnks$
|
||||||
OPEN "internal\help\links.bin" FOR INPUT AS #fh
|
IF lnks > 1 THEN
|
||||||
lnks = 0: lnks$ = CHR$(0)
|
'clarify context
|
||||||
DO UNTIL EOF(fh)
|
lnk$ = idef1box$(lnks$, lnks)
|
||||||
LINE INPUT #fh, l$
|
IF lnk$ = "C" THEN GOTO ideloop
|
||||||
c = INSTR(l$, ","): l1$ = LEFT$(l$, c - 1): l2$ = RIGHT$(l$, LEN(l$) - c)
|
END IF
|
||||||
IF a2$ = UCASE$(l1$) OR (qb64prefix_set = 1 AND LEFT$(l1$, 1) = "_" AND a2$ = MID$(l1$, 2)) THEN
|
|
||||||
IF INSTR(lnks$, CHR$(0) + l2$ + CHR$(0)) = 0 THEN
|
IF INSTR(UCASE$(lnk$), "PARENTHESIS") THEN GOTO ideloop
|
||||||
lnks = lnks + 1
|
|
||||||
IF l2$ = l1$ THEN
|
OpenHelpLnk:
|
||||||
lnks$ = CHR$(0) + l2$ + lnks$
|
|
||||||
ELSE
|
|
||||||
lnks$ = lnks$ + l2$ + CHR$(0)
|
Help_Back(Help_Back_Pos).sx = Help_sx 'update position
|
||||||
END IF
|
Help_Back(Help_Back_Pos).sy = Help_sy
|
||||||
END IF
|
Help_Back(Help_Back_Pos).cx = Help_cx
|
||||||
END IF
|
Help_Back(Help_Back_Pos).cy = Help_cy
|
||||||
LOOP
|
|
||||||
CLOSE #fh
|
top = UBOUND(back$)
|
||||||
|
|
||||||
IF lnks THEN
|
|
||||||
lnks$ = MID$(lnks$, 2, LEN(lnks$) - 2)
|
IF Back$(Help_Back_Pos) = lnk$ THEN Help_Back_Pos = Help_Back_Pos - 1: GOTO usenextentry2
|
||||||
lnk$ = lnks$
|
IF Help_Back_Pos < top THEN
|
||||||
IF lnks > 1 THEN
|
IF Back$(Help_Back_Pos + 1) = lnk$ THEN
|
||||||
'clarify context
|
GOTO usenextentry2
|
||||||
lnk$ = idef1box$(lnks$, lnks)
|
|
||||||
IF lnk$ = "C" THEN GOTO ideloop
|
|
||||||
END IF
|
END IF
|
||||||
|
END IF
|
||||||
|
|
||||||
|
|
||||||
OpenHelpLnk:
|
top = top + 1
|
||||||
|
REDIM _PRESERVE Back(top) AS STRING
|
||||||
|
REDIM _PRESERVE Help_Back(top) AS Help_Back_Type
|
||||||
|
REDIM _PRESERVE Back_Name(top) AS STRING
|
||||||
|
'Shuffle array upwards after current pos
|
||||||
|
FOR x = top - 1 TO Help_Back_Pos + 1 STEP -1
|
||||||
|
Back_Name$(x + 1) = Back_Name$(x)
|
||||||
|
Back$(x + 1) = Back$(x)
|
||||||
|
Help_Back(x + 1).sx = Help_Back(x).sx
|
||||||
|
Help_Back(x + 1).sy = Help_Back(x).sy
|
||||||
|
Help_Back(x + 1).cx = Help_Back(x).cx
|
||||||
|
Help_Back(x + 1).cy = Help_Back(x).cy
|
||||||
|
NEXT
|
||||||
|
usenextentry2:
|
||||||
|
Help_Back_Pos = Help_Back_Pos + 1
|
||||||
|
Back$(Help_Back_Pos) = lnk$
|
||||||
|
Back_Name$(Help_Back_Pos) = Back2BackName$(lnk$)
|
||||||
|
Help_Back(Help_Back_Pos).sx = 1
|
||||||
|
Help_Back(Help_Back_Pos).sy = 1
|
||||||
|
Help_Back(Help_Back_Pos).cx = 1
|
||||||
|
Help_Back(Help_Back_Pos).cy = 1
|
||||||
|
Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1
|
||||||
|
|
||||||
|
a$ = Wiki(lnk$)
|
||||||
|
|
||||||
Help_Back(Help_Back_Pos).sx = Help_sx 'update position
|
IF idehelp = 0 THEN
|
||||||
Help_Back(Help_Back_Pos).sy = Help_sy
|
IF idesubwindow THEN PCOPY 3, 0: SCREEN , , 3, 0: GOTO ideloop
|
||||||
Help_Back(Help_Back_Pos).cx = Help_cx
|
idesubwindow = idewy \ 2: idewy = idewy - idesubwindow
|
||||||
Help_Back(Help_Back_Pos).cy = Help_cy
|
Help_wx1 = 2: Help_wy1 = idewy + 1: Help_wx2 = idewx - 1: Help_wy2 = idewy + idesubwindow - 2: Help_ww = Help_wx2 - Help_wx1 + 1: Help_wh = Help_wy2 - Help_wy1 + 1
|
||||||
|
|
||||||
top = UBOUND(back$)
|
|
||||||
|
|
||||||
|
|
||||||
IF Back$(Help_Back_Pos) = lnk$ THEN Help_Back_Pos = Help_Back_Pos - 1: GOTO usenextentry2
|
|
||||||
IF Help_Back_Pos < top THEN
|
|
||||||
IF Back$(Help_Back_Pos + 1) = lnk$ THEN
|
|
||||||
GOTO usenextentry2
|
|
||||||
END IF
|
|
||||||
END IF
|
|
||||||
|
|
||||||
|
|
||||||
top = top + 1
|
|
||||||
REDIM _PRESERVE Back(top) AS STRING
|
|
||||||
REDIM _PRESERVE Help_Back(top) AS Help_Back_Type
|
|
||||||
REDIM _PRESERVE Back_Name(top) AS STRING
|
|
||||||
'Shuffle array upwards after current pos
|
|
||||||
FOR x = top - 1 TO Help_Back_Pos + 1 STEP -1
|
|
||||||
Back_Name$(x + 1) = Back_Name$(x)
|
|
||||||
Back$(x + 1) = Back$(x)
|
|
||||||
Help_Back(x + 1).sx = Help_Back(x).sx
|
|
||||||
Help_Back(x + 1).sy = Help_Back(x).sy
|
|
||||||
Help_Back(x + 1).cx = Help_Back(x).cx
|
|
||||||
Help_Back(x + 1).cy = Help_Back(x).cy
|
|
||||||
NEXT
|
|
||||||
usenextentry2:
|
|
||||||
Help_Back_Pos = Help_Back_Pos + 1
|
|
||||||
Back$(Help_Back_Pos) = lnk$
|
|
||||||
Back_Name$(Help_Back_Pos) = Back2BackName$(lnk$)
|
|
||||||
Help_Back(Help_Back_Pos).sx = 1
|
|
||||||
Help_Back(Help_Back_Pos).sy = 1
|
|
||||||
Help_Back(Help_Back_Pos).cx = 1
|
|
||||||
Help_Back(Help_Back_Pos).cy = 1
|
|
||||||
Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1
|
|
||||||
|
|
||||||
a$ = Wiki(lnk$)
|
|
||||||
|
|
||||||
IF idehelp = 0 THEN
|
|
||||||
IF idesubwindow THEN PCOPY 3, 0: SCREEN , , 3, 0: GOTO ideloop
|
|
||||||
idesubwindow = idewy \ 2: idewy = idewy - idesubwindow
|
|
||||||
Help_wx1 = 2: Help_wy1 = idewy + 1: Help_wx2 = idewx - 1: Help_wy2 = idewy + idesubwindow - 2: Help_ww = Help_wx2 - Help_wx1 + 1: Help_wh = Help_wy2 - Help_wy1 + 1
|
|
||||||
WikiParse a$
|
|
||||||
idehelp = 1
|
|
||||||
skipdisplay = 0
|
|
||||||
IdeSystem = 3
|
|
||||||
retval = 1
|
|
||||||
END IF
|
|
||||||
|
|
||||||
WikiParse a$
|
WikiParse a$
|
||||||
|
idehelp = 1
|
||||||
|
skipdisplay = 0
|
||||||
IdeSystem = 3
|
IdeSystem = 3
|
||||||
GOSUB redrawitall
|
retval = 1
|
||||||
GOTO specialchar
|
END IF
|
||||||
|
|
||||||
ELSE
|
WikiParse a$
|
||||||
'No help found; Does the user want help for a SUB or FUNCTION?
|
IdeSystem = 3
|
||||||
a2$ = LTRIM$(RTRIM$(a2$))
|
GOSUB redrawitall
|
||||||
IF LEN(a2$) THEN
|
GOTO specialchar
|
||||||
DO UNTIL alphanumeric(ASC(RIGHT$(a2$, 1)))
|
|
||||||
a2$ = LEFT$(a2$, LEN(a2$) - 1) 'removes sigil, if any
|
|
||||||
IF LEN(a2$) = 0 THEN GOTO NoKeywordFound
|
|
||||||
LOOP
|
|
||||||
|
|
||||||
FOR y = 1 TO iden
|
ELSE
|
||||||
a$ = idegetline(y)
|
'No help found; Does the user want help for a SUB or FUNCTION?
|
||||||
a$ = LTRIM$(RTRIM$(a$))
|
a2$ = LTRIM$(RTRIM$(a2$))
|
||||||
sf = 0
|
IF LEN(a2$) THEN
|
||||||
nca$ = UCASE$(a$)
|
DO UNTIL alphanumeric(ASC(RIGHT$(a2$, 1)))
|
||||||
IF LEFT$(nca$, 4) = "SUB " THEN sf = 1: sf$ = "SUB "
|
a2$ = LEFT$(a2$, LEN(a2$) - 1) 'removes sigil, if any
|
||||||
IF LEFT$(nca$, 9) = "FUNCTION " THEN sf = 2: sf$ = "FUNCTION "
|
IF LEN(a2$) = 0 THEN GOTO NoKeywordFound
|
||||||
IF sf THEN
|
LOOP
|
||||||
IF RIGHT$(nca$, 7) = " STATIC" THEN
|
|
||||||
a$ = RTRIM$(LEFT$(a$, LEN(a$) - 7))
|
|
||||||
END IF
|
|
||||||
|
|
||||||
IF sf = 1 THEN
|
FOR y = 1 TO iden
|
||||||
a$ = RIGHT$(a$, LEN(a$) - 4)
|
a$ = idegetline(y)
|
||||||
ELSE
|
a$ = LTRIM$(RTRIM$(a$))
|
||||||
a$ = RIGHT$(a$, LEN(a$) - 9)
|
sf = 0
|
||||||
END IF
|
nca$ = UCASE$(a$)
|
||||||
a$ = LTRIM$(RTRIM$(a$))
|
IF LEFT$(nca$, 4) = "SUB " THEN sf = 1: sf$ = "SUB "
|
||||||
x = INSTR(a$, "(")
|
IF LEFT$(nca$, 9) = "FUNCTION " THEN sf = 2: sf$ = "FUNCTION "
|
||||||
IF x THEN
|
IF sf THEN
|
||||||
n$ = RTRIM$(LEFT$(a$, x - 1))
|
IF RIGHT$(nca$, 7) = " STATIC" THEN
|
||||||
args$ = RIGHT$(a$, LEN(a$) - x + 1)
|
a$ = RTRIM$(LEFT$(a$, LEN(a$) - 7))
|
||||||
x = INSTR(args$, ")"): IF x THEN args$ = LEFT$(args$, x)
|
|
||||||
ELSE
|
|
||||||
n$ = a$
|
|
||||||
args$ = ""
|
|
||||||
cleanSubName n$
|
|
||||||
END IF
|
|
||||||
|
|
||||||
backupn$ = n$
|
|
||||||
|
|
||||||
DO UNTIL alphanumeric(ASC(RIGHT$(n$, 1)))
|
|
||||||
n$ = LEFT$(n$, LEN(n$) - 1) 'removes sigil, if any
|
|
||||||
LOOP
|
|
||||||
|
|
||||||
IF UCASE$(n$) = a2$ THEN
|
|
||||||
a$ = "'''" + backupn$ + "''' is a symbol that is used in your program as follows:"
|
|
||||||
a$ = a$ + CHR$(10) + CHR$(10) + "{{PageSyntax}}" + CHR$(10)
|
|
||||||
a$ = a$ + ": " + sf$ + "'''" + backupn$ + "''' " + args$
|
|
||||||
a$ = a$ + CHR$(10) + "{{PageNavigation}}"
|
|
||||||
|
|
||||||
IdeContextHelpSF = -1
|
|
||||||
|
|
||||||
IF idehelp = 0 THEN
|
|
||||||
IF idesubwindow THEN PCOPY 3, 0: SCREEN , , 3, 0: GOTO ideloop
|
|
||||||
idesubwindow = idewy \ 2: idewy = idewy - idesubwindow
|
|
||||||
Help_wx1 = 2: Help_wy1 = idewy + 1: Help_wx2 = idewx - 1: Help_wy2 = idewy + idesubwindow - 2: Help_ww = Help_wx2 - Help_wx1 + 1: Help_wh = Help_wy2 - Help_wy1 + 1
|
|
||||||
WikiParse a$
|
|
||||||
idehelp = 1
|
|
||||||
skipdisplay = 0
|
|
||||||
IdeSystem = 3
|
|
||||||
retval = 1
|
|
||||||
END IF
|
|
||||||
|
|
||||||
WikiParse a$
|
|
||||||
IdeSystem = 3
|
|
||||||
GOTO specialchar
|
|
||||||
|
|
||||||
EXIT FOR
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
NEXT
|
|
||||||
END IF
|
|
||||||
NoKeywordFound:
|
|
||||||
END IF 'lnks
|
|
||||||
|
|
||||||
END IF
|
IF sf = 1 THEN
|
||||||
|
a$ = RIGHT$(a$, LEN(a$) - 4)
|
||||||
|
ELSE
|
||||||
|
a$ = RIGHT$(a$, LEN(a$) - 9)
|
||||||
|
END IF
|
||||||
|
a$ = LTRIM$(RTRIM$(a$))
|
||||||
|
x = INSTR(a$, "(")
|
||||||
|
IF x THEN
|
||||||
|
n$ = RTRIM$(LEFT$(a$, x - 1))
|
||||||
|
args$ = RIGHT$(a$, LEN(a$) - x + 1)
|
||||||
|
x = INSTR(args$, ")"): IF x THEN args$ = LEFT$(args$, x)
|
||||||
|
ELSE
|
||||||
|
n$ = a$
|
||||||
|
args$ = ""
|
||||||
|
cleanSubName n$
|
||||||
|
END IF
|
||||||
|
|
||||||
|
backupn$ = n$
|
||||||
|
|
||||||
|
DO UNTIL alphanumeric(ASC(RIGHT$(n$, 1)))
|
||||||
|
n$ = LEFT$(n$, LEN(n$) - 1) 'removes sigil, if any
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF UCASE$(n$) = a2$ THEN
|
||||||
|
a$ = "'''" + backupn$ + "''' is a symbol that is used in your program as follows:"
|
||||||
|
a$ = a$ + CHR$(10) + CHR$(10) + "{{PageSyntax}}" + CHR$(10)
|
||||||
|
a$ = a$ + ": " + sf$ + "'''" + backupn$ + "''' " + args$
|
||||||
|
a$ = a$ + CHR$(10) + "{{PageNavigation}}"
|
||||||
|
|
||||||
|
IdeContextHelpSF = -1
|
||||||
|
|
||||||
|
IF idehelp = 0 THEN
|
||||||
|
IF idesubwindow THEN PCOPY 3, 0: SCREEN , , 3, 0: GOTO ideloop
|
||||||
|
idesubwindow = idewy \ 2: idewy = idewy - idesubwindow
|
||||||
|
Help_wx1 = 2: Help_wy1 = idewy + 1: Help_wx2 = idewx - 1: Help_wy2 = idewy + idesubwindow - 2: Help_ww = Help_wx2 - Help_wx1 + 1: Help_wh = Help_wy2 - Help_wy1 + 1
|
||||||
|
WikiParse a$
|
||||||
|
idehelp = 1
|
||||||
|
skipdisplay = 0
|
||||||
|
IdeSystem = 3
|
||||||
|
retval = 1
|
||||||
|
END IF
|
||||||
|
|
||||||
|
WikiParse a$
|
||||||
|
IdeSystem = 3
|
||||||
|
GOTO specialchar
|
||||||
|
|
||||||
|
EXIT FOR
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
NEXT
|
||||||
|
END IF
|
||||||
|
NoKeywordFound:
|
||||||
|
END IF 'lnks
|
||||||
GOTO specialchar
|
GOTO specialchar
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
@ -13124,27 +13105,15 @@ SUB IdeMakeContextualMenu
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF LEN(a2$) > 0 THEN
|
IF LEN(a2$) > 0 THEN
|
||||||
'check if F1 is in help links
|
'check if a2$ is in help links
|
||||||
fh = FREEFILE
|
lnks = 0
|
||||||
OPEN "internal\help\links.bin" FOR INPUT AS #fh
|
l2$ = findHelpTopic$(a2$, lnks, -1)
|
||||||
lnks = 0: lnks$ = CHR$(0)
|
|
||||||
DO UNTIL EOF(fh)
|
|
||||||
LINE INPUT #fh, l$
|
|
||||||
c = INSTR(l$, ","): l1$ = LEFT$(l$, c - 1): l2$ = RIGHT$(l$, LEN(l$) - c)
|
|
||||||
IF a2$ = UCASE$(l1$) OR (qb64prefix_set = 1 AND LEFT$(l1$, 1) = "_" AND a2$ = MID$(l1$, 2)) THEN
|
|
||||||
IF INSTR(lnks$, CHR$(0) + l2$ + CHR$(0)) = 0 THEN
|
|
||||||
lnks = lnks + 1
|
|
||||||
EXIT DO
|
|
||||||
END IF
|
|
||||||
END IF
|
|
||||||
LOOP
|
|
||||||
CLOSE #fh
|
|
||||||
|
|
||||||
IF lnks THEN
|
IF lnks THEN
|
||||||
IF LEN(l2$) > 15 THEN
|
IF LEN(l2$) > 15 THEN
|
||||||
l2$ = LEFT$(l2$, 12) + STRING$(3, 250)
|
l2$ = LEFT$(l2$, 12) + STRING$(3, 250)
|
||||||
END IF
|
END IF
|
||||||
IF INSTR(l2$, "Parenthesis") = 0 THEN
|
IF INSTR(l2$, "PARENTHESIS") = 0 THEN
|
||||||
menu$(m, i) = "#Help On '" + l2$ + "'": i = i + 1
|
menu$(m, i) = "#Help On '" + l2$ + "'": i = i + 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
@ -14413,6 +14382,10 @@ FUNCTION getWordAtCursor$
|
||||||
a$ = idegetline(idecy)
|
a$ = idegetline(idecy)
|
||||||
x = idecx
|
x = idecx
|
||||||
IF x <= LEN(a$) THEN
|
IF x <= LEN(a$) THEN
|
||||||
|
IF ASC(a$, x) = 32 AND x > 1 THEN
|
||||||
|
IF ASC(a$, x - 1) <> 32 THEN x = x - 1
|
||||||
|
END IF
|
||||||
|
try:
|
||||||
IF alphanumeric(ASC(a$, x)) THEN
|
IF alphanumeric(ASC(a$, x)) THEN
|
||||||
x1 = x
|
x1 = x
|
||||||
DO WHILE x1 > 1
|
DO WHILE x1 > 1
|
||||||
|
@ -14427,6 +14400,8 @@ FUNCTION getWordAtCursor$
|
||||||
a2$ = CHR$(ASC(a$, x))
|
a2$ = CHR$(ASC(a$, x))
|
||||||
END IF
|
END IF
|
||||||
getWordAtCursor$ = a2$ 'a2$ now holds the word or character at current cursor position
|
getWordAtCursor$ = a2$ 'a2$ now holds the word or character at current cursor position
|
||||||
|
ELSEIF x = LEN(a$) + 1 AND x > 1 THEN
|
||||||
|
IF ASC(a$, x - 1) <> 32 THEN x = x - 1: GOTO try
|
||||||
END IF
|
END IF
|
||||||
END FUNCTION
|
END FUNCTION
|
||||||
|
|
||||||
|
@ -14502,4 +14477,31 @@ SUB insertAtCursor (tempk$)
|
||||||
idechangemade = 1
|
idechangemade = 1
|
||||||
END SUB
|
END SUB
|
||||||
|
|
||||||
|
FUNCTION findHelpTopic$(topic$, lnks, firstOnly AS _BYTE)
|
||||||
|
'check if topic$ is in help links
|
||||||
|
' - returns a list of help links separated by CHR$(0)
|
||||||
|
' - returns the total number of links found by changing 'lnks'
|
||||||
|
a2$ = UCASE$(topic$)
|
||||||
|
fh = FREEFILE
|
||||||
|
OPEN "internal\help\links.bin" FOR BINARY AS #fh
|
||||||
|
lnks = 0: lnks$ = CHR$(0)
|
||||||
|
DO UNTIL EOF(fh)
|
||||||
|
LINE INPUT #fh, l$
|
||||||
|
c = INSTR(l$, ","): l1$ = LEFT$(l$, c - 1): l2$ = RIGHT$(l$, LEN(l$) - c)
|
||||||
|
IF a2$ = UCASE$(l1$) OR (qb64prefix_set = 1 AND LEFT$(l1$, 1) = "_" AND a2$ = MID$(l1$, 2)) THEN
|
||||||
|
IF INSTR(lnks$, CHR$(0) + l2$ + CHR$(0)) = 0 THEN
|
||||||
|
lnks = lnks + 1
|
||||||
|
IF firstOnly THEN findHelpTopic$ = l2$: CLOSE #fh: EXIT FUNCTION
|
||||||
|
IF l2$ = l1$ THEN
|
||||||
|
lnks$ = CHR$(0) + l2$ + lnks$
|
||||||
|
ELSE
|
||||||
|
lnks$ = lnks$ + l2$ + CHR$(0)
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
LOOP
|
||||||
|
CLOSE #fh
|
||||||
|
findHelpTopic$ = lnks$
|
||||||
|
END FUNCTION
|
||||||
|
|
||||||
'$INCLUDE:'wiki\wiki_methods.bas'
|
'$INCLUDE:'wiki\wiki_methods.bas'
|
||||||
|
|
|
@ -3257,7 +3257,7 @@ DO
|
||||||
s = Labels(r).Scope
|
s = Labels(r).Scope
|
||||||
IF s = subfuncn OR s = -1 THEN 'same scope?
|
IF s = subfuncn OR s = -1 THEN 'same scope?
|
||||||
IF s = -1 THEN Labels(r).Scope = subfuncn 'acquire scope
|
IF s = -1 THEN Labels(r).Scope = subfuncn 'acquire scope
|
||||||
IF Labels(r).State = 1 THEN a$ = "Duplicate label": GOTO errmes
|
IF Labels(r).State = 1 THEN a$ = "Duplicate label (" + RTRIM$(Labels(r).cn) + ")": GOTO errmes
|
||||||
'aquire state 0 types
|
'aquire state 0 types
|
||||||
tlayout$ = RTRIM$(Labels(r).cn)
|
tlayout$ = RTRIM$(Labels(r).cn)
|
||||||
GOTO addlabaq100
|
GOTO addlabaq100
|
||||||
|
@ -3319,7 +3319,7 @@ DO
|
||||||
s = Labels(r).Scope
|
s = Labels(r).Scope
|
||||||
IF s = subfuncn OR s = -1 THEN 'same scope?
|
IF s = subfuncn OR s = -1 THEN 'same scope?
|
||||||
IF s = -1 THEN Labels(r).Scope = subfuncn 'acquire scope
|
IF s = -1 THEN Labels(r).Scope = subfuncn 'acquire scope
|
||||||
IF Labels(r).State = 1 THEN a$ = "Duplicate label": GOTO errmes
|
IF Labels(r).State = 1 THEN a$ = "Duplicate label (" + RTRIM$(Labels(r).cn) + ")": GOTO errmes
|
||||||
'aquire state 0 types
|
'aquire state 0 types
|
||||||
tlayout$ = RTRIM$(Labels(r).cn)
|
tlayout$ = RTRIM$(Labels(r).cn)
|
||||||
GOTO addlabaq
|
GOTO addlabaq
|
||||||
|
@ -25366,7 +25366,7 @@ SUB free_udt_varstrings (n$, udt, file, base_offset)
|
||||||
element = udtenext(element)
|
element = udtenext(element)
|
||||||
LOOP
|
LOOP
|
||||||
END SUB
|
END SUB
|
||||||
|
|
||||||
SUB initialise_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
|
SUB initialise_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
|
||||||
IF NOT udtxvariable(udt) THEN EXIT SUB
|
IF NOT udtxvariable(udt) THEN EXIT SUB
|
||||||
offset = base_offset
|
offset = base_offset
|
||||||
|
@ -25420,7 +25420,7 @@ SUB copy_full_udt (dst$, src$, file, base_offset, udt)
|
||||||
element = udtenext(element)
|
element = udtenext(element)
|
||||||
LOOP
|
LOOP
|
||||||
END SUB
|
END SUB
|
||||||
|
|
||||||
SUB dump_udts
|
SUB dump_udts
|
||||||
f = FREEFILE
|
f = FREEFILE
|
||||||
OPEN "types.txt" FOR OUTPUT AS #f
|
OPEN "types.txt" FOR OUTPUT AS #f
|
||||||
|
|
Loading…
Reference in a new issue