Fruit basket program in Nemerle

  • From: Jamal Mazrui <empower@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Fri, 9 Nov 2007 17:03:56 -0500 (EST)

From the zip archive at
http://www.EmpowermentZone.com/n_fruit.zip

This fruit basket program is written in Nemerle  -- Full source code in
the zip archive and pasted below.  The batch file, compile.bat, builds the
executable, n_fruit.exe, which is about 12K in size.  No other files are
needed to run the program -- as long as the .NET Framework 2.0 is
installed.

Nemerle is an open source, .NET-based language, originating at a
university in Poland, and named after a character in a novel called "A
Wizard of Earth."  The language is a superset of C#, with modifications
and extensions to add features of functional languages like Haskell and
Lisp.  Although Nemerle programs are generally strongly typed at runtime,
a dynamic style of coding is usually possible because the compiler tries
to infer types from context.  Its official web site is at
http://Nemerle.org

The fruit basket code is the result of a conversion from C#, via the
cs2n.exe utility included in the Nemerle distribution.  For comparison,
the archive includes the original C# source code, as well as another
automatic conversion to the Boo language, via the web form at
http://codeconverter.sharpdevelop.net/Convert.aspx

I have also prepared a collection of Nemerle documentation at
http://www.EmpowermentZone.com/n_doc.zip

Jamal

/*
content of n_fruit.n
Fruit Basket program in Nemerle
Public domain by Jamal Mazrui
*/

namespace FruitBasket {
using System;
using System.Windows.Forms;

// define class inherited from Form
class FbForm : Form {
 mutable  lblFruit : Label;
 mutable  txtFruit : TextBox;
 mutable  lblBasket : Label;
 mutable  lstBasket : ListBox;
 mutable  btnAdd : Button;
 mutable  btnDelete : Button;

// define constructor
public this() {
// set window title
this.Text = "Fruit Basket";

this.Width = 400;
this.Height = 285;

// create two rows of controls with three controls in each row
// label, textbox, button and label, listbox, button
lblFruit =  Label();
lblFruit.Text = "&Fruit:";
lblFruit.Left = 14;
lblFruit.Top = 14;
lblFruit.Width = 44;
lblFruit.Height = 16;

txtFruit =  TextBox();
txtFruit.Left = 64;
txtFruit.Top = 14;
txtFruit.Width = 200;
txtFruit.Height = 16;

btnAdd =  Button();
btnAdd.Text = "&Add";
btnAdd.Left = 272;
btnAdd.Top = 14;
btnAdd.Width = 100;
btnAdd.Height = 20;
//  make it the default button
this.AcceptButton = btnAdd;

// Define event handler
btnAdd.Click += fun( o : object, e :  EventArgs) {
mutable  sFruit = txtFruit.Text;
if (sFruit == "")
{ {
MessageBox.Show("No fruit to add!", "Alert");
();
}
}
else { {

lstBasket.Items.Add(sFruit);
txtFruit.Text = "";
lstBasket.SelectedIndex = lstBasket.Items.Count - 1;
}
}
};

lblBasket =  Label();
lblBasket.Text = "&Basket:";
lblBasket.Left = 14;
lblBasket.Top = 38;
lblBasket.Width = 44;
lblBasket.Height = 16;

lstBasket =  ListBox();
lstBasket.Left = 64;
lstBasket.Top = 38;
lstBasket.Width = 200;
lstBasket.Height = 200;

btnDelete =  Button();
btnDelete.Text = "&Delete";
btnDelete.Left = 272;
btnDelete.Top = 38;
btnDelete.Width = 100;
btnDelete.Height = 20;

// Define event handler
btnDelete.Click += fun( o : object, e :  EventArgs) {
mutable  iFruit = lstBasket.SelectedIndex;
if (iFruit == -1)
{ {
MessageBox.Show("No fruit to delete.", "Alert");
();
}
}
else { {

lstBasket.Items.RemoveAt(iFruit);
when (iFruit > lstBasket.Items.Count - 1) {iFruit = lstBasket.Items.Count
- 1;}
lstBasket.SelectedIndex = iFruit;
}
}
};

// add controls to form
this.Controls.AddRange(    array[lblFruit, txtFruit, btnAdd, lblBasket,
lstBasket, btnDelete]);

// center form on screen
this.StartPosition = FormStartPosition.CenterScreen;
} // FbForm constructor

// define main entry point of application
static Main() :  void {
Application.Run( FbForm());
} // Main method
} // FbForm class
}
 // FruitBasket namespace

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: