TIP: Click on subject to list as thread! ANSI
echo: power_bas
to: ALLE
from: THOMAS GOHEL
date: 1996-09-01 00:00:00
subject: FAQ: PowerBASIC 08/16 (Problems 2)

    4.7. Error 502/514 when using C-OBJ-Files
    -----------------------------------------
    When using C-OBJ-Files you should take care that there not multiple
    Statements for the Datasegment in it, because PowerBASIC only supports
    one Datasegment per OBJ-File.
    Since there is no solution known to me and there seems to be none from
    PowerBASIC, it seems that it is your only choice to adapt your C-
    Source.
    4.8. Preventing a Warmboot with CTRL-ALT-DEL
    --------------------------------------------
    The following Source prevents a possible Warmboot:
    Example:
            KEY 15, CHR$(&h0C, &h53, &h73)
            ON KEY(15) GOSUB NoBoot
            KEY(15) ON
            DO
               IF INKEY$  "" THEN EXIT LOOP
            LOOP
            PRINT "Done!"
            END
            NoBoot:
            PRINT "Warmboot not wanted!!"
            RETURN
    4.9. Opening more than 15 Files with PowerBASIC and/or DOS
    ----------------------------------------------------------
    You often seem to come to the limits of PowerBASIC when you want to
    open more than 15 Files. But this is not a problem of the Compiler,
    but a genetic birth error of MS-DOS.
    I'll have to bring up some of the dark sides of DOS in order to
    describe this effect, baecause this is where we find the answer. Many
    of you know that when a file is opened, a handle is returned from DOS.
    Now where does DOS save this handle an the information belonging to
    that handle?
    To many of you PSP (Program Segment Prefix) is a well known statement
    (already described shortly in the finding of the filename). If not,
    you shoud better not read the following explanations and just test the
    source.
    This PSP also contains a table, which was declared reserved by
    Microsoft, but its use is widely known. This table is called 'Job File
    Table' (short JFT) and is located at Offset 18Hex from DOS 2.0 on and
    is a 20 fields long BYTE-Array. When you now subtract the used handles
    for: NUL, $CLOCK, CON, AUX and PRN, what is left over are the magic 15
    usable handles.
    But it is only job of the JFT to manage a pointer to the 'System File
    Table', short SFT.
    The SFT on the other hand is a structure similar to a MCB (Memory
    Control Block), which manages important data like Startclusters and
    Sharingattributes. A SFT of this kind can only hold a limited amount
    of handles, to raise this you have to include a higher amount with
    FILES in your CONFIG.SYS. After a restart of the system MS-DOS
    reserves more MCBs marked as SFT. Now you can theoretically open more
    than 20 Files, because the default numbe of FILES is '8'. Unluckily we
    come to another limited number of entries in the JFT within the PSP.
    There is a solution from MS-DOS 3.3 on, because the Interrupt &h21,
    function &h67 enables you to raise the amount of usable handles. But
    how is this done when the space in the PSP is limited??
    Therefore we remember some of the undocumented fields within the PSP.
    Offset &h32 has become interresting, because this holds the new size
    of the JFT in WORD. After that there is the new pointer to the
    Extended JFT. Interrestinf is, that the new array is an array of WORD.
    Theoretically 65535 handles can be managed like that, but that is
    hypothetically, because the SFT can only handle 255 entries.
    Actually there are two important things when creating a new JFT:
        - The new JFT needs memory, that means that you have to decrease
          the size if the current programs Heap!
        - Ab extended JFT will not be passed to a Childprogram with SHELL/
          EXECUTE! The 15 Files Border still exists for the Childprogram.
     Ok, but now here is the Source:
    '***********************************************************************  
   '
    '  Set the Amount of uasable Handles in PowerBASIC 3.2
    '
    '    developed by Th.Gohel  Fido:      2:2410/301.12
    '                           InterNet:  support@pbsound.snafu.de
    '                           Homepage:  http://www.snafu.de/~pbsound/
    '
    '***********************************************************************
    MaxFiles% = 30                       ' Same as FILES = 30
    PBFiles MaxFiles%                    ' Set the amount of usable Files
    FOR i% = 1 TO MaxFiles%              ' Test all usable Files
        PRINT "Opening File:  PBFILES." + STR$(i%)
        OPEN "PBFILES." + STR$(i%) FOR BINARY AS i%
        PUT$ i%, "Testfile" + STR$(i%) + " for PBFILES, please delete!"
    NEXT i%
    FOR i% = 1 TO MaxFiles%              ' and close again
        CLOSE i%
    NEXT i%
    SUB PBFiles(BYVAL MoreFiles%)
        x& = SETMEM(-255)                ' Should be enough for all cases
        ! mov ah, &h67                   ; Set amount of usable Handles
        ! mov bx, MoreFiles%             ;
        ! add bx, 6                      ; The Standard-Handles for PB
        ! int &h21
        ! jnc PBFiles_Ok
        PRINT "Error while creating the usable Handles!!"
        PBFiles_Ok:
    END SUB
    4.10. HEX$-DWORD Routine for PowerBASIC 3.1/3.2
    -----------------------------------------------
    The following routine should make HEX$-Support possible for variables
    of type DWORD, which is missing for some reason.
    Example:
            d??? = &h1234ABCD
            PRINT DHex$(d???)
            FUNCTION DHex(HexDWord???) AS STRING
                    DIM Lo AS WORD
                    DIM Hi AS WORD
                    ! les  bx, [bp+6]
                    ! mov  ax, es:[bx+0]
                    ! mov  Lo??, ax
                    ! mov  ax, es:[bx+2]
                    ! mov  Hi??, ax
                    DHex = RIGHT$("000" + HEX$(Hi??), 4) + RIGHT$("000" + _
                    HEX$(Lo??), 4)
            END FUNCTION
--- CrossPoint v3.11 R
---------------
* Origin: -= http://www.snafu.de/~pbsound/ =- (2:2410/301.12)

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.