I've heard somewhere that you could simply load the shader in whatever way it should be loaded in OpenGL and then read it with either the vertex or fragment program functions.

[pascal] LoadGLSLShader('Shader.fp');
glGetProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, p, len);[/pascal]
I don't know if it actually works, it might be that it's only rumors or you'll have to call glGetProgramStringARB with other parameters or something