;; country.mrc v2.4
;; for mirc 5.4 and up
;; by: ryano@efnet <mailto:ryan@phix.com>
;;
;; use: /load -rs country.mrc
;; no configuration necessary
;; your settings are automatically read from your mirc.ini
;;
;; latest at: http://www.phix.com/~ryan/mirc/country.mrc
;; --------------------------------------------------------------------------
;; description:
;; translates the top level internet domain country codes of hostnames
;; on joins, parts and quits (except .com, .net, .org, .edu, and .gov,
;; respectivly) and appends the country name onto the end; i.e.:
;; *** Joins: nick (user@whatever.domain.yu (Yugoslavia))
;; --------------------------------------------------------------------------
;; 00.02.06: [1.1] fixed for new mirc.ini settings in 5.7 
;; 00.06.26: [1.2] fixed no status timestamp bug
;; 00.06.28: [2.0] added support for user addresses in 5.71 quit msgs
;; 00.08.17: [2.1] fixed small variable overflow bug
;; 00.09.26: [2.2] finally saw someone @*.arpa, code now reflects that
;; 00.11.16: [2.3] added .ps for those crazy palestinians
;; 01.05.07: [2.4] overflow fixed (* /set: line too long)
;;
;; please email me if you spot any bugs
;;

on &^*:join:# {
  if ($nick != $me) {
    cntry.main join $address $chan
    unset %cntry.*
  }
}
on &^*:part:# {
  if ($nick != $me) {
    cntry.main part $address $chan
    unset %cntry.*
  }
}
on &^*:quit {
  ;; on quit has no easy way of telling which channels the quit occurred on
  ;; so we have to figure it out by hand (using $comchan)
  if ($nick != $me) {
    ;; didn't have to worry about addresses in quit until 5.71
    if ($version < 5.71) return
    ;; now we have to find out all the chans the quitter is on
    set %cntry.i 1
    :loop {
      set %cntry.quitchans %cntry.quitchans $+ $comchan($nick,%cntry.i) $+ ,
      if (%cntry.i >= $comchan($nick,0)) goto end
      inc %cntry.i
      goto loop
    }
    :end
    cntry.main quit $address $left(%cntry.quitchans,$calc($len(%cntry.quitchans)-1)) $1-
    unset %cntry.*
  }
}

alias cntry.main {
  ;; we retrieve user settings from mirc.ini
  ;; show user addresses? (n0:2)
  set %cntry.tmp $readini -n $mircini options n0
  ;; no need to continue if user addresses aren't shown
  if ($gettok(%cntry.tmp,2,44) == 0) return

  ;; alternative (short) join/parts? (n2:19)
  set %cntry.tmp $readini -n $mircini options n2
  set %cntry.shortjp $gettok(%cntry.tmp,19,44)

  ;; joins/parts in chan?
  if ($version < 5.7) {
    ;; settings stored in mirc.ini [options] (n3:25)
    set %cntry.tmp $readini -n $mircini options n3
    set %cntry.jchan $gettok(%cntry.tmp,25,44)
    set %cntry.pchan $gettok(%cntry.tmp,25,44)
  }
  else {
    ;; 5.7 added [events] section with channel specific settings
    ;; default 0=chan, 1=status, 2=hide
    ;; chan 0=default, 1=chan, 2=status, 3=hide
    set %cntry.tmp $readini -n $mircini events default
    set %cntry.jchan $calc($gettok(%cntry.tmp,1,44) + 1)
    set %cntry.pchan $calc($gettok(%cntry.tmp,2,44) + 1)
    if ($ini($mircini,events,$3)) {
      set %cntry.tmp $readini -n $mircini events $3
      set %cntry.jchan.tmp $gettok(%cntry.tmp,1,44)
      if (%cntry.jchan.tmp != 0) set %cntry.jchan %cntry.jchan.tmp
      set %cntry.pchan.tmp $gettok(%cntry.tmp,2,44)
      if (%cntry.pchan.tmp != 0) set %cntry.pchan %cntry.pchan.tmp
    }
    if (($1 == join) && (%cntry.jchan == 3)) return
    if (($1 == part) && (%cntry.pchan == 3)) return
  }
  ;; get the country
  cntry.get $gettok($2,$gettok($2,0,46),46)

  ;; echo the join/part/quit, if needed
  if ($result) {
    ;; $1=join|part, $2=address, $3=chan
    if (($1 == join) || ($1 == part)) {
      if ((($1 == join) && (%cntry.jchan == 1)) || (($1 == part) && (%cntry.pchan == 1))) {
        ;; in chan
        set %cntry.echo -t $3
        set %cntry.extra :
      }
      elseif ((($1 == join) && (%cntry.jchan == 2)) || (($1 == part) && (%cntry.pchan == 2))) {
        ;; in status
        set %cntry.echo -tse
        set %cntry.extra $chr(32) $+ $3 $+ :
      }
      if (%cntry.shortjp == 1) {
        echo $colour($1) %cntry.echo *** $upper($mid($1,1,1)) $+ $mid($1,2,$mid($1,2,0)) $+ s $+ %cntry.extra $nick ( $+ $2 ( $+ $result $+ ) $+ ) $+ 
      }
      else {
        echo $colour($1) %cntry.echo *** $nick ( $+ $2 ( $+ $result $+ ) $+ ) has $1 $+ ed $chan $+ 
      }
    }
    elseif ($1 == quit) {
      ;; this is me trying to emulate mirc's default quit behaviour as much as possible
      if ($4 != $null) set %cntry.quitmsg ( $+ $4- $+ )
      set %cntry.defs $readini -n $mircini events default
      set %cntry.i 1
      :qloop {
        if (%cntry.i > $numtok($3,44)) goto qend
        set %cntry.qchan $calc($gettok(%cntry.defs,3,44) + 1)
        if ($ini($mircini,events,$gettok($3,%cntry.i,44))) {
          set %cntry.tmp $readini -n $mircini events $gettok($3,%cntry.i,44)
          set %cntry.qchan.tmp $gettok(%cntry.tmp,3,44)
          if (%cntry.qchan.tmp != 0) set %cntry.qchan %cntry.qchan.tmp
        }
        if (%cntry.qchan == 4) {
          inc %cntry.i
          goto qloop
        }
        if (%cntry.qchan == 1) {
          if (%cntry.shortjp == 1) {
            echo $colour($1) -t $gettok($3,%cntry.i,44) *** Quits: $nick ( $+ $2 ( $+ $result $+ ) $+ ) %cntry.quitmsg $+ 
          }
          else {
            echo $colour($1) -t $gettok($3,%cntry.i,44) *** $nick ( $+ $2 ( $+ $result $+ ) $+ ) Quit %cntry.quitmsg $+ 
          }
        }
        elseif (%cntry.qchan == 2) {
          if (%cntry.instatus != 1) {
            set %cntry.instatus 1
            echo $colour($1) -tse *** $nick ( $+ $2 ( $+ $result $+ ) $+ ) Quit %cntry.quitmsg $+ 
          }
        }
        elseif (%cntry.qchan == 3) {
          if (%cntry.shortjp == 1) {
            echo $colour($1) -t $gettok($3,%cntry.i,44) *** Quits: $nick ( $+ $2 ( $+ $result $+ ) $+ ) %cntry.quitmsg $+ 
          }
          else {
            echo $colour($1) -t $gettok($3,%cntry.i,44) *** $nick ( $+ $2 ( $+ $result $+ ) $+ ) Quit %cntry.quitmsg $+ 
          }
          if (%cntry.instatus != 1) {
            set %cntry.instatus 1
            echo $colour($1) -tse *** $nick ( $+ $2 ( $+ $result $+ ) $+ ) Quit %cntry.quitmsg $+ 
          }
        }
        inc %cntry.i
        goto qloop
      }
      :qend
    }
    haltdef
  }
}

;; get country
alias cntry.get {
  if (($len($1) < 2) || ($len($1) > 4)) return
  ;; i'm obviously biased toward my own country, feel free to change these at will
  if (($1 isnum) || ($1 == com) || ($1 == net) || ($1 == org) || ($1 == edu) || ($1 == gov)) return
  ;; all of these should be up to date
  if ($1 == AC) return Ascension Island
  if ($1 == AD) return Andorra
  if ($1 == AE) return United Arab Emirates
  if ($1 == AF) return Afghanistan
  if ($1 == AG) return Antigua and Barbuda
  if ($1 == AI) return Anguilla
  if ($1 == AL) return Albania
  if ($1 == AM) return Armenia
  if ($1 == AN) return Netherlands Antilles
  if ($1 == AO) return Angola
  if ($1 == AQ) return Antarctica
  if ($1 == AR) return Argentina
  if ($1 == AS) return American Samoa
  if ($1 == AT) return Austria
  if ($1 == AU) return Australia
  if ($1 == AW) return Aruba
  if ($1 == AZ) return Azerbaijan
  if ($1 == BA) return Bosnia and Herzegovina
  if ($1 == BB) return Barbados
  if ($1 == BD) return Bangladesh
  if ($1 == BE) return Belgium
  if ($1 == BF) return Burkina Faso
  if ($1 == BG) return Bulgaria
  if ($1 == BH) return Bahrain
  if ($1 == BI) return Burundi
  if ($1 == BJ) return Benin
  if ($1 == BM) return Bermuda
  if ($1 == BN) return Brunei Darussalam
  if ($1 == BO) return Bolivia
  if ($1 == BR) return Brazil
  if ($1 == BS) return Bahamas
  if ($1 == BT) return Bhutan
  if ($1 == BV) return Bouvet Island
  if ($1 == BW) return Botswana
  if ($1 == BY) return Belarus
  if ($1 == BZ) return Belize
  if ($1 == CA) return Canada
  if ($1 == CC) return Cocos (Keeling) Islands
  if ($1 == CD) return The Democratic Republic of Congo
  if ($1 == CF) return Central African Republic
  if ($1 == CG) return Congo
  if ($1 == CH) return Switzerland
  if ($1 == CI) return Cote D'Ivoire (Ivory Coast)
  if ($1 == CK) return Cook Islands
  if ($1 == CL) return Chile
  if ($1 == CM) return Cameroon
  if ($1 == CN) return China
  if ($1 == CO) return Colombia
  if ($1 == CR) return Costa Rica
  if ($1 == CS) return Czechoslovakia (former)
  if ($1 == CU) return Cuba
  if ($1 == CV) return Cape Verde
  if ($1 == CX) return Christmas Island
  if ($1 == CY) return Cyprus
  if ($1 == CZ) return Czech Republic
  if ($1 == DE) return Germany
  if ($1 == DJ) return Djibouti
  if ($1 == DK) return Denmark
  if ($1 == DM) return Dominica
  if ($1 == DO) return Dominican Republic
  if ($1 == DZ) return Algeria
  if ($1 == EC) return Ecuador
  if ($1 == EE) return Estonia
  if ($1 == EG) return Egypt
  if ($1 == EH) return Western Sahara
  if ($1 == ER) return Eritrea
  if ($1 == ES) return Spain
  if ($1 == ET) return Ethiopia
  if ($1 == FI) return Finland
  if ($1 == FJ) return Fiji
  if ($1 == FK) return Falkland Islands (Malvinas)
  if ($1 == FM) return Micronesia
  if ($1 == FO) return Faroe Islands
  if ($1 == FR) return France
  if ($1 == FX) return France, Metropolitan
  if ($1 == GA) return Gabon
  if ($1 == GB) return Great Britain (UK)
  if ($1 == GD) return Grenada
  if ($1 == GE) return Georgia
  if ($1 == GF) return French Guiana
  if ($1 == GH) return Ghana
  if ($1 == GI) return Gibraltar
  if ($1 == GL) return Greenland
  if ($1 == GM) return Gambia
  if ($1 == GN) return Guinea
  if ($1 == GP) return Guadeloupe
  if ($1 == GQ) return Equatorial Guinea
  if ($1 == GR) return Greece
  if ($1 == GS) return S. Georgia and S. Sandwich Isls.
  if ($1 == GT) return Guatemala
  if ($1 == GU) return Guam
  if ($1 == GW) return Guinea-Bissau
  if ($1 == GY) return Guyana
  if ($1 == HK) return Hong Kong
  if ($1 == HM) return Heard and McDonald Islands
  if ($1 == HN) return Honduras
  if ($1 == HR) return Croatia (Hrvatska)
  if ($1 == HT) return Haiti
  if ($1 == HU) return Hungary
  if ($1 == ID) return Indonesia
  if ($1 == IE) return Ireland
  if ($1 == IL) return Israel
  if ($1 == IN) return India
  if ($1 == IO) return British Indian Ocean Territory
  if ($1 == IQ) return Iraq
  if ($1 == IR) return Iran
  if ($1 == IS) return Iceland
  if ($1 == IT) return Italy
  if ($1 == JM) return Jamaica
  if ($1 == JO) return Jordan
  if ($1 == JP) return Japan
  if ($1 == KE) return Kenya
  if ($1 == KG) return Kyrgyzstan
  if ($1 == KH) return Cambodia
  if ($1 == KI) return Kiribati
  if ($1 == KM) return Comoros
  if ($1 == KN) return Saint Kitts and Nevis
  if ($1 == KP) return Korea (North)
  if ($1 == KR) return Korea (South)
  if ($1 == KW) return Kuwait
  if ($1 == KY) return Cayman Islands
  if ($1 == KZ) return Kazakhstan
  if ($1 == LA) return Laos
  if ($1 == LB) return Lebanon
  if ($1 == LC) return Saint Lucia
  if ($1 == LI) return Liechtenstein
  if ($1 == LK) return Sri Lanka
  if ($1 == LR) return Liberia
  if ($1 == LS) return Lesotho
  if ($1 == LT) return Lithuania
  if ($1 == LU) return Luxembourg
  if ($1 == LV) return Latvia
  if ($1 == LY) return Libya
  if ($1 == MA) return Morocco
  if ($1 == MC) return Monaco
  if ($1 == MD) return Moldova
  if ($1 == MG) return Madagascar
  if ($1 == MH) return Marshall Islands
  if ($1 == MK) return Macedonia
  if ($1 == ML) return Mali
  if ($1 == MM) return Myanmar
  if ($1 == MN) return Mongolia
  if ($1 == MO) return Macau
  if ($1 == MP) return Northern Mariana Islands
  if ($1 == MQ) return Martinique
  if ($1 == MR) return Mauritania
  if ($1 == MS) return Montserrat
  if ($1 == MT) return Malta
  if ($1 == MU) return Mauritius
  if ($1 == MV) return Maldives
  if ($1 == MW) return Malawi
  if ($1 == MX) return Mexico
  if ($1 == MY) return Malaysia
  if ($1 == MZ) return Mozambique
  if ($1 == NA) return Namibia
  if ($1 == NC) return New Caledonia
  if ($1 == NE) return Niger
  if ($1 == NF) return Norfolk Island
  if ($1 == NG) return Nigeria
  if ($1 == NI) return Nicaragua
  if ($1 == NL) return Netherlands
  if ($1 == NO) return Norway
  if ($1 == NP) return Nepal
  if ($1 == NR) return Nauru
  if ($1 == NT) return Neutral Zone
  if ($1 == NU) return Niue
  if ($1 == NZ) return New Zealand
  if ($1 == OM) return Oman
  if ($1 == PA) return Panama
  if ($1 == PE) return Peru
  if ($1 == PF) return French Polynesia
  if ($1 == PG) return Papua New Guinea
  if ($1 == PH) return Philippines
  if ($1 == PK) return Pakistan
  if ($1 == PL) return Poland
  if ($1 == PM) return St. Pierre and Miquelon
  if ($1 == PN) return Pitcairn
  if ($1 == PR) return Puerto Rico
  if ($1 == PS) return Palestinian Authority
  if ($1 == PT) return Portugal
  if ($1 == PW) return Palau
  if ($1 == PY) return Paraguay
  if ($1 == QA) return Qatar
  if ($1 == RE) return Reunion
  if ($1 == RO) return Romania
  if ($1 == RU) return Russian Federation
  if ($1 == RW) return Rwanda
  if ($1 == SA) return Saudi Arabia
  if ($1 == SB) return Solomon Islands
  if ($1 == SC) return Seychelles
  if ($1 == SD) return Sudan
  if ($1 == SE) return Sweden
  if ($1 == SG) return Singapore
  if ($1 == SH) return St. Helena
  if ($1 == SI) return Slovenia
  if ($1 == SJ) return Svalbard and Jan Mayen Islands
  if ($1 == SK) return Slovak Republic
  if ($1 == SL) return Sierra Leone
  if ($1 == SM) return San Marino
  if ($1 == SN) return Senegal
  if ($1 == SO) return Somalia
  if ($1 == SR) return Suriname
  if ($1 == ST) return Sao Tome and Principe
  if ($1 == SU) return USSR (former)
  if ($1 == SV) return El Salvador
  if ($1 == SY) return Syria
  if ($1 == SZ) return Swaziland
  if ($1 == TC) return Turks and Caicos Islands
  if ($1 == TD) return Chad
  if ($1 == TF) return French Southern Territories
  if ($1 == TG) return Togo
  if ($1 == TH) return Thailand
  if ($1 == TJ) return Tajikistan
  if ($1 == TK) return Tokelau
  if ($1 == TM) return Turkmenistan
  if ($1 == TN) return Tunisia
  if ($1 == TO) return Tonga
  if ($1 == TP) return East Timor
  if ($1 == TR) return Turkey
  if ($1 == TT) return Trinidad and Tobago
  if ($1 == TV) return Tuvalu
  if ($1 == TW) return Taiwan
  if ($1 == TZ) return Tanzania
  if ($1 == UA) return Ukraine
  if ($1 == UG) return Uganda
  if ($1 == UK) return United Kingdom
  if ($1 == UM) return US Minor Outlying Islands
  if ($1 == US) return United States
  if ($1 == UY) return Uruguay
  if ($1 == UZ) return Uzbekistan
  if ($1 == VA) return Vatican City State (Holy See)
  if ($1 == VC) return Saint Vincent and the Grenadines
  if ($1 == VE) return Venezuela
  if ($1 == VG) return Virgin Islands (British)
  if ($1 == VI) return Virgin Islands (U.S.)
  if ($1 == VN) return Vietnam
  if ($1 == VU) return Vanuatu
  if ($1 == WF) return Wallis and Futuna Islands
  if ($1 == WS) return Samoa
  if ($1 == YE) return Yemen
  if ($1 == YT) return Mayotte
  if ($1 == YU) return Yugoslavia
  if ($1 == ZA) return South Africa
  if ($1 == ZD) return The Democratic Republic of Congo (Formerly Zaire)
  if ($1 == ZM) return Zambia
  if ($1 == ZR) return The Democratic Republic of Congo (Formerly Zaire)
  if ($1 == ZW) return Zimbabwe
  if ($1 == INT) return International
  if ($1 == MIL) return US Military
  if ($1 == ARPA) return Old style Arpanet
  return Unknown
}
