🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.os.msdos.programmer
Article #3046

Re: format of .QLB files?

#3046
From: Steve Resnick
Date: Wed, 14 Nov 1990 21:11
102 lines
4285 bytes
In article <1990Nov13.121637.17357@cns.umist.ac.uk> ip@cns.umist.ac.uk (Ian Pallfreeman) writes:
>Can anybody supply me with the details of how a .QLB ("quick library")
>file is laid out?
>
>Thanks in advance,
>
>Ian.

This is one of the example programs from Microsoft QuickBASIC. The
program prints out the Quick Lib procedures. The QLB files are
stored as .EXE files with a slightly modified format. 

Hope this helps....
Steve
--------- Cut Here ----------- Cut Here ---------- Cut Here -----------------
' This program prints the names of QuickLibrary procedures

DECLARE SUB DumpSym (SymStart AS INTEGER, QHdrPos AS LONG)

TYPE ExeHdr                  ' Part of DOS .EXE header
    other1    AS STRING * 8  ' Other header information
    CParHdr   AS INTEGER     ' Size of header in paragraphs
    other2    AS STRING * 10 ' Other header information
    IP        AS INTEGER     ' Initial IP value
    CS        AS INTEGER     ' Initial (relative) CS value
END TYPE

TYPE QBHdr                   ' QLB header
    QBHead    AS STRING * 6  ' QB specific heading
    Magic     AS INTEGER     ' Magic word: identifies file as
                             ' a Quick library
    SymStart  AS INTEGER     ' Offset from header to first code symbol
    DatStart  AS INTEGER     ' Offset from header to first data symbol
END TYPE

TYPE QbSym                   ' QuickLib symbol entry
    Flags     AS INTEGER     ' Symbol flags
    NameStart AS INTEGER     ' Offset into name table
    other     AS STRING * 4  ' Other header info
END TYPE

DIM EHdr AS ExeHdr, Qhdr AS QBHdr, QHdrPos AS LONG

INPUT "Enter QuickLibrary file name: ", FileName$
FileName$ = UCASE$(FileName$)
IF INSTR(FileName$, ".QLB") = 0 THEN FileName$ = FileName$ + ".QLB"
OPEN FileName$ FOR BINARY AS #1

GET #1, , EHdr               ' Read the EXE format header.

QHdrPos = (EHdr.CParHdr + EHdr.CS) * 16& + EHdr.IP + 1

GET #1, QHdrPos, Qhdr        ' Read the QuickLib format header.

IF Qhdr.Magic <> &H6C75 THEN PRINT "Not a QB UserLibrary": END

PRINT "Code Symbols:": PRINT
DumpSym Qhdr.SymStart, QHdrPos ' dump code symbols
PRINT

PRINT "Data Symbols:": PRINT
DumpSym Qhdr.DatStart, QHdrPos ' dump data symbols
PRINT

END

SUB DumpSym (SymStart AS INTEGER, QHdrPos AS LONG)
   DIM QlbSym AS QbSym
   DIM NextSym AS LONG, CurrentSym AS LONG

   ' Calculate the location of the first symbol entry, then read that entry:
   NextSym = QHdrPos + SymStart
   GET #1, NextSym, QlbSym

   DO
      NextSym = SEEK(1)          ' Save the location of the next
                                 ' symbol.
      CurrentSym = QHdrPos + QlbSym.NameStart
      SEEK #1, CurrentSym        ' Use SEEK to move to the name
                                 ' for the current symbol entry.
      Prospect$ = INPUT$(40, 1)  ' Read the longest legal string,
                                 ' plus one additonal byte for the
                                 ' final null character (CHR$(0)).

      ' Extract the null-terminated name:
      SName$ = LEFT$(Prospect$, INSTR(Prospect$, CHR$(0)))

      ' Print only those names that do not begin with "__", "$", or "b$"
      ' as these names are usually considered reserved:
      IF LEFT$(SName$, 2) <> "__" AND LEFT$(SName$, 1) <> "$" AND UCASE$(LEFT$(SName$, 2)) <> "B$" THEN
         PRINT "  " + SName$
      END IF

      GET #1, NextSym, QlbSym    ' Read a symbol entry.
   LOOP WHILE QlbSym.Flags       ' Flags=0 (false) means end of table.
END SUB

-- 
----------------------------------------------------------------------------
steve.resnick@f105.n143.z1.FIDONET.ORG - or - apple!camphq!105!steve.resnick
Flames, grammar errors, spelling errrors >/dev/nul
The Asylum OS/2 BBS - (408)263-8017 IFNA 1:143/105.0
Technical Details
Message-ID: <1990Nov14.211111.27481@Octopus.COM>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rutgers!dimacs.rutgers.edu!mips!daver!vsi1!octopus!stever
References: <1990Nov13.121637.17357@cns.umist.ac.uk>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rutgers!dimacs.rutgers.edu!mips!daver!vsi1!octopus!stever
From: stever@Octopus.COM (Steve Resnick )
Newsgroups: comp.os.msdos.programmer
Subject: Re: format of .QLB files?
Message-ID: <1990Nov14.211111.27481@Octopus.COM>
Date: 14 Nov 90 21:11:11 GMT
References: <1990Nov13.121637.17357@cns.umist.ac.uk>
Reply-To: stever@octopus.UUCP (Steve Resnick )
Organization: Octopus Enterprises, Cupertino CA
Lines: 102