{ From: Bschor@vms.cis.pitt.edu > Now the problem. "Seek(F, I)" will only take ONE integer at a time!! > Naturally I need two. I'm trying to run it so that at each virtual > "square" a user can define a different message, monster, etc. And the > file i'm writing to must be able to define between X & Y, [(1,2) for > example], or both of them togeter [E.G. Two steps to the right, two steps > forward = (2,2)]. HOW DO I DO THIS??? If I understand the question correctly, you are asking how to map a two-dimensional structure (a 2-D map of your world) into a 1-dimensional data structure (a file). Ah, my ancient Fortran knowledge does come in useful ... The following works for arrays of any dimension, though you need to have the array size fixed. Suppose you have dimensioned World into R rows, C columns, and L layers (I'm doing 3-D, just to show how it can be done). To make it all very clear, I'll define the world as either a 3-D or linear structure, using the Pascal Variant Record type. } CONST rows = 30; columns = 40; layers = 5; rooms = 6000; { rows * columns * layers } TYPE rowtype = 1 .. rows; columntype = 1 .. columns; layertype = 1 .. layers; roomnumbertype = 1 .. rooms; roomtype = RECORD { you define as needed } END; worldtype = RECORD CASE (d3, d1) of d3 : (spatial: ARRAY [layertype, rowtype, columntype] OF roomtype); d1 : (linear : ARRAY [roomnumbertype] OF roomtype); END; { Basically, you determine an order you wish to store the data. Suppose you say "Start with the first layer, the first row, the first column. March across the columns, then move down a row and repeat across the columns; when you finish a layer, move down to the next layer and repeat". Clearly Layer 1, Row 1, Column C maps to Room C. Since each row has "columns" columns, then the mapping of Layer 1, Row R, Column C is to Room (R-1)*columns + C. The full mapping is -- } FUNCTION roomnumber (layer : layertype; row : rowtype; column : columntype) : roomnumbertype; BEGIN { roomnumber } roomnumber := column + pred(row)*columns + pred(layer)*columns*rows END; { Note you can also map in the other direction:} FUNCTION layer (roomnumber : roomnumbertype) : layertype; BEGIN { layer } layer := succ (pred(roomnumber) DIV (columns * rows)) END; FUNCTION row (roomnumber : roomnumbertype) : rowtype; BEGIN { row } row := succ ((pred(roomnumber) MOD (columns * rows)) DIV columns) END; FUNCTION column (roomnumber : roomnumbertype) : columntype; BEGIN { column } column := succ (pred(roomnumber) MOD columns) END; { Putting it all together, suppose you have a room, "room", with room number "roomnumber", that you want to put into the world. } VAR world : worldtype; room : roomtype; roomnumber : roomnumbertype; WITH world DO BEGIN spatial[layer(roomnumber), row(roomnumber), column(roomnumber)] := room END; { The above fragment stores a room into the three-dimensional world. Of course, if you know the room number (which we do), you can also simply } WITH world DO linear[roomnumber] := room { For the original question, note that the "roomnumber" function gives you the record number for the Seek procedure (you may need to offset by 1, depending on how Seek is implemented ...). }