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.