Due to boredum, and just the joy of getting more experience in things, I decided to see if I could in any way shorten your code. I did of course, and you may happen to like it. I also find it may be (As you discussed) easier to update. You mentioned having to change things, and I can see you already made an edit with the "Server name Here" in the middle of a group of about 4 servers. I can only assume one was there at one point, but was later removed.

Anyways, here is a (imo) better version of your dialog. It doesn't use tabs, and doesn't need 100 million sclick event triggers. Just a hash table, a list to read from, and about 30 dialog elements. Much faster to load, and i persnonally think easier on the eyes.

Anyways, try it out. I didn't convert all your servers over, just enough to stress a point. The only downfall I found was that the server "headings" like NewNet Servers, DALnet servers, etc aren't in order--but that's a characteristic of hash tables. If I get more into it, and you like it, I know a way to sort them. Just give me thw word.

Anyways, have fun.

Code:
dialog srvList {
  title "Server List"
  size -1 -1 100 110
  option dbu
  text "TopicText", 10, 10 0 80 8, center
  button "<", 20, 0 0 10 10
  button ">", 30, 90 0 10 10
  text "server 1", 40, 0 10 75 8
  link "Connect", 45, 78 10 22 8
  text "server 2", 50, 0 20 75 8
  link "Connect", 55, 78 20 22 8
  text "server 3", 60, 0 30 75 8
  link "Connect", 65, 78 30 22 8
  text "server 4", 70, 0 40 75 8
  link "Connect", 75, 78 40 22 8
  text "server 5", 80, 0 50 75 8
  link "Connect", 85, 78 50 22 8
  text "server 6", 90, 0 60 75 8
  link "Connect", 95, 78 60 22 8
  text "server 7", 100, 0 70 75 8
  link "Connect", 105, 78 70 22 8
  text "server 8", 110, 0 80 75 8
  link "Connect", 115, 78 80 22 8
  text "server 9", 120, 0 90 75 8
  link "Connect", 125, 78 90 22 8
  text "server 10", 130, 0 100 75 8
  link "Connect", 135, 78 100 22 8
}

on *:DIALOG:srvList:INIT:*: {
  ; create a hash table that can hold our server list.
  ; The rest will be dynamic from here
  if (!$hget(srvList)) /hmake srvList 10
  ; add the servers in the form of the following:
  ; /hadd srvList <Heading> <Server>[,Server2,Server3,...]
  ; note to use underscores (_) in the heading in place of
  ; spaces
  /hadd srvList Access_Net_IRC_Servers $&
    Graz.AT.EU.AccessIRC.Net,Lexington.KY.US.AccessIRC.Net,Florence.OR.US.AccessIRC.Net, $+ $&
    Toronto.ON.CA.AccessIRC.Net,Regina.SK.CA.AccessIRC.Net,Caledonia.ON.CA.AccessIRC.Net, $+ $&
    SanDiego.CA.US.AccessIRC.Net,Burlington.NJ.US.AccessIRC.Net,Winchester.KY.US.AccessIRC.Net
  /hadd srvList Access_Net_IRC_Servers_(cont.) $&
    Powell.OH.US.AccessIRC.Net,Trondheim.NO.EU.AccessIRC.Net,Boise.ID.US.AccessIRC.Net, $+ $&
    LongBeach.CA.US.AccessIRC.net
  /hadd srvList DALnet_IRC_Servers $&
    misc-e.dal.net,Astro.ga.us.dal.net,Jade.va.us.dal.net,misc-e.dal.net,kernel.ga.us.dal.net, $+ $&
    animals.ca.us.dal.net,diamond.hub.dal.net,eternal-c.dal.net,renew-r.hub.dal.net
  /hadd srvList NewNet_IRC_Servers $&
    irc.theflux.org,irc.newnet.net,irc.eskimo.com,irc.aohell.org,irc.josephbarnhart.net, $+ $&
    irc2.fdt.net,irc.eviltwins.org,irc.dividedspace.com,irc.moo.me.uk
  /hadd srvList NewNet_IRC_Servers_(cont.) $&
    irc.d0t.net,irc.dragonzkeep.com,irc.firex.org,irc.linux-friendly-56k.com,irc.smartnoc.com, $+ $&
    irc.sweatnet.net,eu.newnet.net,irc.me.uk,olympic.olympos-net.gr
  ;
  ; you can do the rest if you like this setup.
  ; I can't be bothered putting all your server in here
  ;

  /set %srvList.Pane 1
  /srvList.Display $dname

  ; we are on the first "pane", you can't go back
  /did -b $dname 20
}

on *:DIALOG:srvList:SCLICK:*: {
  var %pane = %srvList.Pane
  ; back one pane
  if ($did == 20) var %pane = %pane - 1

  ; forward a pane
  else if ($did == 30) var %pane = %pane + 1

  ; server connects
  else if ($did isnum 45-135) /server -m $did($calc($did - 5))

  ; Change pane if necessary
  if (%pane != %srvList.Pane) {
    /set %srvList.Pane %pane
    /srvList.Display $dname
    if (%pane == 1) /did -b $dname 20
    else /did -e $dname 20
    if (%pane == $hget(srvList, 0).item) /did -b $dname 30
    else /did -e $dname 30
  }
}

on *:DIALOG:srvList:CLOSE:*: {
  if ($hget(srvList)) /hfree srvList
  /unset %srvList.Pane
}

alias srvList.display {
  var %pane = %srvList.Pane, %dname = $1

  if ($hget(srvList, %pane).item) {
    var %topic = $ifmatch

    ; topic text
    /did -ra %dname 10 $replace(%topic, _, $chr(32))

    ; Server List
    /did -ra %dname 40,50,60,70,80,90,100,110,120,130
    /did -h %dname 45,55,65,75,85,95,105,115,125,135
    var %s = 1, %did = 40, %servers = $sorttok($hget(srvList, %topic), 44)
    while ($gettok(%servers, %s, 44)) {
      /did -vra %dname %did $ifmatch
      /did -v %dname $calc(%did + 5)
      /inc %did 10
      /inc %s
    }
  }
}


(Copy to wordpad first (Start>>Run>"Wordpad") then copy from there to mirc, for the formatting to stay.


-KingTomato