TGC Codebase Backup



AutoWin by Galiem Vaelant

30th Dec 2004 20:47
Summary

Autonomous Win-Based Menus



Description

This is a script based menu system with automated production of menus media and active range data with customizable colors and fonts, as well as a massive 20x20x20 top, drop, and slide menu dimensions space to work in.

Please observe that the code here is for two programs. The top program is MenuMaker, which actually creates the media, and below that, seperated by a commented out line composed of slashes, is the main application & windows system display code. Below that, seperated by another commented out slash line is the source for a program that will automatically generate two source files that need to be included in the main application.

Attached is a text file demonstrating an example of the script, which also includes directions on how to use this system. Screenshots attached are edited so that the website would accept them, and should not be taken to represent the quality of appearance of the actual system.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    `Menu Media and Active Ranges Generator (Script Parser)
Rem Project: MenuMaker
Rem Created: 12/21/2004 17:26:38

Rem ***** Main Source File *****

Rem Project: S(N)
Rem Created: 11/24/2004 13:51:03

Rem ***** Main Source File *****

IF FILE EXIST("menumap_current.txt")
DELETE FILE "menumap.txt"
COPY FILE "menumap_current.txt","menumap.txt"
DELETE FILE "menumap_current.txt"
ENDIF

SET IMAGE COLORKEY 255,0,255
`-----------------------------------------------------------------------------------------------
IF PATH EXIST("Sprites") = 1
DELETE DIRECTORY "Sprites"
MAKE DIRECTORY "Sprites"
ENDIF

OPEN TO READ 1,"menumap.txt"
READ STRING 1,font$
READ STRING 1,size$
READ STRING 1,Title$
size = VAL(size$)

top_dir$ = GET DIR$()

IF PATH EXIST("MenMedia") = 1
DELETE DIRECTORY "MenMedia"
MAKE DIRECTORY "MenMedia"
SET DIR "MenMedia"
ELSE
MAKE DIRECTORY "MenMedia"
SET DIR "MenMedia"
ENDIF

prep(font$,size,Title$)

` Use menu_media_count to see if the menu script has had items added or removed
` by counting the media used in displaying the menu and comparing it to the media needed
` according to the value entered in the script text file
READ STRING 1,Images$


`Move working directory back to program top
directory$ = GET DIR$()
clipit = LEN(directory$)
DEC clipit,9
directory$ = LEFT$(directory$,clipit)
SET DIR directory$

name$ = "begin"
tick = 0
tock = 0
tack = 0
INK RGB(0,0,0),RGB(0,0,0)
menu_data_bucket()

DIM total_items(1)
items = 0
WHILE name$ <> "End"
SET CURRENT BITMAP 0
CLS RGB(0,0,0)
INK RGB(247,247,247),RGB(247,247,247)
TEXT 0,0,"Reading Menus Script"
TEXT 0,20,STR$(items)+" items read"
WAIT 1
INC items
   READ STRING 1,name$

      IF Left$(name$,1) = "+"
         tock = 0
         mode = 0
         INC tick
         clipit = LEN(name$)
         DEC clipit,1
         name$ = RIGHT$(name$,clipit)
         make_menu_data(name$,mode,tick,tock,tack)
      ENDIF

      IF Left$(name$,1) = "-"
         tack = 0
         mode = 1
         INC tock
         clipit = LEN(name$)
         DEC clipit,1
         name$ = RIGHT$(name$,clipit)
         make_menu_data(name$,mode,tick,tock,tack)
      ENDIF

      IF Left$(name$,1) = ":"
         mode = 2
         INC tack
         clipit = LEN(name$)
         DEC clipit,1
         name$ = RIGHT$(name$,clipit)
         make_menu_data(name$,mode,tick,tock,tack)
      ENDIF
ENDWHILE

total_items(0) = items*3
CLS RGB(0,0,0)
SYNC

col = 0
WHILE name$ <> "End Colors"
READ STRING 1,name$
colors(col) =VAL(name$)
INC col
ENDWHILE

makeskins()
cleanup()
consolidate()
prep2(top_dir$)
correct_script(top_dir$)
EXIT

FUNCTION menu_data_bucket()
` This function creates the arrays necessary to create menu data

DIM menu1_filenames(20,2) as string
DIM menu2_filenames(20) as string
DIM menu2_filenames_selected(20,20) as string
DIM menu2_filenames_highlighted(20,20) as string
DIM menu3_filenames(20,20) as string
DIM menu3_filenames_highlighted(20,20,20) as string
DIM menu3_filenames_selected(20,20,20) as string

` Qty of items in top menu
DIM menu1_qty(1)

` Qty of items in each submenu
DIM menu2_qty(20)

` Qty of items in each slide out menu
DIM menu3_qty(20,20)

` Name of each item in top menu where leftmost = 0
DIM menu1_name(20) as string

` Name of each item in each submenu
` Dimensions = top menu item number where leftmost = 0, slave menu item number where topmost = 0
DIM menu2_name(20,20) as string

` Name of each item in each drop down menu
` First two dimensions work the same as above
` Third dimension = position number for slide out menu item, where leftmost = 0
DIM menu3_name(20,20,20) as string

` Width of top menu buttons
DIM menu1_width(1)

` Height of top menu
DIM menu1_height(1)

` Width of each submenu
` Reference by tick
DIM menu2_width(20)

` Width of each submenu
` Reference by tick
DIM menu2_height(20)

` Height of each slide out menu
` Reference by tick, tock
DIM menu3_height(20,20)

` Width of each slide out menu
` Reference by tick,tock
DIM menu3_width(20,20)

DIM colors(12)

ENDFUNCTION

FUNCTION make_menu_data(name as string,mode,tick,tock,tack)

SELECT mode
   CASE 0:
      a = TEXT WIDTH(name) + 4
      b = TEXT HEIGHT(name) + 2

      menu1_qty(0) = tick
      menu1_name(menu1_qty(0)-1) = name

      `Menu 1 Width is used to determine size of top menu buttons, but not top menu media width
         IF a > menu1_width(0)
            menu1_width(0) = a + 4
         ENDIF

         IF b > menu1_height(0)
            menu1_height(0) = b + 2
         ENDIF
   ENDCASE

  CASE 1:
     a = TEXT WIDTH(name) + 4
     b = TEXT HEIGHT(name) + 2

     menu2_qty(tick-1) = tock
     menu2_name(tick-1,tock-1) = name

        IF a > menu2_width(tick-1) + 4
           menu2_width(tick-1) = a + 4
        ENDIF

        IF b > menu2_height(tick-1) + 2
           menu2_height(tick-1) = b + 2
        ENDIF
  ENDCASE

  CASE 2:
      a = TEXT WIDTH(name) + 4
      b = TEXT HEIGHT(name) + 2

      menu3_qty(tick-1,tock-1) = tack
      menu3_name(tick-1,tock-1,tack-1) = name

        IF a > menu3_width(tick-1,tock-1) + 4
           menu3_width(tick-1,tock-1) = a + 4
        ENDIF

        IF b > menu3_height(tick-1,tock-1) + 2
           menu3_height(tick-1,tock-1) = b + 2
        ENDIF

  ENDCASE
ENDSELECT


ENDFUNCTION

FUNCTION prep(font as string, size,Title as string)

EMPTY CHECKLIST
PERFORM CHECKLIST FOR DISPLAY MODES


sssx =0
sssy = 0
sssz = 0
FOR T = 1 TO CHECKLIST QUANTITY()
IF CHECKLIST VALUE A(T) > sssx
sssx = CHECKLIST VALUE A(T)
ENDIF
IF CHECKLIST VALUE B(T) > sssy
sssy = CHECKLIST VALUE B(T)
ENDIF
IF CHECKLIST VALUE C(T) > sssz
sssz = CHECKLIST VALUE C(T)
ENDIF
NEXT T


SET WINDOW ON
SET DISPLAY MODE sssx,sssy,sssz
SET WINDOW TITLE "MenSys Resources"
SET WINDOW LAYOUT 1,1,0
`HIDE WINDOW
MAXIMIZE WINDOW
SET TEXT FONT font
SET TEXT SIZE size
SET TEXT TRANSPARENT

`CLS RGB(255,0,255)

ENDFUNCTION

FUNCTION makeskins()

      IF PATH EXIST("MenMedia") = 1
      SET DIR "MenMedia"
      PERFORM CHECKLIST FOR FILES
      FOR T = 1 TO CHECKLIST QUANTITY()
      file$ = CHECKLIST STRING$(T)
      IF file$ <> "." AND file$ <> ".." AND file$ <> "to screen"
      DELETE FILE file$
      ENDIF
      NEXT T
      ELSE
      MAKE DIRECTORY "MenMedia"
      SET DIR "MenMedia"
      ENDIF

`Top bar media
`-----------------------------------------------------------------------------------------------

barwidth = SCREEN WIDTH()
barheight = menu1_height(0)

CREATE BITMAP 1,barwidth,barheight
CLS RGB(colors(0),colors(1),colors(2))

Images = 1
a = menu1_width(0)
b = menu1_height(0)

` Create top bar normal state bitmap
   FOR T = 1 TO menu1_qty(0)
   SET CURRENT BITMAP 0
   CLS RGB(0,0,0)
   INK RGB(247,247,247),RGB(247,247,247)
   percentage# = (Images * 100.0)/total_items(0)
   TEXT 0,0,"Creating Initial Media, Percent Done: "
   SET CURSOR TEXT WIDTH("Creating Initial Media, Percent Done: "),0
   PRINT percentage#
   TEXT 0,20,STR$(Images)+" Images Created Out Of "+STR$(total_items(0))
   WAIT 1
   SET CURRENT BITMAP 1
      INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
      c = (a * (T - 1)) + a/2
      d = (a * T) - 1
      CENTER TEXT c,3,menu1_name(T-1)
      INK RGB(colors(3)-80,colors(4)-80,colors(5))-30,RGB(colors(0),colors(1),colors(2))
      INK RGB(0,0,0),RGB(0,0,0)
   NEXT T
   GET IMAGE 1,0,0,barwidth,barheight,1
   MAKE MEMBLOCK FROM image 1,Images
   OPEN TO WRITE 2,"1"
   WRITE MEMBLOCK 2,1
   CLOSE FILE 2
   DELETE MEMBLOCK 1
   DELETE BITMAP 1

   Images = 1
` Create Highlighted State Bitmaps for Each Button in the Top Bar
FOR T = 1 TO menu1_qty(0)
   SET CURRENT BITMAP 0
   CLS RGB(0,0,0)
   INK RGB(247,247,247),RGB(247,247,247)
   percentage# = (Images * 100.0)/total_items(0)
   TEXT 0,0,"Creating Initial Media, Percent Done: "
   SET CURSOR TEXT WIDTH("Creating Initial Media, Percent Done: "),0
   PRINT percentage#
   TEXT 0,20,STR$(Images)+" Images Created Out Of "+STR$(total_items(0))
   WAIT 1
   CREATE BITMAP 1,a,b
   SET CURRENT BITMAP 1
   CLS RGB(colors(3),colors(4),colors(5))
   INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
   c = a/2 - 1
   CENTER TEXT c,2,menu1_name(T-1)
   INK RGB(colors(6),colors(7),colors(8)),RGB(colors(0),colors(1),colors(2))
   LINE 0,b-1,a-1,b-1
   LINE a-1,0,a-1,b-1
   INC Images
   GET IMAGE Images,0,0,a,b,1
   name$ = Str$(T)
   MAKE MEMBLOCK FROM Image 1,Images
   menu1_filenames(T-1,1) = ("H " + name$)
   OPEN TO WRITE 2,("H " + name$)
   WRITE MEMBLOCK 2,1
   CLOSE FILE 2
   DELETE MEMBLOCK 1
   SET CURRENT BITMAP 0
   d = a*(T-1)
   DELETE BITMAP 1
NEXT T

` Create Selected State Bitmaps for Each Button in the Top Bar
FOR T = 1 TO menu1_qty(0)
   SET CURRENT BITMAP 0
   CLS RGB(0,0,0)
   INK RGB(247,247,247),RGB(247,247,247)
   percentage# = (Images * 100.0)/total_items(0)
   TEXT 0,0,"Creating Initial Media, Percent Done: "
   SET CURSOR TEXT WIDTH("Creating Initial Media, Percent Done: "),0
   PRINT percentage#
   TEXT 0,20,STR$(Images)+" Images Created Out Of "+STR$(total_items(0))
   WAIT 1
   CREATE BITMAP 1,a,b
   SET CURRENT BITMAP 1
   CLS RGB(colors(9),colors(10),colors(11))
   INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
   c = a/2 + 1
   CENTER TEXT c,4,menu1_name(T-1)
   INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
   LINE 0,0,a,0
   LINE 0,0,0,b
   INC Images
   GET IMAGE Images,0,0,a,b,1
   name$ = STR$(T)
   MAKE MEMBLOCK FROM Image 1,Images
   menu1_filenames(T-1,2) = ("S " + name$)
   OPEN TO WRITE 2,("S " + name$)
   WRITE MEMBLOCK 2,1
   CLOSE FILE 2
   DELETE MEMBLOCK 1
   SET CURRENT BITMAP 0
   d = a*(T-1)
   DELETE BITMAP 1
NEXT T

`Other Menus
`-----------------------------------------------------------------------------------------------
T = 1
W = menu1_qty(0)

Drop = 1
Drophi = 1
DropSel = 1

Slide = 1
Slidehi = 1
SlideSel = 1


WHILE T <= (W)
name$ = "NULL"
Tub = 0

barheight = menu2_height(T-1)
barwidth = menu2_width(T-1)
f = barheight * menu2_qty(T-1)

CREATE BITMAP 1,barwidth,f
CLS RGB(colors(0),colors(1),colors(2))

   U = 0
   SET CURRENT BITMAP 0
   CLS RGB(0,0,0)
   INK RGB(247,247,247),RGB(247,247,247)
   percentage# = (Images * 100.0)/total_items(0)
   TEXT 0,0,"Creating Initial Media, Percent Done: "
   SET CURSOR TEXT WIDTH("Creating Initial Media, Percent Done: "),0
   PRINT percentage#
   TEXT 0,20,STR$(Images)+" Images Created Out Of "+STR$(total_items(0))
   WAIT 1
   SET CURRENT BITMAP 1
   WHILE U <= menu2_qty(T-1)
      INC Tub
      Bob = 0
      INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
      c = 2 + barheight * (U)
      d = (barheight * U) - 1
      k = barwidth/2
      CENTER TEXT k,c,menu2_name(T-1,U)
      INK RGB(colors(3)-80,colors(4)-80,colors(5))-30,RGB(colors(0),colors(1),colors(2))
      LINE 0,d,barwidth,d
      INK RGB(0,0,0),RGB(0,0,0)
      LINE 0,d-1,barwidth,d-1

            IF Tub <= menu2_qty(T-1)
            INC Drophi
            CREATE BITMAP 2,barwidth,barheight
            CLS RGB(colors(3),colors(4),colors(5))
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            CENTER TEXT k-1,2,menu2_name(T-1,U)
            INK RGB(colors(6),colors(7),colors(8)),RGB(colors(0),colors(1),colors(2))
            LINE 0,barheight-1,barwidth-1,barheight-1
            LINE barwidth-1,0,barwidth-1,barheight-1
            INC Images
            GET IMAGE Images,0,0,barwidth,barheight,1
            name$ = ("DH "+Str$(T)+" "+Str$(U)+" "+Str$(Drophi))
            menu2_filenames_highlighted(T-1,U) = name$
            MAKE MEMBLOCK FROM Image 2,Images
            OPEN TO WRITE 2,name$
            WRITE MEMBLOCK 2,2
            CLOSE FILE 2
            DELETE MEMBLOCK 2
            SET CURRENT BITMAP 0
            DELETE BITMAP 2
            SET CURRENT BITMAP 1

            INC DropSel
            CREATE BITMAP 2,barwidth,barheight
            CLS RGB(colors(9),colors(10),colors(11))
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            CENTER TEXT k-1,2,menu2_name(T-1,U)
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            LINE 0,0,barwidth-1,0
            LINE 0,0,0,barheight-1
            INC Images
            GET IMAGE Images,0,0,barwidth,barheight,1
            name$ = ("DS "+Str$(T)+" "+Str$(U)+" "+Str$(Dropsel))
            menu2_filenames_selected(T-1,U) = name$
            MAKE MEMBLOCK FROM IMAGE 2,Images
            OPEN TO WRITE 2,name$
            WRITE MEMBLOCK 2,2
            CLOSE FILE 2
            DELETE MEMBLOCK 2
            SET CURRENT BITMAP 0
            DELETE BITMAP 2
            SET CURRENT BITMAP 1
            ENDIF

     IF menu3_qty(T-1,U) > 0
      V = 0
         slideheight = menu3_height(T-1,U)
         slidewidth = menu3_width(T-1,U)
         i = slideheight * menu3_qty(T-1,U)
         CREATE BITMAP 2,slidewidth,i
         CLS RGB(colors(0),colors(1),colors(2))


     WHILE V <= menu3_qty(T-1,U)
     SET CURRENT BITMAP 0
     CLS RGB(0,0,0)
     INK RGB(247,247,247),RGB(247,247,247)
     percentage# = (Images * 100.0)/total_items(0)
      TEXT 0,0,"Creating Initial Media, Percent Done: "
      SET CURSOR TEXT WIDTH("Creating Initial Media, Percent Done: "),0
      PRINT percentage#
   TEXT 0,20,STR$(Images)+" Images Created Out Of "+STR$(total_items(0))
     WAIT 1
     SET CURRENT BITMAP 2
           INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            INC Bob
            cc = 2 + slideheight * (V)
            dd = (slideheight * V) - 1
            kk = slidewidth/2
            CENTER TEXT kk,cc,menu3_name(T-1,U,V)
            INK RGB(colors(3)-80,colors(4)-80,colors(5))-30,RGB(colors(0),colors(1),colors(2))
            LINE 0,dd,slidewidth,dd
            INK RGB(0,0,0),RGB(0,0,0)
            LINE 0,dd-1,slidewidth,dd-1

            IF Bob <= menu3_qty(T-1,U)
            INC Slidehi
            CREATE BITMAP 3,slidewidth,slideheight
            CLS RGB(colors(3),colors(4),colors(5))
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            CENTER TEXT kk-1,2,menu3_name(T-1,U,V)
            INK RGB(colors(6),colors(7),colors(8)),RGB(colors(0),colors(1),colors(2))
            LINE 0,slideheight-1,slidewidth-1,slideheight-1
            LINE slidewidth-1,0,slidewidth-1,slideheight-1
            INC Images
            GET IMAGE Images,0,0,slidewidth,slideheight,1
            name$ = ("SH "+Str$(T)+" "+Str$(U)+" "+Str$(V)+" "+Str$(Slidehi))
            menu3_filenames_highlighted(T-1,U,V) = name$
            MAKE MEMBLOCK FROM Image 2,Images
            OPEN TO WRITE 2,name$
            WRITE MEMBLOCK 2,2
            CLOSE FILE 2
            DELETE MEMBLOCK 2
            SET CURRENT BITMAP 0
            DELETE BITMAP 3,
            SET CURRENT BITMAP 2

            INC SlideSel
            CREATE BITMAP 3,slidewidth,slideheight
            CLS RGB(colors(9),colors(10),colors(11))
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            CENTER TEXT kk-1,2,menu3_name(T-1,U,V)
            INK RGB(0,0,1),RGB(colors(0),colors(1),colors(2))
            LINE 0,0,slidewidth-1,0
            LINE 0,0,0,slideheight-1
            INC Images
            GET IMAGE Images,0,0,slidewidth,slideheight,1
            name$ = ("SS "+Str$(T)+" "+Str$(U)+" "+Str$(V)+" "+Str$(Slidesel))
            menu3_filenames_selected(T-1,U,V) = name$
            MAKE MEMBLOCK FROM Image 2,Images
            OPEN TO WRITE 2,name$
            WRITE MEMBLOCK 2,2
            CLOSE FILE 2
            DELETE MEMBLOCK 2
            SET CURRENT BITMAP 0
            DELETE BITMAP 3
            SET CURRENT BITMAP 2
            ENDIF

         INC V
      ENDWHILE

            INC slide_out
            name$ = ("Sl "+Str$(T)+" "+Str$(U)+" "+STR$(V))
            menu3_filenames(T-1,U) = name$
            INC Images
            GET IMAGE Images,0,0,slidewidth,i,1
            MAKE MEMBLOCK FROM Image 1,Images
            OPEN TO WRITE 2,name$
            WRITE MEMBLOCK 2,1
            CLOSE FILE 2
            DELETE MEMBLOCK 1
            DELETE BITMAP 2
            SYNC
            SET CURRENT BITMAP 1
      ENDIF

   INC U
   ENDWHILE


LINE 0,0,barwidth-1,0
LINE 0,f,barwidth-1,f
LINE 0,0,0,f-1
LINE barwidth-1,0,barwidth-1,f-1
INC Images
GET IMAGE Images,0,0,barwidth,f,1
name$ = ("D "+Str$(T))
menu2_filenames(T-1) = name$
MAKE MEMBLOCK FROM Image 1,Images
OPEN TO WRITE 2,name$
WRITE MEMBLOCK 2,1
CLOSE FILE 2
DELETE MEMBLOCK 1
DELETE BITMAP 1
SET CURRENT BITMAP 0
SYNC
INC Drop

INC T
ENDWHILE

directory$ = GET DIR$()
clipit = LEN(directory$)
DEC clipit,9
directory$ = LEFT$(directory$,clipit)
SET DIR directory$

CLOSE FILE 1

EMPTY CHECKLIST

` The code below calculates and stores the values representing the left, upper, right, and lower
` boundaries of a menu item onscreen to be retrieved by a function in the main process of the
` application.  These ranges are compared to mouse cursor coordinates onscreen to determine if
` the user has placed their cursor in an area that will trigger the display of a menu item as
` highlighted, selected (upon click) or activation (upon click and release).

      IF PATH EXIST("Ranges") = 1
         SET DIR "Ranges"
         PERFORM CHECKLIST FOR FILES
         FOR T = 1 TO CHECKLIST QUANTITY()
         file$ = CHECKLIST STRING$(T)
         IF file$ <> "." AND file$ <> ".." AND file$ <> "to screen"
         DELETE FILE file$
         ENDIF
         NEXT T
         ELSE
         MAKE DIRECTORY "Ranges"
         SET DIR "Ranges"
      ENDIF

`-------------------------

      DIM menu1_ranges(20,4)
      DIM menu2_ranges(20,20,4)
      DIM menu3_ranges(20,20,20,4)

      a = menu1_width(0)
      b = menu1_height(0)
done = 0
      ` Menu Bar Ranges
      FOR S = 1 TO menu1_qty(0)
      SET CURRENT BITMAP 0
      CLS RGB(0,0,0)
      INK RGB(247,247,247),RGB(247,247,247)
      percentage# = (done*100.0)/(total_items(0)/3)
      TEXT 0,0,"Creating Range Data, Percent Done: "
      SET CURSOR TEXT WIDTH("Creating Range Data, Percent Done: "),0
      PRINT percentage#
      TEXT 0,20,STR$(done)+" Items Ranges"
      WAIT 1
      `First top menu item = 1, second = 2, and so on
      Sbuff = S
      IF Sbuff < 10
      S$ = "0"+STR$(Sbuff)
      ELSE
      S$ = STR$(Sbuff)
      ENDIF
      OPEN TO WRITE 2,S$
      c = menu2_width(S-1)
      d = menu2_height(S-1)
      menu1_ranges(S-1,0) = (S - 1) * a `left
      WRITE STRING 2,STR$(menu1_ranges(S-1,0))
      menu1_ranges(S-1,1) = 0 `top
      WRITE STRING 2,STR$(menu1_ranges(S-1,1))
      menu1_ranges(S-1,2) = S*a `right
      WRITE STRING 2,STR$(menu1_ranges(S-1,2))
      menu1_ranges(S-1,3) = b `bottom
      WRITE STRING 2,STR$(menu1_ranges(S-1,3))
      WRITE STRING 2,"1"
      WRITE STRING 2,menu1_filenames(S-1,1)
      WRITE STRING 2,menu1_filenames(S-1,2)
      CLOSE FILE 2
      INC done

      ` Drop down menu ranges
      FOR T = 1 TO menu2_qty(S-1)
      SET CURRENT BITMAP 0
      CLS RGB(0,0,0)
      INK RGB(247,247,247),RGB(247,247,247)
      percentage# = (done*100.0)/(total_items(0)/3)
      TEXT 0,0,"Creating Range Data, Percent Done: "
      SET CURSOR TEXT WIDTH("Creating Range Data, Percent Done: "),0
      PRINT percentage#
      TEXT 0,20,STR$(done)+" Items Ranges"
      WAIT 1
      `First top menu item, first drop down menu item = 101
      `Second top menu item, first drop down menu item = 202
      `Fiftieth top menu item, fiftieth drop down menu item = 2020
      `= 1,01; 2,02; 20,20
      `The leading value in a set, and thus the leading character in a file, cannot be zero
      V = (S*100 + T)
      Sbuff = S

      IF Sbuff < 10
      T$ = "0"+STR$(V)
      ELSE
      T$ = STR$(V)
      ENDIF

      OPEN TO WRITE 2,T$
      e = menu3_width(S-1,T-1)
      f = menu3_height(S-1,T-1)
      menu2_ranges(S-1,T-1,0) = (S - 1) * a
      WRITE STRING 2,STR$(menu2_ranges(S-1,T-1,0))
      menu2_ranges(S-1,T-1,1) = (b + 1) + (d * (T-1))
      WRITE STRING 2,STR$(menu2_ranges(S-1,T-1,1))
      menu2_ranges(S-1,T-1,2) = menu2_ranges(S-1,T-1,0) + c
      WRITE STRING 2,STR$(menu2_ranges(S-1,T-1,2))
      menu2_ranges(S-1,T-1,3) = (b + 1) + (d * T)
      WRITE STRING 2,STR$(menu2_ranges(S-1,T-1,3))
      WRITE STRING 2,menu2_filenames(S-1)
      WRITE STRING 2,menu2_filenames_highlighted(S-1,T-1)
      WRITE STRING 2,menu2_filenames_selected(S-1,T-1)
      CLOSE FILE 2
      INC done

      ` Slide out menu ranges
      FOR U = 1 TO menu3_qty(S-1,T-1)
      SET CURRENT BITMAP 0
      CLS RGB(0,0,0)
      INK RGB(247,247,247),RGB(247,247,247)
      percentage# = (done*100.0)/(total_items(0)/3)
      TEXT 0,0,"Creating Range Data, Percent Done: "
      SET CURSOR TEXT WIDTH("Creating Range Data, Percent Done: "),0
      PRINT percentage#
      TEXT 0,20,STR$(done)+" Items Ranges"
      WAIT 1
      `First top menu item, first drop down menu item, first slide out menu item = 10101
      `Second top menu item, second drop down menu item, second slide out menu item = 20202
      `Fiftieth top menu item, fiftieth drop down menu item, fiftieth slide out menu item = 202020
      `= 1,01,01; 2,02,02; 20,20,20... Remove the commas for the actual value of the file name
      `The leading value in a set, and thus the leading character in a file, cannot be zero
      W = (S * 10000 + T * 100 + U)
      Sbuff = S

      IF Sbuff < 10
      U$ = "0"+STR$(W)
      ELSE
      U$ = STR$(W)
      ENDIF

      OPEN TO WRITE 2,U$
      menu3_ranges(S-1,T-1,U-1,0) = menu2_ranges(S-1,T-1,2) + 1
      WRITE STRING 2,STR$(menu3_ranges(S-1,T-1,U-1,0))
      menu3_ranges(S-1,T-1,U-1,1) = menu2_ranges(S-1,T-1,1) + (f * (U - 1))
      WRITE STRING 2,STR$(menu3_ranges(S-1,T-1,U-1,1))
      menu3_ranges(S-1,T-1,U-1,2) = menu3_ranges(S-1,T-1,U-1,0) + e
      WRITE STRING 2,STR$(menu3_ranges(S-1,T-1,U-1,2))
      menu3_ranges(S-1,T-1,U-1,3) = menu2_ranges(S-1,T-1,1) + (f * U)
      WRITE STRING 2,STR$(menu3_ranges(S-1,T-1,U-1,3))
      WRITE STRING 2,menu3_filenames(S-1,T-1)
      WRITE STRING 2,menu3_filenames_highlighted(S-1,T-1,U-1)
      WRITE STRING 2,menu3_filenames_selected(S-1,T-1,U-1)
      CLOSE FILE 2
      INC done

      NEXT U
      NEXT T
      NEXT S



directory$ = GET DIR$()
clipit = LEN(directory$)
DEC clipit,7
directory$ = LEFT$(directory$,clipit)
SET DIR directory$

ENDFUNCTION

FUNCTION cleanup()
      UNDIM menu3_ranges()
      UNDIM menu2_ranges()
      UNDIM menu1_ranges()
      UNDIM menu1_qty()
      UNDIM menu2_qty()
      UNDIM menu3_qty()
      UNDIM menu1_filenames()
      UNDIM menu2_filenames()
      UNDIM menu3_filenames()
      UNDIM menu2_filenames_selected()
      UNDIM menu3_filenames_selected()
      UNDIM menu2_filenames_highlighted()
      UNDIM menu3_filenames_highlighted()
      UNDIM menu1_name()
      UNDIM menu2_name()
      UNDIM menu3_name()
      UNDIM menu1_height()
      UNDIM menu2_height()
      UNDIM menu3_height()
      UNDIM menu1_width()
      UNDIM menu2_width()
      UNDIM menu3_width()
      UNDIM total_items()
ENDFUNCTION

FUNCTION consolidate()
current$ = GET DIR$()

SET DIR "MenMedia"
MAKE DIRECTORY "to screen"

PERFORM CHECKLIST FOR FILES

FOR T = 1 TO CHECKLIST QUANTITY()
file$ = CHECKLIST STRING$(T)
COPY FILE file$,"to screen\"+file$
DELETE FILE file$
NEXT T

EMPTY CHECKLIST
SET DIR current$
SET DIR "Ranges"
PERFORM CHECKLIST FOR FILES
SET DIR current$

FOR T = 1 TO CHECKLIST QUANTITY()
file$ = CHECKLIST STRING$(T)
COPY FILE "Ranges\"+file$,"MenMedia\"+file$
DELETE FILE "Ranges\"+file$
NEXT T

DELETE DIRECTORY "Ranges"

ENDFUNCTION

FUNCTION prep2(top_dir$)

SET DIR "MenMedia"

PERFORM CHECKLIST FOR FILES

DIM menu1_ranges(20,10)
DIM menu2_ranges(20,20,10)
DIM menu3_ranges(20,20,20,10)

DIM menu1_names(20,3) as string
DIM menu2_names(20,20,3) as string
DIM menu3_names(20,20,20,3) as string

framecount = 0

image = 1

FOR T = 1 TO CHECKLIST QUANTITY() - 1

SET DIR top_dir$
SET DIR "MenMedia"

IF (T > 2)
file$ = CHECKLIST STRING$(T)
OPEN TO READ 1,file$
READ STRING 1,left_bound$
READ STRING 1,top_bound$
READ STRING 1,right_bound$
READ STRING 1,bottom_bound$
READ STRING 1,normal_state$
READ STRING 1,highlighted_state$
READ STRING 1,selected_state$
digits = LEN(file$)

SELECT digits
CASE 2:
CLS RGB(255,0,255)

x = VAL(file$)
menu1_ranges(x-1,0) = VAL(left_bound$)
menu1_ranges(x-1,1) = VAL(top_bound$)
menu1_ranges(x-1,2) = VAL(right_bound$)
menu1_ranges(x-1,3) = VAL(bottom_bound$)

menu1_names(x-1,0) = normal_state$
menu1_names(x-1,1) = highlighted_state$
menu1_names(x-1,2) = selected_state$

IF (x-1) = 0
menu1_ranges(x-1,4) = image
OPEN TO READ 2,"to screen\"+normal_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu1_ranges(x-1,0),menu1_ranges(x-1,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$

SELECT PATH EXIST("Sprite Data")

CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

ELSE
menu1_ranges(x-1,4) = image
OPEN TO READ 2,"to screen\"+normal_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu1_ranges(0,0),menu1_ranges(0,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image
ENDIF

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu1_ranges(x-1,5) = image
OPEN TO READ 2,"to screen\" + highlighted_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu1_ranges(x-1,0),menu1_ranges(x-1,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu1_ranges(x-1,6) = image
OPEN TO READ 2,"to screen\"+selected_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu1_ranges(x-1,0),menu1_ranges(x-1,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu1_ranges(x-1,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

SET DIR top_dir$
SET DIR "Sprite Data"

CREATE BITMAP 2,SCREEN WIDTH(),SCREEN HEIGHT()
filename$ = file$

OPEN TO READ 2,str$(framecount - 2)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 3,2
COPY BITMAP 3,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),2,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 3
CLOSE FILE 2

CREATE BITMAP 3,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount - 1)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 4,2
COPY BITMAP 4,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),3,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 4
CLOSE FILE 2

CREATE BITMAP 4,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 5,2
COPY BITMAP 5,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),4,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 5
CLOSE FILE 2

SET DIR top_dir$
IF PATH EXIST("Sprites") = 1
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ELSE
   MAKE DIRECTORY "Sprites"
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ENDIF

SET DIR cur_dir$
ENDCASE

CASE 4:
CLS RGB(255,0,255)

x$ = LEFT$(file$,2)
y$ = RIGHT$(file$,2)
x = VAL(x$) - 1
y = VAL(y$) - 1

PASTE IMAGE 1,0,0
PASTE IMAGE menu1_ranges(x,6),menu1_ranges(x,0),menu1_ranges(x,1)

menu2_ranges(x,y,0) = VAL(left_bound$)
menu2_ranges(x,y,1) = VAL(top_bound$)
menu2_ranges(x,y,2) = VAL(right_bound$)
menu2_ranges(x,y,3) = VAL(bottom_bound$)

menu2_names(x,y,0) = normal_state$
menu2_names(x,y,1) = highlighted_state$
menu2_names(x,y,2) = selected_state$

menu2_ranges(x,y,4) = image
OPEN TO READ 2,"to screen\" + normal_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu2_ranges(x,y,0),menu2_ranges(0,0,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu2_ranges(x,y,5) = image
OPEN TO READ 2,"to screen\"+highlighted_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
PASTE IMAGE image,menu2_ranges(x,y,0),menu2_ranges(x,y,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu2_ranges(x,y,6) = image
OPEN TO READ 2,"to screen\"+selected_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu2_ranges(x,y,0),menu2_ranges(x,y,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
DELETE MEMBLOCK 2
DELETE BITMAP 2
CLOSE FILE 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu2_ranges(x,y,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

SET DIR top_dir$
SET DIR "Sprite Data"

CREATE BITMAP 2,SCREEN WIDTH(),SCREEN HEIGHT()
filename$ = file$

OPEN TO READ 2,str$(framecount - 2)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 3,2
COPY BITMAP 3,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),2,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 3
CLOSE FILE 2

CREATE BITMAP 3,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount - 1)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 4,2
COPY BITMAP 4,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),3,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 4
CLOSE FILE 2

CREATE BITMAP 4,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 5,2
COPY BITMAP 5,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),4,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 5
CLOSE FILE 2

SET DIR top_dir$
IF PATH EXIST("Sprites") = 1
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ELSE
   MAKE DIRECTORY "Sprites"
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ENDIF

SET DIR cur_dir$

ENDCASE

CASE 6:
x$ = LEFT$(file$,2)
z$ = RIGHT$(file$,2)
x2$ = LEFT$(file$,4)
y$ = RIGHT$(file$,2)

x = VAL(x$) - 1
y = VAL(y$) - 1
z = VAL(z$) - 1

menu3_ranges(x,y,z,0) = VAL(left_bound$)
menu3_ranges(x,y,z,1) = VAL(top_bound$)
menu3_ranges(x,y,z,2) = VAL(right_bound$)
menu3_ranges(x,y,z,3) = VAL(bottom_bound$)

menu3_names(x,y,z,0) = normal_state$
menu3_names(x,y,z,1) = highlighted_state$
menu3_names(x,y,z,2) = selected_state$

menu3_ranges(x,y,z,4) = image
OPEN TO READ 2,"to screen\"+normal_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu3_ranges(x,y,z,0),menu3_ranges(x,0,0,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,8) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu3_ranges(x,y,z,5) = image
OPEN TO READ 2,"to screen\"+highlighted_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu3_ranges(x,y,z,0),menu3_ranges(x,y,z,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,9) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

menu3_ranges(x,y,z,6) = image
OPEN TO READ 2,"to screen\"+selected_state$
READ MEMBLOCK 2,1
MAKE IMAGE FROM MEMBLOCK image,1
CLOSE FILE 2
DELETE MEMBLOCK 1
PASTE IMAGE image,menu3_ranges(x,y,z,0),menu3_ranges(x,y,z,1)
INK RGB(255,0,0),RGB(255,0,0)
INK RGB(0,0,0),RGB(0,0,0)
SYNC
WAIT 10
INC image

cur_dir$ = GET DIR$()
SET DIR top_dir$
SELECT PATH EXIST("Sprite Data")
CASE 0:
MAKE DIRECTORY "Sprite Data"
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE

CASE 1:
SET DIR "Sprite Data"
INC framecount
menu3_ranges(x,y,z,10) = framecount
CREATE BITMAP 2, SCREEN WIDTH(), SCREEN HEIGHT()
SET CURRENT BITMAP 0
COPY BITMAP 0,2
IF PATH EXIST(Str$(framecount)) = 1
DELETE FILE Str$(framecount)
ENDIF
IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF
OPEN TO WRITE 2,Str$(framecount)
MAKE MEMBLOCK FROM BITMAP 2,2
WRITE MEMBLOCK 2,2
CLOSE FILE 2
DELETE MEMBLOCK 2
DELETE BITMAP 2
SET DIR cur_dir$
ENDCASE
ENDSELECT

SET DIR top_dir$
SET DIR "Sprite Data"

CREATE BITMAP 2,SCREEN WIDTH(),SCREEN HEIGHT()
filename$ = file$

OPEN TO READ 2,str$(framecount - 2)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 3,2
COPY BITMAP 3,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),2,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 3
CLOSE FILE 2

CREATE BITMAP 3,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount - 1)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 4,2
COPY BITMAP 4,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),3,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 4
CLOSE FILE 2

CREATE BITMAP 4,SCREEN WIDTH(),SCREEN HEIGHT()

OPEN TO READ 2,str$(framecount)
READ MEMBLOCK 2,2
MAKE BITMAP FROM MEMBLOCK 5,2
COPY BITMAP 5,0,0,SCREEN WIDTH(),SCREEN HEIGHT(),4,0,0,SCREEN WIDTH(),SCREEN HEIGHT()
DELETE MEMBLOCK 2
DELETE BITMAP 5
CLOSE FILE 2

SET DIR top_dir$
IF PATH EXIST("Sprites") = 1
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ELSE
   MAKE DIRECTORY "Sprites"
   SET DIR "Sprites"
   SET CURRENT BITMAP 2
   GET IMAGE image+1,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE filename$+".bmp",image+1
   CLOSE FILE 2
   DELETE BITMAP 2
   DELETE IMAGE image+1

   SET CURRENT BITMAP 3
   GET IMAGE image+2,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "H"+filename$+".bmp",image+2
   CLOSE FILE 2
   DELETE BITMAP 3
   DELETE IMAGE image+2

   SET CURRENT BITMAP 4
   GET IMAGE image+3,0,0,1280,SCREEN HEIGHT(),1
   SAVE IMAGE "S"+filename$+".bmp",image+3
   CLOSE FILE 2
   DELETE BITMAP 4
   DELETE IMAGE image+3
ENDIF


ENDCASE
ENDSELECT

CLOSE FILE 1
ENDIF
NEXT T

SET DIR top_dir$

DELETE DIRECTORY "Sprite Data"
ENDFUNCTION

FUNCTION correct_script(top_dir$)
SET DIR top_dir$
SET DIR "Sprites"
PERFORM CHECKLIST FOR FILES
Images = (CHECKLIST QUANTITY() - 2)
SET DIR top_dir$
OPEN TO READ 1,"menumap.txt"
READ STRING 1,font$
READ STRING 1,size$
READ STRING 1,title$
CLOSE FILE 1
COPY FILE "menumap.txt", "menumap_current.txt"
DELETE FILE "menumap.txt"
OPEN TO WRITE 1,"menumap.txt"
WRITE STRING 1,font$
WRITE STRING 1,size$
WRITE STRING 1,title$
WRITE STRING 1,Str$(Images)
CLOSE FILE 1

SET DIR top_dir$
SET DIR "MenMedia"
DELETE DIRECTORY "to screen"
ENDFUNCTION

`/////////////////////////////////////////////////////////////////////////////////////////

`Menu Display / Main Application

Rem Project: S(N)
Rem Created: 11/24/2004 13:51:03

Rem ***** Main Source File *****

SYNC OFF
SET IMAGE COLORKEY 255,0,255

`-----------------------------------------------------------------------------------------------
top_dir$ = GET DIR$()

OPEN TO READ 1,"menumap.txt" : READ STRING 1,font$ : READ STRING 1,size$ : READ STRING 1,Title$ : size = VAL(size$)

IF PATH EXIST("Sprites")=1
SET DIR "Sprites"
ELSE
MAKE DIRECTORY "Sprites"
SET DIR "Sprites"
ENDIF

PERFORM CHECKLIST FOR FILES
Images = (CHECKLIST QUANTITY() - 2)
prep(font$,size,Title$)

READ STRING 1,Images$

make_menus = 0
menu_media_count = VAL(Images$)

IF Images$ = "!!"
make_menus = 1
ENDIF

IF menu_media_count <> Images
make_menus = 1
ENDIF


EMPTY CHECKLIST

CLOSE FILE 1


SET DIR top_dir$

IF make_menus = 1
SET DIR top_dir$
IF PATH EXIST("MenMedia")
DELETE DIRECTORY "MenMedia"
ENDIF
IF PATH EXIST("Sprites")
DELETE DIRECTORY "Sprites"
ENDIF
IF PATH EXIST("Sprite data")
DELETE DIRECTORY "Sprite data"
ENDIF
TEXT 0,0,"Run Menu Maker"
TEXT 0,100,"Press Any Key To Continue With Quitting OR Any Other Key To Quit"
WAIT KEY
EXIT
ENDIF

return$ = loadmen(top_dir$)

do
INC loops(0)

IF TIMER() - system_time(0) >= 1000
time_thus_far = TIMER() - system_time(0)
hertz(0) = loops(0)/(time_thus_far/1000)
ENDIF

CLS RGB(247,247,247)

SELECT IMAGE EXIST(1)
CASE 1: PASTE IMAGE 1,0,0,1 : DELETE IMAGE 1 : ENDCASE
ENDSELECT

SELECT return$
CASE "M0": mode = 0 : ENDCASE
CASE "M1": mode = 1 : ENDCASE
CASE "M2": mode = 2 : ENDCASE
CASE "M3": mode = 3 : ENDCASE
CASE "M4": mode = 4 : ENDCASE
CASE "COMMAND" : mode = 0 : return$ = commandFinder() : ENDCASE
CASE "EXIT": EXIT : ENDCASE
ENDSELECT

return$ = main(top_dir$,mode)
loop

FUNCTION prep(font as string, size,Title as string)

EMPTY CHECKLIST
PERFORM CHECKLIST FOR DISPLAY MODES

sx =0
sy = 0
sz = 0
FOR T = 1 TO CHECKLIST QUANTITY()
IF CHECKLIST VALUE A(T) > sx
sx = CHECKLIST VALUE A(T)
ENDIF
IF CHECKLIST VALUE B(T) > sy
sy = CHECKLIST VALUE B(T)
ENDIF
IF CHECKLIST VALUE C(T) > sz
sz = CHECKLIST VALUE C(T)
ENDIF
NEXT T

SET WINDOW ON
SET DISPLAY MODE sx,sy,sz
MAXIMIZE WINDOW

SET TEXT FONT font
SET TEXT SIZE size
SET TEXT TRANSPARENT

CLS RGB(247,247,247)
INK RGB(0,0,0),RGB(0,0,0)

ENDFUNCTION

FUNCTION loadmen(top_dir$)

SET DIR top_dir$
SET DIR "MenMedia"
dat_dir$ = GET DIR$()
SET DIR top_dir$
SET DIR "Sprites"
men_dir$ = GET DIR$()
SET DIR dat_dir$

EMPTY CHECKLIST
PERFORM CHECKLIST FOR FILES

DIM drop_triggers(20,20,1) AS STRING
DIM slide_triggers(20,20,20,1) AS STRING
DIM menu1_data(20,7)
DIM menu2_data(20,20,7)
DIM menu3_data(20,20,20,7)

top = 0
drop = 0
slide = 0
spr = 1

FOR T = 3 to CHECKLIST QUANTITY()

CLS RGB(0,0,0)
INK RGB(247,247,247),RGB(247,247,247)
percent = ((T-3) * 100)/(CHECKLIST QUANTITY() - 4)
TEXT 0,0,"Loading Menu Data: "+STR$(percent)+"%"
WAIT 1

IF FILE OPEN(2) = 1
CLOSE FILE 2
ENDIF

SET DIR dat_dir$

file$ = CHECKLIST STRING$(T)

OPEN TO READ 2,file$
digits = LEN(CHECKLIST STRING$(T))

READ STRING 2,left_bound$ : READ STRING 2,top_bound$ : READ STRING 2,right_bound$ : READ STRING 2,bottom_bound$

      SELECT digits

            CASE 2:
                  SET DIR men_dir$

                  top2 = VAL(file$) - 1

                  menu1_data(top2,0) = VAL(left_bound$)
                  menu1_data(top2,1) = VAL(top_bound$)
                  menu1_data(top2,2) = VAL(right_bound$)
                  menu1_data(top2,3) = VAL(bottom_bound$)

                  INC spr
                  LOAD IMAGE file$+".bmp",spr,1
                  menu1_data(top2,4) = spr
                  INC spr
                  LOAD IMAGE "H"+file$+".bmp",spr,1
                  menu1_data(top2,5) = spr
                  INC spr
                  LOAD IMAGE "S"+file$+".bmp",spr,1
                  menu1_data(top2,6) = spr

                  INC top
                  CLOSE FILE 2
            ENDCASE
      `-----------------------------------------------------------------------------------------------
            CASE 4:
                  SET DIR men_dir$

                  boob$ = LEFT$(file$,2)
                  top3 = VAL(boob$) - 1
                  boob2$ = RIGHT$(file$,2)
                  drop2 = VAL(boob2$) - 1

                  menu2_data(top3,drop2,0) = VAL(left_bound$)
                  menu2_data(top3,drop2,1) = VAL(top_bound$)
                  menu2_data(top3,drop2,2) = VAL(right_bound$)
                  menu2_data(top3,drop2,3) = VAL(bottom_bound$)

                  spr = spr + 1
                  LOAD IMAGE file$+".bmp",spr,1
                  menu2_data(top3,drop2,4) = spr
                  INC spr
                  LOAD IMAGE "H"+file$+".bmp",spr,1
                  menu2_data(top3,drop2,5) = spr
                  INC spr
                  LOAD IMAGE "S"+file$+".bmp",spr,1
                  menu2_data(top3,drop2,6) = spr

                  drop_triggers(top3,drop2,0) = file$

                  INC drop
                  CLOSE FILE 2
            ENDCASE
      `-----------------------------------------------------------------------------------------------
            CASE 6:
                  SET DIR men_dir$

                  boob$ = LEFT$(file$,2)
                  boob2a$ = RIGHT$(file$,4)
                  boob2$ = LEFT$(boob2a$,2)
                  boob3$ = RIGHT$(file$,2)

                  top4 = VAL(boob$) - 1
                  drop3 = VAL(boob2$) - 1
                  slide2 = VAL(boob3$) - 1

                  menu3_data(top4,drop3,slide2,0) = VAL(left_bound$)
                  menu3_data(top4,drop3,slide2,1) = VAL(top_bound$)
                  menu3_data(top4,drop3,slide2,2) = VAL(right_bound$)
                  menu3_data(top4,drop3,slide2,3) = VAL(bottom_bound$)

                  INC spr
                  LOAD IMAGE file$+".bmp",spr,1
                  menu3_data(top4,drop3,slide2,4) = spr
                  INC spr
                  LOAD IMAGE "H"+file$+".bmp",spr,1
                  menu3_data(top4,drop3,slide2,5) = spr
                  INC spr
                  LOAD IMAGE "S"+file$+".bmp",spr,1
                  menu3_data(top4,drop3,slide2,6) = spr

                  slide_triggers(top4,drop3,slide2,0) = file$

                 INC slide
                 CLOSE FILE 2
            ENDCASE
      ENDSELECT

NEXT T

`Control Arrays
DIM mouses(1)
DIM bottomsOFdrop(50)
DIM bottomsOFslide(50,50)
DIM current_array1(1)
DIM current_array2(1)
DIM current_array3(1)
DIM time(1)
DIM drop_hi(1)
DIM slide_hi(1)
DIM trigger(1) AS STRING

`Program Statistics Arrays
DIM loops(1) : loops(0) = 0
DIM top(1) : top(0) = top
DIM drop(1) : drop(0) = drop
DIM slide(1) : slide(0) = slide
DIM system_time(1) : system_time(0) = TIMER()
DIM hertz(0) : hertz(0) = 0

FOR arr = 0 TO top
a = 0
a2 = menu2_data(arr,a,3)
WHILE a2 > 0
a2 = menu2_data(arr,a,3)
INC a
ENDWHILE
bottomsOFdrop(arr) = a - 2
NEXT arr

FOR arr = 0 TO top
FOR ass = 0 TO drop
a = 0
a2 = menu3_data(arr,ass,a,3)
WHILE a2 > 0
a2 = menu3_data(arr,ass,a,3)
INC a
ENDWHILE
bottomsOFslide(arr,ass) = a - 2
NEXT ass
NEXT arr

SPRITE 1,0,0,2
SET SPRITE 1,0,1

ENDFUNCTION return$

FUNCTION main(top_dir$,mode)

INK RGB(0,0,0),RGB(0,0,0)


my = MOUSEY()
mx = MOUSEX()

IF RETURNKEY() = 1
mc = 1
ELSE
mc = MOUSECLICK()
ENDIF

ack = current_array2(1)
arr = current_array1(0)
arr2 = current_array2(0)
arr3 = current_array3(0)

smb = bottomsOFslide(arr,arr2)
dmb = bottomsOFdrop(arr)

m1:
SELECT mode

   CASE 0:
      current_array1(0) = 0
      current_array2(0) = 0
      current_array2(1) = 0
      current_array3(0) = 0
      ack = 0
      arr = 0
      arr2 = 0
      arr3 = 0
      mouses(0) = 0
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEX())+", ") - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEX())),str$(MOUSEX())+", "
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEY())),str$(MOUSEY())
      TEXT 0,SCREEN HEIGHT() - TEXT HEIGHT(STR$(hertz(0))),"PC@"+STR$(hertz(0))+"Hz"
      INC time(0)

      SELECT mouses(0) <> 3
      CASE 1:
         SELECT my <= menu1_data(0,3) AND mx < menu1_data(top(0)-1,2)
            CASE 1:
               FOR T = 0 TO top(0)
                  SELECT mx < menu1_data(T,2) AND mx >= menu1_data(T,0)
                     CASE 1:
                     SET SPRITE IMAGE 1,menu1_data(T,5)
                     current_array1(0) = T
                     return$ = "M1"
                     T = top(0)
                     ENDCASE
                  ENDSELECT
               NEXT T
            ENDCASE
            CASE 0:
               current_array1(0) = 0
               SET SPRITE IMAGE 1,2
               return$ = "M0"
            ENDCASE
         ENDSELECT
      ENDCASE
      CASE 0:
         IF time(0) > 3
         mouses(0) = 0
         ENDIF
      ENDCASE
      ENDSELECT

   ENDCASE

   CASE 1:
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEX())+", ") - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEX())),str$(MOUSEX())+", "
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEY())),str$(MOUSEY())
      TEXT 0,SCREEN HEIGHT() - TEXT HEIGHT(STR$(hertz(0))),"PC@"+STR$(hertz(0))+"Hz"

      SELECT my > menu1_data(0,3) OR mx > menu1_data(arr,2) OR mx < menu1_data(arr,0)
         CASE 1:
            current_array1(0) = 0
            return$ = "M0"
         ENDCASE
         CASE 0:
            SELECT mc = 1 OR mouses(0) = 1
               CASE 1:
                  SET SPRITE IMAGE 1,menu2_data(arr,0,4)
                  return$ = "M2"
                  time(0) = 0
               ENDCASE
               CASE 0:
                  SET SPRITE IMAGE 1,menu1_data(arr,5)
                  return$ = "M1"
               ENDCASE
            ENDSELECT
         ENDCASE
      ENDSELECT

   ENDCASE

   CASE 2:
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEX())+", ") - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEX())),str$(MOUSEX())+", "
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEY())),str$(MOUSEY())
      TEXT 0,SCREEN HEIGHT() - TEXT HEIGHT(STR$(hertz(0))),"PC@"+STR$(hertz(0))+"Hz"

      INC time(0)

      mouses(0) = 0

      SELECT MOUSECLICK() = 1 AND time(0) > 10
         CASE 1:
            SELECT my < menu1_data(arr,3)
               CASE 1:
                  return$ = "M0"
                  mouses(0) = 3
                  time(0) = 0
                  drop_hi(0) = 0
                  slide_hi(0) = 0
                  current_array1(0) = 0
                  current_array2(0) = 0
                  current_array2(1) = 0
                  current_array3(0) = 0
                  ack = 0
                  arr = 0
                  arr2 = 0
                  arr3 = 0
                  trigger(0) = " "
               ENDCASE
            ENDSELECT
         ENDCASE
      ENDSELECT

      SELECT my < menu1_data(0,3) AND mc = 0 AND time(0) > 10
      CASE 1:
         SELECT mx < menu1_data(arr,0) OR mx > menu1_data(arr,2)
            CASE 1:
               return$ = "M1"
               mouses(0) = 1
               drop_hi(0) = 0
            ENDCASE
         ENDSELECT
      ENDCASE
      ENDSELECT

      SELECT my > menu2_data(arr,dmb,3) OR mx > menu2_data(arr,dmb,2) OR MOUSEX() < menu2_data(arr,dmb,0)
      CASE 1:
         SELECT mc = 1 AND time(0) > 10
            CASE 1:
               return$ = "M0"
               drop_hi(0) = 0
            ENDCASE
         ENDSELECT
      ENDCASE
      ENDSELECT

      SELECT my < menu2_data(arr,dmb,3) AND my > menu1_data(0,3)
         CASE 1:
            FOR T = 0 TO dmb
               SELECT mx < menu2_data(arr,T,2) AND my < menu2_data(arr,T,3) AND my > menu2_data(arr,T,1) AND mx > menu2_data(arr,T,0)
                  CASE 1:
                     SET SPRITE IMAGE 1,menu2_data(arr,T,5)
                     current_array2(0) = T
                     T = dmb
                     drop_hi(0) = 1
                  ENDCASE
               ENDSELECT
            NEXT T
         ENDCASE
      ENDSELECT

      SELECT drop_hi(0) = 1
         CASE 1:
            SELECT my > menu2_data(arr,arr2,3) OR mx > menu2_data(arr,arr2,2) OR mx < menu2_data(arr,arr2,0) OR my < menu2_data(arr,arr2,1)
               CASE 1:
                  SET SPRITE IMAGE 1,menu2_data(arr,0,4)
                  drop_hi(0) = 0
               ENDCASE
            ENDSELECT

            SELECT mx < menu2_data(arr,arr2,2) AND my < menu2_data(arr,arr2,3) AND my > menu2_data(arr,arr2,1) AND mx > menu2_data(arr,arr2,0) AND mc = 1
               CASE 1:
                  SET SPRITE IMAGE 1,menu2_data(arr,current_array2(0),6)
                  return$ = "M3"
                  drop_hi(0) = 0
               ENDCASE
            ENDSELECT
         ENDCASE
      ENDSELECT

   ENDCASE

   CASE 3:
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEX())+", ") - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEX())),str$(MOUSEX())+", "
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEY())),str$(MOUSEY())
      TEXT 0,SCREEN HEIGHT() - TEXT HEIGHT(STR$(hertz(0))),"PC@"+STR$(hertz(0))+"Hz"

      SELECT my > menu2_data(arr,arr2,3) OR mx > menu2_data(arr,arr2,2) OR mx < menu2_data(arr,arr2,0) OR my < menu2_data(arr,arr2,1)
         CASE 1:
            SET SPRITE IMAGE 1,menu2_data(arr,0,4)
            drop_hi(0) = 0
            return$ = "M2"
         ENDCASE
      ENDSELECT

      SELECT menu3_data(arr,arr2,0,3) <> 0
         CASE 1:
            SET SPRITE IMAGE 1,menu3_data(arr,arr2,0,4)
            return$ = "M4"
         ENDCASE
         CASE 0:
            drop_hi(0) = 0
            trigger(0) = drop_triggers(arr,arr2,0)
            return$ = "COMMAND"
         ENDCASE
      ENDSELECT

   ENDCASE

   CASE 4:

      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEX())+", ") - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEX())),str$(MOUSEX())+", "
      TEXT SCREEN WIDTH() - TEXT WIDTH(STR$(MOUSEY())),SCREEN HEIGHT() - TEXT HEIGHT(STR$(MOUSEY())),str$(MOUSEY())
      TEXT 0,SCREEN HEIGHT() - TEXT HEIGHT(STR$(hertz(0))),"PC@"+STR$(hertz(0))+"Hz"

      SELECT my < menu3_data(arr,arr2,smb,3) AND my > menu3_data(arr,arr2,0,1)
         CASE 1:
            FOR T = 0 TO smb
               SELECT mx < menu3_data(arr,arr2,T,2) AND my < menu3_data(arr,arr2,T,3) AND my > menu3_data(arr,arr2,T,1) AND mx > menu3_data(arr,arr2,T,0)
                  CASE 1:
                     SET SPRITE IMAGE 1,menu3_data(arr,arr2,T,5)
                     current_array3(0) = T
                     T = smb
                     slide_hi(0) = 1
                  ENDCASE
               ENDSELECT
             NEXT T
         ENDCASE
         CASE 0:
            SET SPRITE IMAGE 1,menu3_data(arr,arr2,0,4)
         ENDCASE
      ENDSELECT

      SELECT mx < menu3_data(arr,arr2,arr3,0)
         CASE 1:
            SELECT my < menu2_data(arr,arr2,1) OR my > menu2_data(arr,arr2,3)
               CASE 1:
                  SELECT mx < menu2_data(arr,arr2,2)
                     CASE 1:
                        current_array3(0) = 0
                        slide_hi(0) = 0
                        drop_hi(0) = 0
                        time(0) = 0
                        mouses(0) = 0
                        return$ = "M2"
                     ENDCASE
                  ENDSELECT
               ENDCASE
            ENDSELECT
         ENDCASE
      ENDSELECT

      SELECT slide_hi(0) = 1 AND mc = 1
         CASE 1:
            SET SPRITE IMAGE 1,menu3_data(arr,arr2,arr3,6)
            slide_hi(0) = 0
            return$ = "M0"
            trigger(0) = slide_triggers(arr,arr2,arr3,0)
            return$ = "COMMAND"
         ENDCASE
      ENDSELECT

   ENDCASE

ENDSELECT

IF ESCAPEKEY() = 1
EXIT
ENDIF
ENDFUNCTION return$
EXIT

FUNCTION commandFinder()

SELECT trigger(0)

` CASE "0101" : 0101() : ENDCASE
` CASE "0102" : 0102() : ENDCASE
` CASE "0103" : 0103() : ENDCASE
` CASE "0104" : 0104() : ENDCASE
` CASE "0105" : 0105() : ENDCASE
` CASE "0106" : 0106() : ENDCASE
` CASE "0107" : 0107() : ENDCASE
` CASE "0108" : 0108() : ENDCASE
` CASE "0109" : 0109() : ENDCASE
` CASE "0110" : 0110() : ENDCASE
` CASE "0111" : 0111() : ENDCASE
` CASE "0112" : 0112() : ENDCASE
` CASE "0113" : 0113() : ENDCASE
` CASE "0114" : 0114() : ENDCASE
` CASE "0115" : 0115() : ENDCASE
` CASE "0116" : 0116() : ENDCASE
` CASE "0117" : 0117() : ENDCASE
` CASE "0118" : 0118() : ENDCASE
` CASE "0119" : 0119() : ENDCASE
` CASE "0120" : 0120() : ENDCASE
` CASE "0201" : 0201() : ENDCASE
` CASE "0202" : 0202() : ENDCASE
` CASE "0203" : 0203() : ENDCASE
` CASE "0204" : 0204() : ENDCASE
` CASE "0205" : 0205() : ENDCASE
` CASE "0206" : 0206() : ENDCASE
` CASE "0207" : 0207() : ENDCASE
` CASE "0208" : 0208() : ENDCASE
` CASE "0209" : 0209() : ENDCASE
` CASE "0210" : 0210() : ENDCASE
` CASE "0211" : 0211() : ENDCASE
` CASE "0212" : 0212() : ENDCASE
` CASE "0213" : 0213() : ENDCASE
` CASE "0214" : 0214() : ENDCASE
` CASE "0215" : 0215() : ENDCASE
` CASE "0216" : 0216() : ENDCASE
` CASE "0217" : 0217() : ENDCASE
` CASE "0218" : 0218() : ENDCASE
` CASE "0219" : 0219() : ENDCASE
` CASE "0220" : 0220() : ENDCASE
` CASE "0301" : 0301() : ENDCASE
` CASE "0302" : 0302() : ENDCASE
` CASE "0303" : 0303() : ENDCASE
` CASE "0304" : 0304() : ENDCASE
` CASE "0305" : 0305() : ENDCASE
` CASE "0306" : 0306() : ENDCASE
` CASE "0307" : 0307() : ENDCASE
` CASE "0308" : 0308() : ENDCASE
` CASE "0309" : 0309() : ENDCASE
` CASE "0310" : 0310() : ENDCASE
` CASE "0311" : 0311() : ENDCASE
` CASE "0312" : 0312() : ENDCASE
` CASE "0313" : 0313() : ENDCASE
` CASE "0314" : 0314() : ENDCASE
` CASE "0315" : 0315() : ENDCASE
` CASE "0316" : 0316() : ENDCASE
` CASE "0317" : 0317() : ENDCASE
` CASE "0318" : 0318() : ENDCASE
` CASE "0319" : 0319() : ENDCASE
` CASE "0320" : 0320() : ENDCASE
` CASE "0401" : 0401() : ENDCASE
` CASE "0402" : 0402() : ENDCASE
` CASE "0403" : 0403() : ENDCASE
` CASE "0404" : 0404() : ENDCASE
` CASE "0405" : 0405() : ENDCASE
` CASE "0406" : 0406() : ENDCASE
` CASE "0407" : 0407() : ENDCASE
` CASE "0408" : 0408() : ENDCASE
` CASE "0409" : 0409() : ENDCASE
` CASE "0410" : 0410() : ENDCASE
` CASE "0411" : 0411() : ENDCASE
` CASE "0412" : 0412() : ENDCASE
` CASE "0413" : 0413() : ENDCASE
` CASE "0414" : 0414() : ENDCASE
` CASE "0415" : 0415() : ENDCASE
` CASE "0416" : 0416() : ENDCASE
` CASE "0417" : 0417() : ENDCASE
` CASE "0418" : 0418() : ENDCASE
` CASE