home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / xlib41 / easyxex1.bas < prev    next >
BASIC Source File  |  1994-02-25  |  4KB  |  78 lines

  1. '  This is the first example program in EASYX.DOC translated to Microsoft
  2. 'Basic version 7.0.  The program should be linked with EASYX.LIB.  When
  3. 'developing code in the Microsoft BASIC development environment (QBX), a 
  4. 'quick library will also be needed.  See README.DOC for information about
  5. 'constructing quick libraries.  Initialize the environment with the quick
  6. 'library.
  7.  
  8. 'Declarations of all functions in EASYX.LIB which are usable by BASIC. 
  9. 'XLIB.LIB is contained within EASYX.LIB; hence, certain of the following
  10. 'functions are actually XLIB procedures.  These are explained in XLIB.DOC.
  11. DECLARE FUNCTION XLIBMEMREQ& ()    'XLIB procedure
  12. DECLARE FUNCTION VCPIMEMREQ& ()    'XLIB procedure
  13. DECLARE FUNCTION DPMIMEMREQ& ()    'XLIB procedure
  14. DECLARE FUNCTION INITXLIB& ()      'XLIB procedure
  15. DECLARE FUNCTION XLIBCONFIG% ()    'XLIB procedure
  16. DECLARE FUNCTION XMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  17. DECLARE FUNCTION XFREE& (BYVAL HANDLE AS LONG)
  18. DECLARE FUNCTION MAPIOMEM& (BYVAL PHYSADDRESS AS LONG, BYVAL SIZE AS LONG, SEG LOGADDRESS AS LONG)
  19. DECLARE FUNCTION LINADR& (SEG VARIABLE AS ANY)
  20. DECLARE SUB MOVMEM (BYVAL DESTADR AS LONG, BYVAL SOURCEADR AS LONG, BYVAL NOBYTES AS LONG)
  21. DECLARE SUB XFCREATE (SEG CONTROLBLOCK AS ANY)
  22. DECLARE SUB XFOPEN (SEG CONTROLBLOCK AS ANY)
  23. DECLARE SUB XFCLOSE (SEG CONTROLBLOCK AS ANY)
  24. DECLARE SUB XFLOAD (SEG CONTROLBLOCK AS ANY)
  25. DECLARE SUB XFSAVE (SEG CONTROLBLOCK AS ANY)
  26. DECLARE SUB XFREAD (SEG CONTROLBLOCK AS ANY)
  27. DECLARE SUB XFWRITE (SEG CONTROLBLOCK AS ANY)
  28.  
  29. '  EASYX procedures should not be called until XLIB has been initialized
  30. 'by calling the XLIB function INITXLIB.  This is done in code that follows.
  31. 'BASIC complicates this process because it allocates all available DOS memory
  32. 'leaving none for the library.  This situation is corrected by forcing BASIC
  33. 'to release some memory with its SETMEM function.  The memory should be
  34. 'released before calling INITXLIB.  It should also be released before
  35. 'declaring any far data in BASIC.  The XLIB function XLIBMEMREQ tells BASIC
  36. 'how many bytes to release.
  37. '  XLIBMEMREQ can possibly fail.  If so, then it will return a negative
  38. 'number.  Mask the sign bit of this number to obtain an XLIB error code which
  39. 'explains the failure.  See XLIB.DOC for explanation of error codes.
  40. '  If working in the Microsoft BASIC program development environment (QBX),
  41. 'then XLIB needs to be initialized only once.  Hence the foregoing code first
  42. 'calls XLIBCONFIG to determine if XLIB has already been initialized.  This
  43. 'function will return a nonzero value if initialization is complete.
  44. IF XLIBCONFIG = 0 THEN               'See if XLIB already initialized
  45.   TEMP& = XLIBMEMREQ                 'See how much memory to release for XLIB
  46.   IF TEMP& >= 0& THEN                'TEMP& will be negative if error
  47.     IF TEMP& > 0 THEN TEMP& = SETMEM(-TEMP& - 16&)   'Release extra paragraph
  48.     TEMP& = INITXLIB                 'XLIB error code returned in TEMP&
  49.   ELSE
  50.     TEMP& = TEMP& AND &H7FFFFFFF     'Mask sign bit to leave error code only
  51.   END IF
  52.   IF TEMP& <> 0 THEN
  53.     PRINT "Library initialization error:  "; HEX$(TEMP&)
  54.     END
  55.   END IF
  56. END IF
  57.  
  58. DIM ERRCODE AS LONG, NOBYTES AS LONG, XADDRESS AS LONG, XSIZE AS LONG
  59. DIM XHANDLE AS LONG, BUFFERADDRESS AS LONG
  60. DIM BUFFER(1023) AS LONG        '4k buffer
  61.  
  62. NOBYTES = &H10000               'Allocate 64k of extended memory
  63. ERRCODE = XMALLOC(NOBYTES, XADDRESS, XSIZE, XHANDLE)
  64. IF ERRCODE <> 0 THEN
  65.   PRINT "Memory allocation error:  "; HEX$(ERRCODE)
  66.   END
  67. END IF
  68.  
  69. BUFFERADDRESS = LINADR(BUFFER)                'Get linear address of buffer
  70. CALL MOVMEM(XADDRESS, BUFFERADDRESS, 4096)    'Transfer buffer to extended
  71. CALL MOVMEM(BUFFERADDRESS, XADDRESS, 4096)    'Transfer extended to buffer
  72.  
  73. ERRCODE = XFREE(XHANDLE)                      'Release the extended memory
  74. IF ERRCODE <> 0 THEN PRINT "Memory release error:  "; HEX$(ERRCODE)
  75.  
  76. END
  77.  
  78.