Check the code that I sent you, the LaserOutput class does 2,3 and 4. There is a laserLine funcion that will take care of 1.
I agree totally with you that we should aim for reusable classes. Probably the first and most important step is to define an interface to the class that handles the output. LaserOutput is a start, we can take it from there.
EDIT: Mike, I just reread your post, in my enthusiasm I was a litte quick to reply, my approach differs a little from your 4 step plan. Basically what my code does is:
1) create 'framelets' at startup. Each framelet is a onscreen object represented by a series of points like in an ilda frame.
2) the framelets are sent to LaserOutput and stored in an array or vector.
3) LaserOutput combines the framelets into a frame. Each framelet gets an offset generated by the program so they can actually move in time. (much like sprites)
It would be great if we can establish a common base for game development. The LaserOut class is typically written for Easylase. When we define a good interface for the output class, similar classes with the same interface can be written for other hardware ..
cheers