The Evolution of a Programmer

                     The Evolution of a Programmer
                     -----------------------------
 
 High School/Jr.High
 ===================
 
 10 PRINT "HELLO WORLD"
 20 END
 
 First year in College
 =====================
 program Hello(input, output)
   begin
     writeln('Hello World')
   end.
 
 Senior year in College
 ======================
 (defun hello
   (print
     (cons 'Hello (list 'World))))
 
 New professional
 ================
 #include <stdio.h 
 void main(void)
 {
   char *message[] = {"Hello ", "World"};
   int i;
 
   for(i = 0; i < 2; ++i)
     printf("%s", message[i]);
   printf("\n");
 }
 
 Seasoned professional
 =====================
 #include <iostream.h 
 #include <string.h 
 
 class string
 {
 private:
   int size;
   char *ptr;
 
 public:
   string() : size(0), ptr(new char('\0')) {}
 
   string(const string &s) : size(s.size)
   {
     ptr = new char[size + 1];
     strcpy(ptr, s.ptr);
   }
 
   ~string()
   {
     delete [] ptr;
   }
 
   friend ostream &operator <<(ostream &, const string &);
   string &operator=(const char *);
 };
 
 ostream &operator<<(ostream &stream, const string &s)
 {
   return(stream << s.ptr);
 }
 
 string &string::operator=(const char *chrs)
 {
   if (this != &chrs)
   {
     delete [] ptr;
     size = strlen(chrs);
     ptr = new char[size + 1];
     strcpy(ptr, chrs);
   }
   return(*this);
 }
 
 int main()
 {
   string str;
 
   str = "Hello World";
   cout << str << endl;
 
   return(0);
 }
 


 Master Programmer
 =================
 [
 uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
 ]
 library LHello
 {
     // bring in the master library
     importlib("actimp.tlb");
     importlib("actexp.tlb");
 
     // bring in my interfaces
     #include "pshlo.idl"
 
     [
     uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
     ]
     cotype THello
         {
         interface IHello;
         interface IPersistFile;
         };
 };
 
 [
 exe,
 uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
 ]
 module CHelloLib
 {
 
     // some code related header files
     importheader(<windows.h );
     importheader(<ole2.h );
     importheader(<except.hxx );
     importheader("pshlo.h");
     importheader("shlo.hxx");
     importheader("mycls.hxx");
 
     // needed typelibs
     importlib("actimp.tlb");
     importlib("actexp.tlb");
     importlib("thlo.tlb");
 
     [
     uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
     aggregatable
     ]
     coclass CHello
         {
         cotype THello;
         };
 };
 
 
 #include "ipfix.hxx"
 
 extern HANDLE hEvent;
 
 class CHello : public CHelloBase
 {
 public:
     IPFIX(CLSID_CHello);
 
     CHello(IUnknown *pUnk);
     ~CHello();
 
     HRESULT  __stdcall  PrintSz(LPWSTR pwszString);
 
 private:
     static int cObjRef;
 };
 
 
 #include <windows.h 
 #include <ole2.h 
 #include <stdio.h 
 #include <stdlib.h 
 #include "thlo.h"
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "mycls.hxx"
 
 int CHello::cObjRef = 0;
 
 CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
 {
     cObjRef++;
     return;
 }
 
 HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)
 {
     printf("%ws\n", pwszString);
     return(ResultFromScode(S_OK));
 }
 
 
 CHello::~CHello(void)
 {
 
 // when the object count goes to zero, stop the server
 cObjRef--;
 if( cObjRef == 0 )
     PulseEvent(hEvent);
 
 return;
 }
 
 #include <windows.h 
 #include <ole2.h 
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "mycls.hxx"
 
 HANDLE hEvent;
 
  int _cdecl main(
 int argc,
 char * argv[]
 ) {
 ULONG ulRef;
 DWORD dwRegistration;
 CHelloCF *pCF = new CHelloCF();
 
 hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
 // Initialize the OLE libraries
 CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
 CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
                   REGCLS_MULTIPLEUSE, &dwRegistration);
 
 // wait on an event to stop
 WaitForSingleObject(hEvent, INFINITE);
 
 //      revoke and release the class object
 CoRevokeClassObject(dwRegistration);
 ulRef = pCF- Release();
 
 // Tell OLE we are going away.
 CoUninitialize();
 
 return(0);
 }
 
 extern CLSID CLSID_CHello;
 extern UUID LIBID_CHelloLib;
 
 CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
     0x2573F891,
     0xCFEE,
     0x101A,
     { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
 };
 
 UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
     0x2573F890,
     0xCFEE,
     0x101A,
     { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
 };
 
 #include <windows.h 
 #include <ole2.h 
 #include <stdlib.h 
 #include <string.h 
 #include <stdio.h 
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "clsid.h"
 
 int _cdecl main(
 int argc,
 char * argv[]
 ) {
 HRESULT         hRslt;
 IHello         *pHello;
 ULONG           ulCnt;
 IMoniker *      pmk;
 WCHAR           wcsT[_MAX_PATH];
 WCHAR           wcsPath[2 * _MAX_PATH];
 
 // get object path
 wcsPath[0] = '\0';
 wcsT[0] = '\0';
 if( argc   1) {
     mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
     wcsupr(wcsPath);
     }
 else {
     fprintf(stderr, "Object path must be specified\n");
     return(1);
     }
 
 // get print string
 if(argc   2)
     mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
 else
     wcscpy(wcsT, L"Hello World");
 
 printf("Linking to object %ws\n", wcsPath);
 printf("Text String %ws\n", wcsT);
 
 // Initialize the OLE libraries
 hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
 if(SUCCEEDED(hRslt)) {
 
 
     hRslt = CreateFileMoniker(wcsPath, &pmk);
     if(SUCCEEDED(hRslt))
         hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
 
     if(SUCCEEDED(hRslt)) {
 
         // print a string out
         pHello- PrintSz(wcsT);
 
         Sleep(2000);
         ulCnt = pHello- Release();
         }
     else
         printf("Failure to connect, status: %lx", hRslt);
 
     // Tell OLE we are going away.
     CoUninitialize();
     }
 
 return(0);
 }