Recently I needed to show some progress indicator on some long running console application.  I recall the good old days of my college days with console based SMTP clients such as elm and pine… as I recall these clients showed progress via a simple ASCII spiner.    


I was impressed with how simple this is to do with .NET Framework 2.0.. I started off writing the usage code I wanted to enable, then built a simple class that meet those requirements.. I highly recommend this process especially for more complex designs.
Here is the client code: 


        static void Main(string[] args)
        {
            ConsoleSpiner spin 
= new ConsoleSpiner()
;
            
Console.Write("Working....")
;
            while 
(true

            {
                spin.Turn()
;
            
}
        }


And here is the class I came up with. 

    public class ConsoleSpiner
    {
        
int counter
;
        public 
ConsoleSpiner()
        {
            counter 
0
;
        
}
        
public void 
Turn()
        {
            counter++
;        
            switch 
(counter % 4
)
            {
                
case 0: Console.Write("/")
; break;
                case 
1: Console.Write("-")
; break;
                case 
2: Console.Write("\\")
; break;
                case 
3: Console.Write("-")
; break;
            
}
            Console.SetCursorPosition(Console.CursorLeft - 
1, Console.CursorTop)
;
        
}
    }


PS – does anyone still use elm\pine?  Are their clients that work with exchange?  Also, I was always told that pine was an acronym for “Pine Is Not Elm”, but accounting to the official site it is not.