[#389739] Ruby Challenge — teresa nuagen <unguyen90@...>

Here is a ruby challenge for all you computer science lovers out there,

22 messages 2011/11/05
[#389769] Re: Ruby Challenge — "Jonan S." <jonanscheffler@...> 2011/11/05

Totally unrelated to any husker computer science programs right? Like

[#389905] Re: Ruby Challenge — Stephen Ramsay <sramsay.unl@...> 2011/11/09

Jonan S. wrote in post #1030330:

[#389907] Re: Ruby Challenge — aseret nuagen <unguyen90@...> 2011/11/09

> You mean like the professor for the course? Because that would be me .

[#389915] Re: Ruby Challenge — Robert Klemme <shortcutter@...> 2011/11/09

On Wed, Nov 9, 2011 at 4:52 AM, aseret nuagen <unguyen90@aim.com> wrote:

[#389792] Tricky DSL, how to do it? — Intransition <transfire@...>

I'd want to write a DSL such that a surface method_missing catches

18 messages 2011/11/06

[#389858] Compiling Ruby Inline C code - resolving errors — Martin Hansen <mail@...>

I am trying to get this Ruby inline C code http://pastie.org/2825882 to

12 messages 2011/11/08

[#389928] Forming a Ruby meetup group... — "Darryl L. Pierce" <mcpierce@...>

Where I work we have a local Ruby group that used to meet up, until the

12 messages 2011/11/09

[#389950] The faster way to read files — "Noé Alejandro" <casanejo@...>

Does anybody know which is the fastest way to read a file? Lets say

18 messages 2011/11/09

[#390064] referring to version numbers in a gem — Chad Perrin <code@...>

How do I specify and access a gem's version number within the code of the

28 messages 2011/11/11

[#390238] RVM problem, plz help — Misha Ognev <b1368810@...>

Hi, I have this problem:

15 messages 2011/11/16

[#390308] any command line tools for querying yaml files — Rahul Kumar <sentinel1879@...>

(Sorry, this is not exactly a ruby question).

11 messages 2011/11/18

[#390338] Newbie - cmd question — Otto Dydakt <ottodydakt@...>

I've literally JUST downloaded ruby from rubyinstaller.org.

21 messages 2011/11/19
[#390342] Re: Newbie - cmd question — Otto Dydakt <ottodydakt@...> 2011/11/19

OK thank you, I uninstalled & reinstalled, checking the three boxes at

[#390343] Re: Newbie - cmd question — "Ian M. Asaff" <ian.asaff@...> 2011/11/19

did you type "irb" first to bring up the ruby command prompt?

[#391154] Re: Newbie - cmd question — "Hussain A." <hahmad@...> 2011/12/12

Hi all,

[#391165] Re: Newbie - cmd question — Luis Lavena <luislavena@...> 2011/12/12

Hussain A. wrote in post #1036281:

[#390374] Principle of Best Principles — Intransition <transfire@...>

I seem to run into a couple of design issue a lot and I never know what is

16 messages 2011/11/20

[#390396] how to call Function argument into another ruby script. — hari mahesh <harismahesh@...>

Consider I have a ruby file called library.rb.

10 messages 2011/11/21

[#390496] How to make 1.9.2 my default version using RVM — Fily Salas <fs_tigre@...>

Hi,

25 messages 2011/11/24

[#390535] Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...>

Well, first of all, I'm new to Ruby, and to this forum. So, hello. :)

39 messages 2011/11/25
[#390580] Re: Is high-speed sorting impossible with Ruby? — Joao Pedrosa <joaopedrosa@...> 2011/11/27

Hi,

[#390593] Re: Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...> 2011/11/27

Joao Pedrosa wrote in post #1033884:

[#390600] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

A big gain can be had by disabling the garbage collector. Here is my best

[#390601] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

I've thrown various solutions up on github here:

[#390689] Stupid question — James Gallagher <lollyproductions@...>

Hi everyone.

22 messages 2011/11/30

Re: need spome help please :)

From: "marcin k." <doreklamster@...>
Date: 2011-11-06 07:49:24 UTC
List: ruby-talk #389781
well.. it was only pice of code as whole one is long :P
but ok here it is:



require 'tk'

`chcp 65001`
root = TkRoot.new() {title "Migrator RUCH v1.03 sakej update"}

content = Tk::Tile::Frame.new(root) {padding "20 20 125 125"}.grid( 
:sticky => 'nsew')
$content = content
TkGrid.columnconfigure root, 0, :weight => 1
TkGrid.rowconfigure root, 0, :weight => 1

# Deklaracja zmiennych globalnych
$psd                = TkVariable.new
$miejscowosc        = TkVariable.new
$service_check      = TkVariable.new

#Ścieżki do plików
$file_protokol_path   = TkVariable.new
$file_csq_path        = TkVariable.new
$file_serwis_1_path   = TkVariable.new
$file_serwis_2_path   = TkVariable.new
$file_serwis_3_path   = TkVariable.new
$file_modem_path      = TkVariable.new
$file_sprzedaz_path   = TkVariable.new
$file_plomba_path     = TkVariable.new
$file_pos_path         = TkVariable.new
$file_kableprzed_path  = TkVariable.new
$file_kablepo_path     = TkVariable.new
$file_posprzed_path    = TkVariable.new
$file_name = TkVariable.new



# Nazwy plików plus rozszerzenia
$file_protokol_name = TkVariable.new
$file_protokol_ext  = TkVariable.new
$file_csq_name      = TkVariable.new
$file_csq_ext       = TkVariable.new
$file_modem_name    = TkVariable.new
$file_modem_ext     = TkVariable.new
$file_serwis_1_name = TkVariable.new
$file_serwis_1_ext  = TkVariable.new
$file_serwis_2_name = TkVariable.new
$file_serwis_2_ext  = TkVariable.new
$file_serwis_3_name = TkVariable.new
$file_serwis_3_ext  = TkVariable.new
$file_sprzedaz_name = TkVariable.new
$file_sprzedaz_ext  = TkVariable.new
$file_plomba_name   = TkVariable.new
$file_plomba_ext    = TkVariable.new
$file_pos_name      = TkVariable.new
$file_pos_ext       = TkVariable.new
$file_kableprzed_name = TkVariable.new
$file_kableprzed_ext = TkVariable.new
$file_kablepo_name = TkVariable.new
$file_kablepo_ext = TkVariable.new
$file_posprzed_name = TkVariable.new
$file_posprzed_ext = TkVariable.new
$miejscowosc = TkVariable.new

# Pola na wprowadzenie wartości PSD i Miejscowości
psd = Tk::Tile::Entry.new(content) {width 6; textvariable $psd}.grid( 
:column => 2, :row => 1, :sticky => 'we' )
miejscowosc = Tk::Tile::Entry.new(content) {width 20; textvariable 
$miejscowosc}.grid(:column => 5, :row => 1, :sticky => 'we')
Tk::Tile::Label.new(content) {text 'PSD'}.grid( :column => 1, :row =>1, 
:sticky => 'e')
Tk::Tile::Label.new(content) {text 'Miejscowość'}.grid( :column => 4, 
:row => 1, :sticky => 'e')

# Protokół elektroniczny
Tk::Tile::Label.new(content) {text 'Protokol elektroniczny'}.grid( 
:column => 1, :columnspan => 2, :row => 2, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.protokol_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
2, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_protokol_name}.grid( 
:column => 5, :row => 2, :sticky => 'ne', :columnspan => 4)

# Zdjęcie modemu
Tk::Tile::Label.new(content) {text 'Zdjęcie modemu'}.grid( :column => 1, 
:columnspan => 2, :row => 3, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.modem_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 3, 
:sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_modem_name}.grid( 
:column => 5, :row => 3, :sticky => 'ne')

# Zdjęcie CSQ
Tk::Tile::Label.new(content) {text 'Zdjęcie CSQ'}.grid( :column => 1, 
:columnspan => 2, :row => 4, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.csq_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 4, 
:sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_csq_name}.grid( :column 
=> 5, :row => 4, :sticky => 'ne')

#Zdjęcia 3 pierwszych stron książki serwisowej
Tk::Tile::Label.new(content) {text 'Zdjęcia książki serwisowej'}.grid( 
:column => 1, :row => 5, :sticky => 'e')
Tk::Tile::Label.new(content) {text '1'}.grid( :column => 2, :row => 5, 
:sticky => 'e')
Tk::Tile::Label.new(content) {text '3'}.grid( :column => 2, :row => 6, 
:sticky => 'e')
Tk::Tile::Label.new(content) {text '4'}.grid( :column => 2, :row => 7, 
:sticky => 'e')

  Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.serwis_1_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
5, :sticky => 'nw', :padx => 15)
  Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.serwis_2_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
6, :sticky => 'nw', :padx => 15)
  Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.seriws_3_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
7, :sticky => 'nw', :padx => 15)

Tk::Tile::Label.new(content) {textvariable $file_serwis_1_name}.grid( 
:column => 5, :row => 5, :sticky => 'ne')
Tk::Tile::Label.new(content) {textvariable $file_serwis_2_name}.grid( 
:column => 5, :row => 6, :sticky => 'ne')
Tk::Tile::Label.new(content) {textvariable $file_serwis_3_name}.grid( 
:column => 5, :row => 7, :sticky => 'ne')

# Zdjęcie sprzedaż próbnej
Tk::Tile::Label.new(content) {text 'Zdjęcie sprzedaży próbnej'}.grid( 
:column => 1, :columnspan => 2, :row => 9, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.sprzedaz_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
9, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_sprzedaz_name}.grid( 
:column => 5, :row => 9, :sticky => 'ne')

# Zdjęcie plomby serwisowej
Tk::Tile::Label.new(content) {text 'Zdjęcie plomby serwisowej'}.grid( 
:column => 1, :columnspan => 2, :row => 10, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.plomba_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
10, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_plomba_name}.grid( 
:column => 5, :row => 10, :sticky => 'ne')

# Zdjęcie stanowiska POS
Tk::Tile::Label.new(content) {text 'Zdjęcie stanowiska POS'}.grid( 
:column => 1, :columnspan => 2, :row => 11, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.pos_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 11, 
:sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_pos_name}.grid( :column 
=> 5, :row => 11, :sticky => 'ne')

# Zdjęcie kabli przed migracją
Tk::Tile::Label.new(content) {text 'Zdjęcie kabli przed migracją'}.grid( 
:column => 1, :columnspan => 2, :row => 12, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.kableprzed_name(Tk.getOpenFile)}}.grid( :column => 4, :row 
=> 12, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_kableprzed_name}.grid( 
:column => 5, :row => 12, :sticky => 'ne')

# Zdjęcie kabli po migracji
Tk::Tile::Label.new(content) {text 'Zdjęcie kabli po migracji'}.grid( 
:column => 1, :columnspan => 2, :row => 13, :sticky => 'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.kablepo_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
13, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_kablepo_name}.grid( 
:column => 5, :row => 13, :sticky => 'ne')

# Zdjęcie stanowiska POS przed migracją
Tk::Tile::Label.new(content) {text 'Zdjęcie stanowiska POS przed 
migracją'}.grid( :column => 1, :columnspan => 2, :row => 14, :sticky => 
'e')
Tk::Tile::Button.new(content) {text '...'; command 
{Generuj.new.posprzed_name(Tk.getOpenFile)}}.grid( :column => 4, :row => 
14, :sticky => 'nw', :padx => 15)
Tk::Tile::Label.new(content) {textvariable $file_posprzed_name}.grid( 
:column => 5, :row => 14, :sticky => 'ne')

# Generowanie
Tk::Tile::Label.new(content) {text ''}.grid(:column => 2, :columnspan => 
2, :row => 15, :sticky => 'ne')
Tk::Tile::Button.new(content) {text 'Generuj'; command 
{Generuj.new.execute}}.grid( :column => 4, :columnspan => 1, :row => 17, 
:sticky => 's')

#  Zamykanie programu
Tk::Tile::Button.new(content) {text 'Zamknij'; command { 
root.destroy}}.grid(:column => 5, :columnspan => 1, :row => 17, :sticky 
=> 'w' )

# Czy w psd była książka serwisowa
Tk::Tile::CheckButton.new(content) {text "Brak książki serwisowej"; 
variable $service_check; onvalue 'brak'; offvalue '1'; command 
{Generuj.new.service_check}}.grid( :column => 3, :columnspan => 2, :row 
=> 8, :sticky => 'e')

# Wyczyść wszystkie pola
Tk::Tile::Button.new(content) {text 'Wyczyść'; command 
{Generuj.new.clear_all}}.grid(:column => 2, :columnspan => 2, :row =>17, 
:sticky => 'w')

class Generuj
  #
  def service_check
    if $service_check == 'brak' then
      $file_serwis_1_name.value = "brak książki serwisowej w PSD"
      $file_serwis_2_name.value = "brak książki serwisowej w PSD"
      $file_serwis_3_name.value = "brak książki serwisowej w PSD"

    else
      $file_serwis_1_name.value = nil
      $file_serwis_2_name.value = nil
      $file_serwis_3_name.value = nil

    end
  end
  # Nazwa pliku protokołu
  def protokol_name(path)
    $file_protokol_path.value = path
    $file_protokol_name.value = File.basename(path, ".*")
    $file_protokol_ext.value  = File.extname(path)
  end

  # Nazwa pliku modemu
  def modem_name(path)
    $file_modem_path.value    = path
    $file_modem_name.value    = File.basename(path, ".*")
    $file_modem_ext.value     = File.extname(path)
  end

  # Nazwa pliku csq
  def csq_name(path)
    $file_csq_path.value      = path
    $file_csq_name.value      = File.basename(path, ".*")
    $file_csq_ext.value       = File.extname(path)
  end

  # Nazwa pliku serwis_1
  def serwis_1_name(path)
    $file_serwis_1_path.value = path
    $file_serwis_1_name.value = File.basename(path, ".*")
    $file_serwis_1_ext.value  = File.extname(path)
  end

  # Nazwa pliku serwis_2
  def serwis_2_name(path)
    $file_serwis_2_path.value = path
    $file_serwis_2_name.value = File.basename(path, ".*")
    $file_serwis_2_ext.value  = File.extname(path)
  end

  # Nazwa pliku serwis_3
  def seriws_3_name(path)
    $file_serwis_3_path.value = path
    $file_serwis_3_name.value = File.basename(path, ".*")
    $file_serwis_3_ext.value  = File.extname(path)
  end

  # Nazwa pliku sprzedaży
  def sprzedaz_name(path)
    $file_sprzedaz_path.value = path
    $file_sprzedaz_name.value = File.basename(path, ".*")
    $file_sprzedaz_ext.value  = File.extname(path)
  end

  # Nazwa pliku plomby
  def plomba_name(path)
    $file_plomba_path.value   = path
    $file_plomba_name.value   = File.basename(path, ".*")
    $file_plomba_ext.value    = File.extname(path)
  end

  # Nazwa pliku pos
  def pos_name(path)
    $file_pos_path.value      = path
    $file_pos_name.value      = File.basename(path, ".*")
    $file_pos_ext.value       = File.extname(path)
  end

  # Nazwa pliku kable przed migracją
  def kableprzed_name(path)
    $file_kableprzed_path.value      = path
    $file_kableprzed_name.value      = File.basename(path, ".*")
    $file_kableprzed_ext.value       = File.extname(path)
  end


  # Nazwa pliku kable po migracji
  def kablepo_name(path)
    $file_kablepo_path.value      = path
    $file_kablepo_name.value      = File.basename(path, ".*")
    $file_kablepo_ext.value       = File.extname(path)
  end


  # Nazwa pliku pos przed migracją
  def posprzed_name(path)
    $file_posprzed_path.value      = path
    $file_posprzed_name.value      = File.basename(path, ".*")
    $file_posprzed_ext.value       = File.extname(path)
  end

  # Zmień nazwę pliku
  def file_rename(path)
    case path
      when $file_protokol_path    then $file_name.value = 
String.new("potwierdzenie migracji w PSD") and file_ext = 
$file_protokol_ext and old_file = $file_protokol_path
      when $file_modem_path       then $file_name.value = "potwierdzenie 
inslatacji modemu GSM w PSD" and file_ext = $file_modem_ext and old_file 
= $file_modem_path
      when $file_csq_path         then $file_name.value = "zasięg 
stanowiska GSM w PSD" and file_ext = $file_csq_ext and old_file = 
$file_csq_path
      when $file_serwis_1_path    then $file_name.value = "zdjęcie 
książki serwisowej w PSD (1)" and file_ext = $file_serwis_1_ext and 
old_file = $file_serwis_1_path
      when $file_serwis_2_path    then $file_name.value = "zdjęcie 
książki serwisowej w PSD (2)" and file_ext = $file_serwis_2_ext and 
old_file = $file_serwis_2_path
      when $file_serwis_3_path    then $file_name.value = "zdjęcie 
książki serwisowej w PSD (3)" and file_ext = $file_serwis_3_ext and 
old_file = $file_serwis_3_path
      when $file_sprzedaz_path    then $file_name.value = "potwierdzenie 
sprzedaży próbnej w PSD" and file_ext = $file_sprzedaz_ext and old_file 
= $file_sprzedaz_path
      when $file_plomba_path      then $file_name.value = "zdjęcie 
plomby drukarki w PSD" and file_ext = $file_plomba_ext and old_file = 
$file_plomba_path
      when $file_pos_path         then $file_name.value = "zdjęcie 
stanowiska POS w PSD" and file_ext = $file_pos_ext and old_file = 
$file_pos_path
      when $file_kableprzed_path  then $file_name.value = "stan 
okablowania POS przed migracją w PSD " and file_ext = 
$file_kableprzed_ext and old_file = $file_kableprzed_path
      when $file_kablepo_path    then $file_name.value = "stan 
okablowania POS po migracji w PSD " and file_ext = $file_kablepo_ext and 
old_file = $file_kablepo_path
      when $file_posprzed_path    then $file_name.value = "stan POS po 
migracji w PSD " and file_ext = $file_posprzed_ext and old_file = 
$file_posprzed_path

    end
    if path != nil or "#{path}".length != 0 then
      File.rename("#{old_file}", "Ruch, #{$file_name} #{$psd} , 
#{$miejscowosc}#{file_ext}")
    #else
    #  name_of_file = "Brak pliku Ruch, #{file_name}.txt"
    #  file = File.new(name_of_file, "w")
    #  file.write "Brak danych dla pliku: Ruch, #{file_name}.txt"
    #  file.close
    end

    $file_name.value = nil

  end

  # Zmień nazwy plików
  def execute
    if "#{$psd}".length != 6 or "#{$psd}".to_i == 0 then
      Tk::messageBox :message => "Zły kod psd"
    else
      if not File.directory?("PSD #{$psd}, #{$miejscowosc}") then
        Dir.mkdir( "PSD #{$psd}, #{$miejscowosc}" )
      end
      Dir.chdir( "PSD #{$psd}, #{$miejscowosc}" )

      #$win = TkToplevel.new($content)
      #$win['geometry'] = '300x200+500+200'
      #Tk::Tile::Button.new($win) {text 'Zamknij'; command 
{$win.destroy}}.grid( :column => 3, :row => 3, :sticky => 'w')


            #Tk::Tile::Label.new($win) {textvariable $file_name}.grid( 
:column => 2, :row => 2, :sticky => 'we');


      # Zmień nazwę protokołu
      file_rename($file_protokol_path)
      file_rename($file_modem_path)
      file_rename($file_csq_path)
      file_rename($file_serwis_1_path)
      file_rename($file_serwis_2_path)
      file_rename($file_serwis_3_path)
      file_rename($file_sprzedaz_path)
      file_rename($file_plomba_path)
      file_rename($file_pos_path)
      file_rename($file_kableprzed_path)
      file_rename($file_kablepo_path)
      file_rename($file_posprzed_path)
      if $service_check == "brak" then
        file = File.new( "Brak książki serwisowej w PSD #{$psd}, 
#{$miesjcowosc}")
      end

      if all_files_correct? then
        Tk::messageBox :message => "Wykonano pomyślnie"
      else
        Tk::messageBox :message => "Brakuje plików"
      end
    end
    Dir.chdir("..")

  end

  # Uzupełnij braki
  def complete_rest
    if File.exist?("{$protokol_new}")
      puts "isntnieje!"
    else
      puts "nie ma mnie!"
    end
  end

  # Wyczyść wszystkie pola
  def clear_all
    $miejscowosc.value = nil
    $psd.value = nil
    $file_protokol_path.value = nil
    $file_csq_path.value = nil
    $file_serwis_1_path.value = nil
    $file_serwis_2_path.value = nil
    $file_serwis_3_path.value = nil
    $file_modem_path.value = nil
    $file_sprzedaz_path.value = nil
    $file_plomba_path.value = nil
    $file_pos_path.value = nil
    $file_kableprzed_path.value = nil
    $file_kablepo_path.value = nil
    $file_posprzed_path.value = nil
    $file_protokol_name.value = nil
    $file_protokol_ext.value = nil
    $file_csq_name.value = nil
    $file_csq_ext.value = nil
    $file_modem_name.value = nil
    $file_modem_ext.value = nil
    $file_serwis_1_name.value = nil
    $file_serwis_1_ext.value = nil
    $file_serwis_2_name.value = nil
    $file_serwis_2_ext.value = nil
    $file_serwis_3_name.value = nil
    $file_serwis_3_ext.value = nil
    $file_sprzedaz_name.value = nil
    $file_sprzedaz_ext.value = nil
    $file_plomba_name.value = nil
    $file_plomba_ext.value = nil
    $file_pos_name.value = nil
    $file_pos_ext.value = nil
    $file_kableprzed_ext.value = nil
    $file_kableprzed_name.value = nil
    $file_kablepo_ext.value = nil
    $file_kablepo_name.value = nil
    $file_posprzed_ext.value = nil
    $file_posprzed_name.value = nil
    $miejscowosc.value = nil

  end

  # Wszystkich plików
  def all_files_correct?
    if $service_check == "brak" then
      @all_files = 6
    else
      @all_files = 9
    end
      i = 0
      Dir['*.*'].each do |k|
        i = i + 1
      end
      if i == @all_files then
        return true
      else
        return false
      end
    end


  end

#end
Tk.mainloop

-- 
Posted via http://www.ruby-forum.com/.

In This Thread