I have made some programs that goes via Com-port and uses PDQComm (now SAXcomm ?) and PS-Timer. It requires a modem that can read CallerID and transfer it to the comm-port, if you want to view who's calling. Twice every second I read the Info from the modem and extract the calling phone number.
I also send standard Hayes commands to the modem to put calls. The modem I used was also equipped with a headset so in the end I sat there clicking on my Progress program to put phone calls and when calls came in to me, I immediately got the customer's all data on the screen, before I answered.
Quite amusing to be able to respond to questions even before they had presented themselves
I can supply you with the code if you like, it was a couple of years ago I did this program...