Contents
Articles
Behaviors
Books
Director News
Director Web Sites
FAQ
Games
Mailing Lists
News Groups
Project Examples
Reviews
Software
Tools
Useful Web Sites
Utilities
Xtras

Don't miss these
Wind-Xtra
Make Projector
Simple Distance Blend
Stub Mac Projector
rescale
Mac Drive
SinTaxer
Random Integer - Shuffle
toggle a global variable with button
Direct-L
 

 

 

Behavior Creating an object that simulates an array

Added on 7/2/1999

 

Compatibilities:
D6_5 D7 D8 Mac PC Script

This item has not yet been rated

Author: Penworks (website)

Reproduced with permission from Penworks Lingo User"s Journal

-- Source Code from the Lingo User"s Journal
-- Copyright (c) 1995 by Penworks Corporation

-- Array Script

property iFirstRow  -- lower row bound
property iLastRow   -- upper row bound
property inRows      -- number of rows
property iFirstCol   -- lower column bound
property iLastCol    -- upper column bound
property iInitialValue -- initial value (for initialization)
property inCols       -- number of columns, (saved for speed)
property iCellList   -- the data of the array
property iRangeCheckFlag  -- flag used for debugging


-- Create the array passing the row and column lower and upper
-- bounds and an initial value
on birth me, firstRow, lastRow, firstCol, lastCol, initialValue
  set iFirstRow = firstRow
  set iLastRow = lastRow
  set inRows = iLastRow - iFirstRow + 1
  set iFirstCol = firstCol
  set iLastCol = lastCol
  set iInitialValue = initialValue
  set inCols = iLastCol - iFirstCol + 1
  set inCells = inRows * inCols
-- Create the actual array as a list
  set iCellList = []
  repeat with i = 1 to inCells
    add(iCellList, initialValue)
  end repeat
  set iRangeCheckFlag = FALSE
  return me
end birth


-- Used to set the value of one cell in the array
on mSet me, theRow, theCol, theValue
  if iRangeCheckFlag then
    if (theRow < iFirstRow) or (theRow > iLastRow) then
      alert("Invalid row index to mSet, value is:" && theRow & RETURN & ...
               "Valid values are from"  && iFirstRow && "to" && iLastRow)
      exit
    end if
    if (theCol < iFirstCol) or (theCol > iLastCol) then
      alert("Invalid column index to mSet, value is:" && theCol & RETURN &
...
               "Valid values are from"  && iFirstCol && "to" && iLastCol)
      exit
    end if
  end if
  
  set theCell = ((theRow - iFirstRow) * inCols) + (theCol - iFirstCol) + 1
  setAt(iCellList, theCell, theValue)
end mSet

-- Used to get the value of one cell in the array
on mGet me, theRow, theCol
  if iRangeCheckFlag then
    if (theRow < iFirstRow) or (theRow > iLastRow) then
      alert("Invalid row index to mGet, value is:" && theRow & RETURN &...
               "Valid values are from"  && iFirstRow && "to" && iLastRow)
      exit
    end if
    if (theCol < iFirstCol) or (theCol > iLastCol) then
      alert("Invalid column index to mGet, value is:" && theCol & RETURN ...
               "Valid values are from"  && iFirstCol && "to" && iLastCol)
      exit
    end if
  end if
  
  set theCell = ((theRow - iFirstRow) * inCols) + (theCol - iFirstCol) + 1
  return getAt(iCellList, theCell)
end mGet

-- Used to turn on or off range checking
on mSetRangeChecking me, trueOrFalse
  set iRangeCheckFlag = trueOrFalse
end mSetRangeChecking


-- Give back memory before disposing of the array object
on mCleanup me
  set iCellList = []
end mCleanup

-- Resets the value of all cells to the initial value
on mReInitialize me
  repeat with thisCell = 1 to inCells
    setAt(iCellList, thisCell, initialValue)
  end repeat
end mReInitialize

-- Prints the contents of the array to the message window
on mDebug me
  repeat with i = iFirstRow to iLastRow
    set thisRow = ""
    repeat with j = iFirstCol to iLastCol
      set thisRow = thisRow && mGet(me, i, j)
    end repeat
    put thisRow
  end repeat  
end mDebug

 


Contact

MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA

Send e-mail