I don't know if you can call this forward shading but this only takes single draw call? Plus, number of lights are limited by this way. Is there any better way I can have flexibility with light shader? Like a light shader which does not have a limit of maximum number of lights? I know I can use deferred shading but I don't want to use that at the moment. I am looking for a better design of writing shaders.
One way would be to upload all light data to videomemory (think buffers) and look up the lights dynamically per pixel. You could subdivide the screen into tiles and save the lights which influence a tile in videomemory to increase the performance of looking for the right lights too.