Functions

 BBS: Inland Empire Archive
Date: 07-23-92 (22:04)             Number: 119
From: STEVE HALKO                  Refer#: NONE
  To: DOUGLAS LUSHER                Recvd: NO  
Subj: Functions                      Conf: (2) Quik_Bas
DL> Thanks 10^6. That's exactly what I was needing. Gotta wonder
DL> why these weren't included in QB itself. BTW, where did you
DL> get the variable names for the DEF SEG and VIEW PRINT parameters?

  Glad I could help.  I got the variable names by writing a short QB
  program and running it through CODEVIEW.  For example, for VIEW PRINT,
  here's the QB code:

  DEFINT A-Z
  VIEW PRINT 2 TO 3

  and here's the CODEVIEW version:

  1:      DEFINT A-Z
  2:      VIEW PRINT 2 TO 3
  4051:0030 B80200         MOV       AX,0002
  4051:0033 50             PUSH      AX
  4051:0034 B80300         MOV       AX,0003
  4051:0037 50             PUSH      AX
  4051:0038 9A1E065540     CALL      B$VWPT (4055:061E)

  You can see where the arguments to the VIEW PRINT statement are first
  pushed onto the stack, and then QB calls the internal routine to do
  the dirty work - in this case it's called B$VWPT.  I single step into
  the call to B$VWPT, and look around until I find where those stack
  parameters are called into use, and see what symbolic name has been
  assigned to them:


  B$VWPT:
  4055:061E 55             PUSH      BP
  4055:061F 8BEC           MOV       BP,SP
  4055:0621 F606300402     TEST      Byte Ptr [b$IOFLAG (0430)],02
  4055:0626 7539           JNZ       B$VWPT+43 (0661)
  4055:0628 8A264301       MOV       AH,Byte Ptr [b$KEY_SW (0143)]
     .
     .
   [Deleted about 16 lines of code]
     .
     .
  4055:064E 8AD0           MOV       DL,AL
  4055:0650 2AD4           SUB       DL,AH
  4055:0652 881E7C03       MOV       Byte Ptr [b$WDOTOP (037C)],BL
  4055:0656 88167D03       MOV       Byte Ptr [b$WDOBOT (037D)],DL
                                               ^^^^^^^^
                                                  |
             There's the rascals! ----------------'

  In the stuff I deleted, the VIEW PRINT parameters were shuffled around
  a bit, and eventually ended up in the BL and DL registers.  And from
  there, you can see that they are saved in memory locations having the
  symbolic names b$WDOTOP and b$WDOBOT.

  Piece o' cake - and actually quite educational to plow thru QB's
  internals like this.

 * SLMR 2.1a * Two wrongs don't make a right, but 3 lefts do.

--- DB B1073/002487
 * Origin: Gulf Coast BBS -QuickSHARE #2- (904)563-2547 HST/V.32bis (1:365/12)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET