The Smalltalk code that uses the primitive above is as follows:
installWindowProc: receiver selector: selector "Private - Answer the address of the standard window proc. Install the receiver and selector as the message that is sent for every operating system message." <primitive: installWindowProc> ^self primitiveFailed
initializeWindowClass "Private - Get the standard IBM Smalltalk window procedure and register the window class in the operating system."
| address | "Get the address of the window proc and install the receiver and selector. This message is sent from the window proc for every operating system message." address := self installWindowProc: self makeFixed selector: #windowProc:msg:with:with: makeFixed. "Register the Smalltalk window procedure."
WindowClass := 'WINDOWPROC'. Hab winRegisterClass: WindowClass pfnWndProc: address flStyle: CsSizeredraw cbWindowData: 4.
The Smalltalk code places the receiver and selector in fixed memory so that they cannot move during garbage collection.
This code is based on the IBM Smalltalk code for the window procedure. Some changes were made for clarity, so the code above might not match exactly the code in IBM Smalltalk.