ex.hlp (Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
FRE, STACK Functions and STACK Statement Example
                        Example                Contents  Index  Back
──────────────────────────────────────────────────────────────────────────────
' This example uses the FRE function to report the availability of memory
' resources.  The STACK function is used to show free DGROUP.
' The STACK statement is used to set the STACK size.
'
' If Visual Basic is invoked with the /Ea switch, the integer arrays used in
' this example will be placed in available EMS memory space; otherwise, they
' will occupy far memory. If the arrays are placed in EMS, each array will
' reduce available EMS memory by 16K. If not in EMS, far memory will be
' reduced by the number of bytes occupied by the array rounded up to an even
' 16 bytes.
 
' To try this example:
' 1. Choose New Project from the File menu
' 2. Copy the code example below to the code window
' 3. Press F5 to run the example
 
 DECLARE SUB MakeSubString ()
 DECLARE SUB Printit (a$)
 DECLARE SUB Recursive (n%)
 DECLARE SUB Pause ()
 CLS                               ' Clear the screen
 
 STACK 4096                        ' Set Stack size to 4k
 
' Report the way things are to begin with
 PRINT "Remaining space (in bytes) to begin with is:"
 CALL Printit(a$)
 
 String1$ = STRING$(32767, 90)     ' Create a 32K string and give report
 PRINT "The remaining space after creating a 32K far string is:"
 CALL Printit(String1$)
 
 MakeSubString                     ' Make a substring and give report
 PRINT "The remaing space after returning from a sub is:"
 CALL Printit(String2$)
 
 n% = 60                           ' Do 60 recursive calls to a SUB
 CALL Recursive(n%)
 PRINT "After performing 60 recursive calls, the space is:"
 CALL Printit(a$)
 
 REDIM a%(999)                     ' Dimension a 1001 element dynamic array
                                   ' in EMS
 PRINT "After dimensioning a 1000-element integer array, the space is:"
 CALL Printit(a$)
 
 PRINT "After dimensioning a 2nd 1000-element integer array, the space is:"
 REDIM B%(999)
 CALL Printit(a$)
 
 SUB MakeSubString ()
    SHARED String1$
    String2$ = STRING$(32767, 90)
    PRINT "The space remaining after creating a 32K sub string is:"
    CALL Printit(String1$)
 END SUB
 
 SUB Pause ()
    PRINT "Press any key for next calculation"
    WHILE INKEY$ = "": WEND
 END SUB
 
 SUB Printit (a$)
    PRINT "Dgroup + Current Stack"; TAB(30); STACK
    ' STACK function returns what the largest stack that can be
    ' be dimensioned.  This is free DGROUP plus current stack.
 
    PRINT "Far Memory"; TAB(30); FRE(-1)
    PRINT "STACK 'low water' mark"; TAB(30); FRE(-2)
    ' FRE(-2) reports what the lowest amount of free stack space
    ' your program has had prior to executing the FRE(-2) function.
 
    PRINT "String Segment"; TAB(30); FRE(a$)
    PRINT "Temp. Segment"; TAB(30); FRE("")
    PRINT "EMS Memory"; TAB(30); FRE(-3); "K"
    PRINT
    CALL Pause
    PRINT
 END SUB
 
 SUB Recursive (n%)
    SHARED String1$
    n% = n% - 1
    IF n% = 0 THEN
        PRINT "The remaining space after 50 recursive calls is:"
        CALL Printit(String1$)
        EXIT SUB
    ELSE
        CALL Recursive(n%)
    END IF
 END SUB