Scott Harrison's RAT Notes (written in RAN format.. "ridiculous ascii notation") 09/27/1999 Start Who is using RAT? Instructor/Student/Guest Domain file names [domain]_[user]_[resource].rat to do: * implement fancy resource rat widget * implement fancy resource linking information interface widget * implement resources on rat Program documentation GLOBAL VARIABLES row array maps row id to display (example, d=row[i] where 'd' is display and 'i' is id) used by insertrow, findrow, horizontal, joinres, draw, main maxrow scalar number of elements-2 in row array (the last element number in the array, -1 for empty array) used by insertrow, findrow, horizontal, joinres, draw col array maps col id to display (example, d=row[i] where 'd' is display and 'i' is id) used by insertrow, insertcol, findcol, maprow, comingthru, horizontal, joinres, drawrow, draw, main maxcol scalar number of elements-2 in col array (the last element number in the array, -1 for empty array) used by insertcol, findcol, maprow, comingthru, insertport, drawrow, draw colmap array in order of display ids which object is in which column used by maprow, comingthru, insertport, horizontal, drawrow, draw, colmap2 array temporary used by drawrow colmap3 array temporary used by drawrow colmap4 array temporary used by drawrow colmap5 array temporary used by drawrow obj array appended array with drawing objects (which are blocks, verticals, horizontals, and conditions), never emptied used by insertrow, maprow, insertport, addobj, horizontal, joinres, drawrow, draw, main maxobj scalar number of values in obj array-2 (last element, -1 for empty) used by NOTHING rowcont array object ids in a row used by insertrow, maprow, addobj, drawrow, draw, main rowtype array row ids to type used by insertrow, drawrow, main coltype array col ids to type used by insertcol, insertport, drawrow, main rrow array display to id (reverse hash of row) used by draw rcol array display to id (reverse hash of row) used by drawrow, draw cw array column width (temporary) used by drawcell, draw rh array row height (temporary) used by drawrow, draw, data1,data2,data3,data4 array used to buffer memory so that javascript does not CRASH! used by drawrow, insertrow, insertport functions main - invokes RAT \ \ initializes rows, with resources labelled 5, 4, 3, and 7 insert thirteen columns from the left side perform 3 testing swaps initialize maxrow define starting objects (blocks: 3,4,5,7) create 12 joinings between these resources! (joinres ... see below) draw in debugging editting mode! \ b&rowID&colID:inObj:outObj:outCond&... \ h&rowID&incolID:outcolID&inObj:outObj&inupdown:outupdown \ v&colID&inObj:outObj&updown \ simple javascript / \ / / open, configure, and clear a debugging javascript window/ / | | go through all objects and display object information ----------------------- | write out the value of col array ------- counting col ids from 0 to maxcol, print out a comma separated list of display locations | write out the value of row array ------- counting row ids from 0 to maxrow, print out a comma separated list of display locations | find all the display rows (findrow) from 0 to last row, ------------------------------ findrow: does this my running through all rows and waiting till the value of an array | index matches the row to display, returns row id map this row (maprow), and output the results (colmap and rowcont) onto |________________________________ | \ | -- a debugging window with column id, colmap, and rowcont | where colmap specifies where objects occur within a row based on "display column" location | where rowcont is the objects within a row and | | | initialize display-to-id array rrow (so that rrow[display] equals original row id) | initialize display-to-id array rcol (so that rcol[display] equals original col id) | initialize row height and column width values where rh[1] is short row, rh[2] is tall row, cw[1] is skinny column, cw[2] is fat column | set javascript RAT display window options (javascript stuff...) | output HTML beginning to RAT display window | run through the rows to display, convert from display row # to row id (rrow) and draw in edit mode (drawrow) | | drawrow begins by clearing out and initializing these temporary arrays colmap,colmap2,colmap3,colmap4,colmap5 output HTML beginning to row set to rowtype height (from row id) if there are contents in the row (rowcont[jid] display them (else just end HTML row) run through all the objects in row if object is a 'b'lock object do a lot of amazing things to position resource within block and draw arrows connecting into block in another amazing feat of code if object is a 'h'orizontal object grab input column id and output column id and depending whether input is less than output in display position draw left-right arrow line or right-left arrow line and set leftmost position and rightmost position look at inupdown and outupdown if inupdown (means what ??) then draw top-to-right line, set colmap2 and colmap3 else draw right-to-down line if outupdown (means what ??) then draw top-to-left line, set colmap2 and colmap3 else draw left-to-down line if object is a 'v'ertical object set left to display column and USE THIS as the position if there is another element found in the colmap it must be horizontal so draw top-down-right-left intersection ('tdrl') else draw top-to-down or down-to-top depending on 'v'ertical object specification set colmap2[left] and colmap3[left] to a plain vertical line run through columns and draw cells drawcell draws in edit mode html stuff ------------------------------------- rtype is set to type of row, the cell is drawn with drawcell then using colmap2 and colmap3 draw two more up-down elements in rows below if rowtype is 2 *************** joinres from A to B calculate where in the middle of first object is a good place to insert outcoming path calculate where in the middle of second object is a good place to insert incoming path insert the ports based on the objects, the distance from middle of one object to other object, and direction if A is below B, then loop around..set updown! else set updown the other way if inrow equals outrow just draw connecting horizontal element if updown one way then go from row to row finding good columns to go through (comingthru) if there is NO GOOD COLUMN THEN INSERT A ROW! (insertrow) if updown the other way then go from row to row finding good columns to go through (comingthru) if there is NO GOOD COLUMN THEN INSERT A ROW! (insertrow) *************** comingthru see where you can bulldoze..more to write here *************** insertrow make sure you can bulldoze..more to write here Help Documentation on RAT Developer Documentation on RAT