home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / XLIB40.ZIP / EASYXEX2.BAS < prev    next >
BASIC Source File  |  1994-02-25  |  4KB  |  115 lines

  1. '  This is the second 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. 'Declare EASYX procedures.
  9. DECLARE FUNCTION XLIBMEMREQ& ()  
  10. DECLARE FUNCTION INITXLIB& ()    
  11. DECLARE FUNCTION XLIBCONFIG% ()
  12. DECLARE FUNCTION XMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  13. DECLARE FUNCTION XFREE& (BYVAL HANDLE AS LONG)
  14. DECLARE FUNCTION MAPIOMEM& (BYVAL PHYSADDRESS AS LONG, BYVAL SIZE AS LONG, SEG LOGADDRESS AS LONG)
  15. DECLARE FUNCTION LINADR& (SEG VARIABLE AS ANY)
  16. DECLARE SUB MOVMEM (BYVAL DESTADR AS LONG, BYVAL SOURCEADR AS LONG, BYVAL NOBYTES AS LONG)
  17. DECLARE SUB XFCREATE (SEG CONTROLBLOCK AS ANY)
  18. DECLARE SUB XFOPEN (SEG CONTROLBLOCK AS ANY)
  19. DECLARE SUB XFCLOSE (SEG CONTROLBLOCK AS ANY)
  20. DECLARE SUB XFLOAD (SEG CONTROLBLOCK AS ANY)
  21. DECLARE SUB XFSAVE (SEG CONTROLBLOCK AS ANY)
  22. DECLARE SUB XFREAD (SEG CONTROLBLOCK AS ANY)
  23. DECLARE SUB XFWRITE (SEG CONTROLBLOCK AS ANY)
  24.  
  25. 'Record used for all EASYX file operations.
  26. TYPE XFILE
  27.   CONDCODE AS LONG
  28.   FNAME AS STRING * 68
  29.   FHANDLE AS INTEGER
  30.   FPTRMODE AS INTEGER
  31.   FPTR AS LONG
  32.   BLKADR AS LONG
  33.   BLKSIZE AS LONG
  34.   BUFADR AS LONG
  35.   BUFSIZE AS INTEGER
  36.   CONTROL AS INTEGER
  37. END TYPE
  38.  
  39. IF XLIBCONFIG = 0 THEN               'See if XLIB already initialized
  40.   TEMP& = XLIBMEMREQ                 'See how much memory to release for XLIB
  41.   IF TEMP& >= 0& THEN                'TEMP& will be negative if error
  42.     IF TEMP& > 0 THEN TEMP& = SETMEM(-TEMP& - 16&)   'Release extra paragraph
  43.     TEMP& = INITXLIB                 'INITXLIB error code returned in TEMP&
  44.   ELSE
  45.     TEMP& = TEMP& AND &H7FFFFFFF     'Mask sign bit to leave error code only
  46.   END IF
  47.   IF TEMP& <> 0 THEN
  48.     PRINT "Library initialization error:  "; HEX$(TEMP&)
  49.     END
  50.   END IF
  51. END IF
  52.  
  53. DIM I AS INTEGER
  54. DIM ERRCODE AS LONG, NOBYTES AS LONG, XADDRESS AS LONG, XSIZE AS LONG
  55. DIM HANDLE AS LONG, ARRAYADDRESS AS LONG
  56. DIM ARRAY(99) AS INTEGER
  57. DIM FB AS XFILE                    'Declare file control block
  58.  
  59. NOBYTES = &H10000                  'Allocate 64k of extended memory
  60. ERRCODE = XMALLOC(NOBYTES, XADDRESS, XSIZE, HANDLE)
  61. IF ERRCODE <> 0 THEN
  62.   PRINT "Extended memory allocation error:  "; HEX$(ERRCODE)
  63.   END
  64. END IF
  65.  
  66. FOR I = 0 TO 99                    'Put something in ARRAY()
  67.   ARRAY(I) = I
  68. NEXT I
  69.  
  70. ARRAYADDRESS = LINADR(ARRAY(0))    'Compute linear address of ARRAY()
  71.  
  72. FB.CONDCODE = 0                    'Set control block to create file
  73. FB.FNAME = "JUNK.DAT" + CHR$(0)    'Specify file name.  Terminate with zero
  74. FB.BLKADR = ARRAYADDRESS           'Will transfer ARRAY() to the file
  75. FB.BLKSIZE = 200                   'There are 200 bytes in ARRAY()
  76. FB.BUFSIZE = 0                     'Force XLIB to use its internal buffer
  77. CALL XFSAVE(FB)                    'Create file and save ARRAY() to it
  78. IF FB.CONDCODE <> 0 THEN
  79.   PRINT "File save error:  "; HEX$(FB.CONDCODE)
  80.   END
  81. END IF
  82.  
  83. CALL XFOPEN(FB)                 'Reopen the file
  84. IF FB.CONDCODE <> 0 THEN
  85.   PRINT "File open error:  "; HEX$(FB.CONDCODE)
  86.   END
  87. END IF
  88.  
  89. FB.BLKADR = XADDRESS            'Prepare to transfer the file to extended
  90. FB.BLKSIZE = 100                'Will transfer only 100 bytes
  91. FB.FPTRMODE = 0                 'File pointer is relative to start of file
  92. FB.FPTR = 100                   'Set file pointer to 50th element
  93. CALL XFREAD(FB)                 'Read last 50 elements to extended
  94. IF FB.CONDCODE <> 0 THEN
  95.   PRINT "File read error:  "; HEX$(FB.CONDCODE)
  96.   END
  97. END IF
  98.  
  99. CALL MOVMEM(ARRAYADDRESS, XADDRESS, 100)  'Transfer file data back to ARRAY()
  100.  
  101. CALL XFCLOSE(FB)                'Close the file
  102. IF FB.CONDCODE <> 0 THEN
  103.   PRINT "File close error:  "; HEX$(FB.CONDCODE)
  104.   END
  105. END IF
  106.  
  107. ERRCODE = XFREE(HANDLE)         'Release extended memory 
  108. IF ERRCODE <> 0 THEN
  109.   PRINT "Memory release error:  "; HEX$(ERRCODE)
  110.   END
  111. END IF
  112.  
  113. END
  114.  
  115.