This took me a while to find out in the past, what your looking for are what called color 'transfer functions'. There are patchy docs all over the net, I have started to add some of these functions to openimageio lately.
http://svn.openimageio.org/oiio/trunk/src/libutil/colortransfer.cpp
You don't need to understand cpp just looks for the 'float operator() (float x)' lines and you can see the math involved for the forward and reverse transfer functions.
The main idea to grasp is that these transfer functions are a form of compression and decompression on the image signal (pixel values). Most transfer functions include some form of gamma (pow() function) with additional shaping of the curve at certain points and then upper and lower limits.
Most of the differences between these functions are to do with device that captures the data (the camera) and the device that displays it (a monitor).
This book has some pretty good info thats all in one place, even if it's mostly about tv centric than film but the ideas are pretty common.
http://books.google.com.au/books?id=ra1lcAwgvq4C&lpg=PP1&dq=digital%20video%20and%20HDTV&pg=PP1#v=onepage&q=&f=false
I do want to add panalog to OIIO when I get a chance. Most of the info is here http://media.panavision.com/html/ADI/panalog.html if your interested.
To do a Panalog -> sRGB transfer you need to do run the pixels thru two transfer functions.
1. (Panalog -> Linear)
2. (Linear -> sRGB)
As some of these transfer functions are expensive and when they are strung together even more so, baking them down into a lut is a common optimization step.
Note. These transfer functions don't include anything to do with emulating one type of display on another display (making images on your monitor looking like the ones in the cinema). That's a more color scientist area that I'm not going to pretend I understand that well. :)