Ooops
November 24, 2020, 09:16:07 AM

Author Topic: [bb] 2d Map Builder by Matthew Smith [ 1+ years ago ]  (Read 695 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] 2d Map Builder by Matthew Smith [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : 2d Map Builder
Author : Matthew Smith
Posted : 1+ years ago

Description : This tool takes an image and based on settings (ie. tile size) chops it up to build a 2d map file and tile image file for scrolling/arcade games from it.

It's a good tool to grab images if you are doing a remake!

Notes:
The tool takes a .png image and creates a .bmp (Blitz can't natively write .pngs) tile map, a basic data file and a Monkey code file.  All files will be dumped to a subfolder called Map.

v2.0 changes
Updated to properly pad tiles when scaling.  You can now create a 'Config.ini' file to adjust some of the features.  Include any of the following depending on your requirements:
ScaleTiles=True|False
TileWidth=32
TileHeight=32
TilePadding=0|1
MapPadding=True|False

Tile padding will create the required border (1 = 1 pixel) around each tile.
Map padding will create an 'empty' one cell border around the map

This tool is really for my own use, but a good place to store it for later, plus someone may get some use from it!


Code :
Code: BlitzBasic
  1. ;------------------------------------------------------------------------------------------------------------------------------------------
  2. ; MapBuilder
  3. ; v2.0
  4. ; Matthew Smith 2001, 2011, 2013
  5. ;------------------------------------------------------------------------------------------------------------------------------------------
  6.  
  7. AppTitle "Map Builder v2.0 - Matthew Smith"
  8. Graphics 640, 480, 16, 2
  9.  
  10. Global MapName$
  11. MapName$=Input$("Enter filename of level gfx: ")
  12. If (MapName = "") Then End
  13.  
  14. Dim TileMap(1, 1)                                       ;Map Information
  15. Global MapSizeX
  16. Global MapSizeY
  17.  
  18. ;Adjust these items depending on game
  19. Global ScaleTiles = True
  20. Global TileWidth = 32                           ;Tile Sizes
  21. Global TileHeight = 32
  22. Global TilePadding = 1                          ;Padding added to tile
  23. Global MapPadding = False                       ;Padding added to map (1 cell border)
  24.  
  25. Global gfxMap
  26. Global gfxTileStore
  27. Global gfxTileCompareStore
  28.  
  29. Dim ColorTiles(1, 1)
  30. Const CompareAtOnce = 250
  31. Global TilesMax = 0                                     ;Number of Tiles Created
  32.  
  33. ;Read Ini File
  34. ReadIniFile()
  35.  
  36. ;Build
  37. SetGfxMapInfo()
  38. CreateBlankTile()
  39. BuildMap()
  40.  
  41. ;Finalise
  42. FreeImage gfxTileStore
  43. FreeImage gfxTileCompareStore
  44. FreeImage gfxMap
  45. EndGraphics
  46. End
  47.                                
  48. Function SetGfxMapInfo()
  49.         ;Load image
  50.         gfxMap = LoadImage(MapName + ".png")
  51.                
  52.         ;Get size of map (tiles)
  53.         MapSizeX = Int(ImageWidth(gfxMap) / TileWidth)
  54.         MapSizeY = Int(ImageHeight(gfxMap) / TileHeight)
  55.        
  56.         ;Set map size
  57.         ClearMap(MapSizeX, MapSizeY)   
  58.        
  59.         ;Set tile image store
  60.         FreeImage gfxTileStore
  61.         gfxTileStore = CreateImage(TileWidth, TileHeight, 512)
  62.                
  63.         ;Set comparison tile image store
  64.         FreeImage gfxTileCompareStore
  65.         gfxTileCompareStore = CreateImage(TileWidth * (CompareAtOnce + 1), TileHeight)
  66.        
  67.         ;Set counter   
  68.         TilesMax = 0
  69.  
  70. End Function
  71.  
  72. Function ClearMap(sizeX, sizeY)
  73.         Local x, y
  74.        
  75.         ;Resize
  76.         Dim TileMap(sizeX, sizeY)
  77.        
  78.         ;Process
  79.         For x = 0 To sizeX
  80.                 For y = 0 To sizeY
  81.                         TileMap(x, y) = -1
  82.                 Next
  83.         Next
  84.        
  85. End Function
  86.  
  87. Function CreateBlankTile()
  88.         ;Prepare
  89.         SetBuffer(BackBuffer())
  90.         ClsColor(0, 0, 0)
  91.         Cls
  92.                
  93.         ;Copy blank tile and set value in map
  94.         DrawBlockRect(gfxMap, 0, 0, TileWidth, TileHeight, TileWidth, TileHeight)
  95.         TileMap(0, 0) = 0
  96.        
  97.         ;Inc counter
  98.         TilesMax = TilesMax + 1
  99.  
  100. End Function
  101.  
  102. Function CreateTile(BX, BY)
  103.         ;Prepare
  104.         SetBuffer(ImageBuffer(gfxTileStore, TilesMax))
  105.        
  106.         ;Copy tile and set value in map
  107.         DrawBlockRect(gfxMap,  0, 0, (BX * TileWidth), (BY * TileHeight), TileWidth, TileHeight)
  108.         TileMap(BX, BY) = TilesMax
  109.        
  110.         ;Inc counter
  111.         TilesMax = TilesMax + 1
  112.                
  113.         ;Finalise
  114.         SetBuffer(BackBuffer())
  115.        
  116. End Function
  117.  
  118. Function PrepareMapComparison(BX, BY, TC)
  119.         Local counter
  120.         Local compare
  121.         Local index
  122.        
  123.         ;Set buffer
  124.         SetBuffer(ImageBuffer(gfxTileCompareStore))
  125.        
  126.         ;Clear comparison image
  127.         Color 0, 0, 0
  128.         Cls
  129.  
  130.         ;Get map tile
  131.         DrawBlockRect(gfxMap, 0, 0, (BX * TileWidth), (BY * TileHeight), TileWidth, TileHeight)
  132.                
  133.         ;Get total tiles to compare
  134.         compare = TC + CompareAtOnce
  135.         If (TC + CompareAtOnce > TilesMax) Then compare = TilesMax
  136.        
  137.         ;Get stored tile(s) to compare
  138.         counter = 1
  139.         For index = TC To compare - 1
  140.                 DrawBlock(gfxTileStore, TileWidth * counter, 0, index)
  141.                 counter = counter + 1
  142.                
  143.         Next
  144.        
  145.         ;Copy into Backbuffer
  146.         SetBuffer(BackBuffer())
  147.         Cls
  148.                
  149.         ;Draw  
  150.         DrawBlock(gfxTileCompareStore, 0, 16)
  151.        
  152. End Function
  153.  
  154. Function DisplayMap()
  155.         Local x, y
  156.        
  157.         ;Process
  158.         For y = 0 To MapSizeY - 1
  159.                 For x = 0 To MapSizeX - 1
  160.                         If (TileMap(x, y) <> -1) Then
  161.                                 DrawBlock(gfxTileStore, x * TileWidth, 100 + (y * TileHeight), TileMap(x, y))
  162.                                
  163.                         End If
  164.                        
  165.                 Next
  166.                
  167.         Next
  168.        
  169.         ;Draw
  170.         DrawBlock gfxMap, 260, 100
  171.        
  172. End Function
  173.  
  174. Function BuildMap()
  175.         Local BX, BY, TC, TB, TileCount
  176.         Local counter# = 0
  177.         Local matchIndex = -1
  178.         Local totalTiles# = (MapSizeX * MapSizeY)
  179.        
  180.         ; Work Thru Loaded Map
  181.         For BY = 0 To MapSizeY - 1
  182.                 For BX = 0 To MapSizeX - 1
  183.                         ;Trap ESC key
  184.                         If KeyDown(1) Then Return
  185.                        
  186.                         ;Prepare
  187.                         TC = 0
  188.                        
  189.                         ;Process
  190.                         For TC = 0 To TilesMax - 1 Step CompareAtOnce
  191.                                 ;Prepare comparision
  192.                                 PrepareMapComparison(BX, BY, TC)
  193.                                
  194.                                 ;Update display summary
  195.                                 Color 255, 255, 255
  196.                                 Text 0, 0, "X" + Right$("000" + (BX + 1), 3) + " Y" + Right$("000" + (BY + 1), 3) + " (" + MapSizeX + "x" + MapSizeY + ") "  + Right$("   " + Int((counter / totalTiles) * 100), 3) + "%"
  197.                                 Text 320, 0, "Found:" + Right$("0000" + TilesMax, 4)
  198.                                 ;Text 296, 0, "TF" + Right$("00000" + TilesMax, 5) + "/" + Right$("00000" + Int(counter), 5)
  199.                                 Flip
  200.                                
  201.                                 ;Validate if exists                            
  202.                                 matchIndex = CompareTiles(TC)
  203.                                 If (matchIndex <> -1) Then
  204.                                         ;Store result
  205.                                         TileMap(BX, BY) = matchIndex
  206.                                         Exit
  207.                                                                
  208.                                 End If
  209.  
  210.                         Next
  211.                        
  212.                         ;No match found?, if so create new tile
  213.                         If (matchIndex = -1) Then CreateTile(BX, BY)
  214.                        
  215.                         ;Increment counter
  216.                         counter = counter + 1
  217.                        
  218.                 Next
  219.         Next
  220.        
  221.         ;Save Map and Tiles
  222.         SaveTiles()
  223.         SaveTileMapData()
  224.         SaveTileMapMonkey()
  225.        
  226.         ;Set finalised message
  227.         Color 255, 255, 255
  228.         Text(0, 120, "Process complete! Press any key to exit...")
  229.         Flip
  230.        
  231.         ;Wait
  232.         WaitKey
  233.        
  234. End Function
  235.  
  236. ;Returns the index of the matching tile if found
  237. Function CompareTiles(TC)
  238.         Local x, y, index
  239.         Local compare
  240.         Local counter
  241.         Local ct
  242.         Dim ColorTiles(3, CompareAtOnce)
  243.        
  244.         ;Prepare
  245.         SetBuffer(ImageBuffer(gfxTileCompareStore))
  246.        
  247.         ;Set number of tiles to compare
  248.         compare = TC + CompareAtOnce
  249.         If (TC + CompareAtOnce > TilesMax) Then compare = TilesMax
  250.        
  251.         ;Search for existing tile match
  252.         For y = 0 To TileHeight - 1
  253.                 For x = 0 To TileWidth - 1
  254.                         ;Get image
  255.                         GetColor x, y
  256.                         ColorTiles(1, 0) = ColorRed()
  257.                         ColorTiles(2, 0) = ColorGreen()
  258.                         ColorTiles(3, 0) = ColorBlue()
  259.                        
  260.                         ;Process
  261.                         counter = 1
  262.                         For ct = TC To compare - 1
  263.                                 If (ColorTiles(0, counter) <> -1) Then
  264.                                         ;Get tile store image
  265.                                         GetColor x + (TileWidth * counter), y
  266.                                         ColorTiles(1, counter) = ColorRed()
  267.                                         ColorTiles(2, counter) = ColorGreen()
  268.                                         ColorTiles(3, counter) = ColorBlue()
  269.                                        
  270.                                         ;Validate
  271.                                         If (ColorTiles(1, 0) <> ColorTiles(1, counter) Or ColorTiles(2, 0) <> ColorTiles(2, counter) Or ColorTiles(3, 0) <> ColorTiles(3, counter)) Then
  272.                                                 ColorTiles(0, counter) = -1
  273.                                                
  274.                                         End If
  275.                                        
  276.                                 End If
  277.                                
  278.                                 ;Increment
  279.                                 counter = counter + 1
  280.                                                        
  281.                         Next
  282.                 Next
  283.         Next
  284.        
  285.         ;Validate
  286.         counter = 1
  287.         For index = TC To compare - 1
  288.                 ;Match?, if so return tile index
  289.                 If (ColorTiles(0, counter) <> -1) Then Return index
  290.                
  291.                 ;Increment
  292.                 counter = counter + 1
  293.                
  294.         Next
  295.        
  296.         ;Not found
  297.         Return -1
  298.                        
  299. End Function
  300.  
  301. Function SaveTiles()
  302.         Local BT
  303.         Local TX, TY
  304.         Local BX, BY
  305.         Local TC
  306.         Local gfxTileFinalStore
  307.        
  308.         Local finalImageWidth = 320
  309.         Local finalTileWidth = TileWidth
  310.         Local finalTileHeight = TileHeight
  311.        
  312.         ;Scale
  313.         If (ScaleTiles) Then
  314.                 ;finalImageWidth = finalImageWidth * 2
  315.                 finalTileWidth = finalTileWidth * 2
  316.                 finalTileHeight = finalTileHeight * 2
  317.                
  318.         End If
  319.        
  320.         ;Create store
  321.         FreeImage gfxTileFinalStore
  322.         TX = finalImageWidth / TileWidth
  323.         TY = Int((TilesMax - 1) / TX) + 1
  324.         gfxTileFinalStore = CreateImage(TX * (finalTileWidth + (TilePadding * 2)), TY * (finalTileHeight + (TilePadding * 2)))
  325.        
  326.         ;Set buffer    
  327.         SetBuffer(ImageBuffer(gfxTileFinalStore))
  328.         Color 0, 0, 0
  329.         Cls
  330.        
  331.         ;Output tiles to store
  332.         TC = 0
  333.         For BY = 0 To TY - 1
  334.                 For BX = 0 To TX - 1
  335.                         If TC <= TilesMax - 1
  336.                                 ;Grab image
  337.                                 SetBuffer(ImageBuffer(gfxTileStore,TC))
  338.                                 Local gfxTile = CreateImage(TileWidth, TileHeight)
  339.                                 GrabImage(gfxTile,0,0)
  340.                                
  341.                                 ;Scale?
  342.                                 If (ScaleTiles) Then gfxTile = ScaleImageFast(gfxTile, 2.0, 2.0)
  343.                                
  344.                                 ;Store
  345.                                 SetBuffer(ImageBuffer(gfxTileFinalStore))
  346.                                 DrawBlock(gfxTile, BX * (finalTileWidth + (TilePadding * 2)) + TilePadding, (BY * (finalTileHeight + (TilePadding * 2)) + TilePadding))
  347.                                
  348.                         End If
  349.                         TC = TC + 1
  350.                 Next
  351.         Next
  352.        
  353.         ;Save tiles to file
  354.         CreateFolder("map")
  355.         SaveImage(gfxTileFinalStore, "map" + MapName + ".bmp")
  356.        
  357.         ;Finalise
  358.         SetBuffer(BackBuffer())
  359.         FreeImage gfxTileFinalStore
  360.        
  361. End Function
  362.  
  363. Function SaveTileMapData()
  364.         Local fileName$ = "map" + MapName + ".tiles.map"
  365.         Local x, y
  366.        
  367.         ;Create file
  368.         CreateFolder("map")
  369.         Local file = WriteFile(fileName)
  370.  
  371.         ;Pad map?
  372.         Local msX = MapSizeX
  373.         Local msY = MapSizeY
  374.         If (MapPadding) Then msX = msX + 2
  375.         If (MapPadding) Then msY = msY + 2
  376.        
  377.         ;Scale tiles sizes?
  378.         Local tsX = TileWidth
  379.         Local tsY = TileHeight
  380.         If (ScaleTiles) Then tsX = (tsX * 2)
  381.         If (ScaleTiles) Then tsY = (tsY * 2)
  382.                
  383.         ;Output map summary
  384.         WriteString(file, MapName + ".png")                     ;Tile filename
  385.         WriteInt(file, TilesMax)                                        ;Total tiles
  386.         WriteInt(file, msX)                                             ;Map Size
  387.         WriteInt(file, msY)
  388.         WriteInt(file, tsX)                                             ;Tile Size
  389.         WriteInt(file, tsY)
  390.  
  391.         ;Output padding - top row?
  392.         If (MapPadding) Then WritePaddingRowData(file)
  393.        
  394.         ;Output map
  395.         For y = 0 To MapSizeY - 1
  396.                 ;Padding
  397.                 If (MapPadding) Then WriteInt(file, 0)
  398.                
  399.                 For x = 0 To MapSizeX - 1
  400.                         WriteInt(file, TileMap(x, y))
  401.                 Next
  402.                
  403.                 ;Padding
  404.                 If (MapPadding) Then WriteInt(file, 0)
  405.         Next
  406.  
  407.         ;Output padding - bottom row?
  408.         If (MapPadding) Then WritePaddingRowData(file)
  409.        
  410.         ;Close
  411.         CloseFile(file)
  412.        
  413. End Function
  414.  
  415. Function SaveTileMapMonkey()
  416.         Local fileName$ = "map" + MapName + ".tiles.monkey.txt"
  417.         Local x, y
  418.        
  419.         ;Create file
  420.         CreateFolder("map")
  421.         Local file = WriteFile(fileName)
  422.                
  423.         ;Pad map?
  424.         Local msX = MapSizeX
  425.         Local msY = MapSizeY
  426.         If (MapPadding) Then msX = msX + 2
  427.         If (MapPadding) Then msY = msY + 2
  428.        
  429.         ;Scale tiles sizes?
  430.         Local tsX = TileWidth
  431.         Local tsY = TileHeight
  432.         If (ScaleTiles) Then tsX = (tsX * 2)
  433.         If (ScaleTiles) Then tsY = (tsY * 2)
  434.        
  435.         ;Output map summary
  436.         WriteLine(file, "'#Region " + Chr(34) + " MapData " + Chr(34))
  437.         WriteLine(file, "       'Map summary")
  438.         WriteLine(file, "       'Map dump file: " + MapName + ".png")
  439.         WriteLine(file, "       Field TilesMax:Int=" + TilesMax)
  440.         WriteLine(file, "       Field MapSizeX:Int=" + msX)
  441.         WriteLine(file, "       Field MapSizeY:Int=" + msY)
  442.         WriteLine(file, "       Field TileWidth:Int=" + tsX)
  443.         WriteLine(file, "       Field TileHeight:Int=" + tsY)
  444.         WriteLine(file, "")
  445.         WriteLine(file, "       'Map Data")
  446.         WriteLine(file, "       Field TileMap:=[")
  447.        
  448.         ;Output padding - top row?
  449.         If (MapPadding) Then WritePaddingRowMonkey(file)
  450.                
  451.         ;Output Map
  452.         For y = 0 To MapSizeY - 1
  453.                 Local mapRow$ = ""
  454.                
  455.                 ;Padding?
  456.                 If (MapPadding) Then mapRow = "0"
  457.                
  458.                 ;Build row data
  459.                 For x = 0 To MapSizeX - 1
  460.                         If (Len(mapRow) > 0) Then mapRow = mapRow + ","
  461.                         mapRow = mapRow + Str(TileMap(x, y))
  462.                 Next
  463.                
  464.                 ;Padding?
  465.                 If (MapPadding) Then mapRow = mapRow + ",0"
  466.                
  467.                 ;Append to end of row?
  468.                 Select MapPadding
  469.                         Case True
  470.                                 mapRow = mapRow + ","
  471.                         Case False
  472.                                 If (y < MapSizeY - 1) Then mapRow = mapRow + ","
  473.                                 If (y = MapSizeY - 1) Then mapRow = mapRow + "]"
  474.                 End Select
  475.                
  476.                 ;Finalise
  477.                 mapRow = "      " + mapRow
  478.                
  479.                 ;Write row
  480.                 WriteLine(file, mapRow)
  481.                
  482.         Next   
  483.        
  484.         ;Output padding - botton row?
  485.         If (MapPadding > 0) Then WritePaddingRowMonkey(file, True)
  486.  
  487.         ;Finalise
  488.         WriteLine(file, "")
  489.         WriteLine(file, "'#End Region")
  490.        
  491.         ;Close 
  492.         CloseFile(file)
  493.  
  494. End Function
  495.  
  496. Function WritePaddingRowData(file)
  497.         Local x
  498.        
  499.         ;Get width
  500.         Local width = MapSizeX
  501.         If (MapPadding) Then width = width + 2
  502.        
  503.         ;Write
  504.         For x = 0 To width - 1
  505.                 WriteInt(file, 0)
  506.         Next
  507.        
  508. End Function
  509.  
  510. Function WritePaddingRowMonkey(file, isLast=False)
  511.         Local paddingRow$ = ""
  512.         Local x
  513.        
  514.         ;Get width
  515.         Local width = MapSizeX
  516.         If (MapPadding) Then width = width + 2
  517.        
  518.         ;Build row data
  519.         For x = 0 To width - 1
  520.                 If (Len(paddingRow) > 0) Then paddingRow = paddingRow + ","
  521.                 paddingRow = paddingRow + "0"
  522.         Next
  523.        
  524.         ;Append to end of row?
  525.         If (Not isLast) Then paddingRow = paddingRow + ","
  526.         If (isLast) Then paddingRow = paddingRow + "]"
  527.  
  528.         ;Finalise
  529.         paddingRow = "  " + paddingRow
  530.  
  531.         ;Write row
  532.         WriteLine(file, paddingRow)
  533.        
  534. End Function
  535.  
  536. Function CreateFolder(path$)
  537.         Local folder$ = SystemProperty("appdir") + path
  538.         CreateDir(folder)
  539.        
  540. End Function
  541.  
  542.  
  543. ;sswift - Scales the image without blurring
  544. Function ScaleImageFast(SrcImage, ScaleX#, ScaleY#)
  545.         Local SrcWidth,  SrcHeight
  546.         Local DestWidth, DestHeight
  547.         Local ScratchImage, DestImage
  548.         Local SrcBuffer, ScratchBuffer, DestBuffer
  549.         Local X1, Y1, X2, Y2
  550.  
  551.         ;Get the width and height of the source image.  
  552.         SrcWidth  = ImageWidth(SrcImage)
  553.         SrcHeight = ImageHeight(SrcImage)
  554.  
  555.         ;Calculate the width and height of the dest image.
  556.         DestWidth  = Floor(SrcWidth  * ScaleX#)
  557.         DestHeight = Floor(SrcHeight * ScaleY#)
  558.  
  559.         ;If the image does not need to be scaled, just copy the image and exit the function.
  560.         If (SrcWidth = DestWidth) And (SrcHeight = DestHeight) Then Return CopyImage(SrcImage)
  561.  
  562.         ;Create a scratch image that is as tall as the source image, and as wide as the destination image.
  563.         ScratchImage = CreateImage(DestWidth, SrcHeight)
  564.                                
  565.         ;Create the destination image.
  566.         DestImage = CreateImage(DestWidth, DestHeight)
  567.  
  568.         ;Get pointers to the image buffers.
  569.         SrcBuffer     = ImageBuffer(SrcImage)
  570.         ScratchBuffer = ImageBuffer(ScratchImage)
  571.         DestBuffer    = ImageBuffer(DestImage)
  572.  
  573.         ;Duplicate columns from source image to scratch image.
  574.         For X2 = 0 To DestWidth-1
  575.                 X1 = Floor(X2 / ScaleX#)
  576.                 CopyRect X1, 0, 1, SrcHeight, X2, 0, SrcBuffer, ScratchBuffer
  577.         Next
  578.                        
  579.         ;Duplicate rows from scratch image to destination image.
  580.         For Y2 = 0 To DestHeight-1
  581.                 Y1 = Floor(Y2 / ScaleY#)
  582.                 CopyRect 0, Y1, DestWidth, 1, 0, Y2, ScratchBuffer, DestBuffer
  583.         Next
  584.                                                
  585.         ;Free the scratch image.
  586.         FreeImage ScratchImage                                 
  587.                                                
  588.         ;Return the new image.
  589.         Return DestImage
  590.                                        
  591. End Function
  592.  
  593. Function ReadIniFile()
  594.         Local fileName$="Config.ini"
  595.         Local stream = ReadFile(fileName)
  596.         Local l$,flag$,value$
  597.        
  598.         ;Validate
  599.         If (Not stream) Then Return
  600.        
  601.         ;Scan
  602.         While Not Eof(stream)
  603.                 l = ReadLine(stream)
  604.                 flag = Upper(GetIniFlag(l))
  605.                 value = GetIniValue(l)
  606.                
  607.                 ;Validate
  608.                 Select Upper(value)
  609.                         Case "TRUE"
  610.                                 value = 1
  611.                         Case "FALSE"
  612.                                 value = 0
  613.                         Default
  614.                                 ;DO nothing
  615.                 End Select
  616.                                
  617.                 ;Assign
  618.                 Select flag
  619.                         Case "SCALETILES"
  620.                                 ScaleTiles = value
  621.                         Case "TILEWIDTH"
  622.                                 TileWidth = value
  623.                         Case "TILEHEIGHT"
  624.                                 TileHeight = value
  625.                         Case "TILEPADDING"
  626.                                 TilePadding = value
  627.                         Case "MAPPADDING"
  628.                                 MapPadding = value
  629.                         Default
  630.                                 ;DO nothing
  631.                 End Select
  632.                
  633.         Wend
  634.        
  635.         ;Finalise
  636.         CloseFile(stream)
  637.        
  638. End Function
  639.  
  640. Function GetIniFlag$(l$)
  641.         Local pos = Instr(l,"=")
  642.         If (pos = 0) Then Return l
  643.         Return Mid(l,1,pos-1)
  644. End Function
  645.  
  646. Function GetIniValue$(l$)
  647.         Local pos = Instr(l,"=")
  648.         If (pos = 0) Then Return ""
  649.         Return Mid(l,pos + 1,Len(l) - pos)
  650. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal