Runtime error "Floating point underflow" in CgPrinterJobAttributes

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Runtime error "Floating point underflow" in CgPrinterJobAttributes

Klaus Breker
Hi,

we got an error by a customer during printer initialisation in CgPrinterJobAttributes class>>#devModeDriver:devName:devMedium:flags:oldDeviceMode:
->PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow.

We are using VASmalltalk 8.02. The customer is using Windows 7. We have no idea, what happened and how to solve this problem..

Kind regards

Klaus

Here is the walkback (customer specific names are replaced by dummy names for printer, server..):

Walkback at 16:38:20 on 12/05/2011
Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow
[] in EpRuntimeStartUp class(EsWindowSystemStartUp class)>>#outputWalkback:process:
  receiver = EpRuntimeStartUp
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
  arg2 = UIProcess:(12/05/2011 16:38:19){running,3}
  temp1 = 'walkback.log'
  temp2 = -1
  temp3 = a CfsWriteFileStream
EsCompactBlockContextTemplate(Block)>>#valueWithErrorHandler:oldHandler:onReturnDo:
  receiver = [] in EsWindowSystemStartUp class>>#outputWalkback:process:
  arg1 = [] in Block>>#when:do:exitWith:retryReturn:
  arg2 = nil
  arg3 = []
EsCompactBlockContextTemplate(Block)>>#when:do:exitWith:retryReturn:
  receiver = [] in EsWindowSystemStartUp class>>#outputWalkback:process:
  arg1 = an ExceptionalEventCollection
  arg2 = [] in EsWindowSystemStartUp class>>#outputWalkback:process:
  arg3 = [] in Block>>#when:do:
  arg4 = an Object
  temp1 = [] in Block>>#when:do:exitWith:retryReturn:
  temp2 = [] in Block>>#when:do:exitWith:retryReturn:
  temp3 = nil
EsCompactBlockContextTemplate(Block)>>#when:do:
  receiver = [] in EsWindowSystemStartUp class>>#outputWalkback:process:
  arg1 = an ExceptionalEventCollection
  arg2 = [] in EsWindowSystemStartUp class>>#outputWalkback:process:
  temp1 = an Object
  temp2 = nil
EpRuntimeStartUp class(EsWindowSystemStartUp class)>>#outputWalkback:process:
  receiver = EpRuntimeStartUp
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
  arg2 = UIProcess:(12/05/2011 16:38:19){running,3}
  temp1 = 'walkback.log'
  temp2 = -1
  temp3 = a CfsWriteFileStream
EpRuntimeStartUp class(EsImageStartUp class)>>#outputWalkback:
  receiver = EpRuntimeStartUp
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
EpRuntimeStartUp class>>#reportError:resumable:startBP:
  receiver = EpRuntimeStartUp
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
  arg2 = false
  arg3 = 909
UIProcess(Process)>>#reportError:resumable:
  receiver = UIProcess:(12/05/2011 16:38:19){running,3}
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
  arg2 = false
  temp1 = 909
[optimized] in ExceptionalEvent class>>#initializeSystemExceptions
  blockarg1 = Signal on Exception: (ExError) An error has occurred.
Signal>>#evaluate:
  receiver = Signal on Exception: (ExError) An error has occurred.
  arg1 = [] in ExceptionalEvent class>>#initializeSystemExceptions
Signal>>#evaluateDefaultHandler:
  receiver = Signal on Exception: (ExError) An error has occurred.
  arg1 = [] in ExceptionalEvent class>>#initializeSystemExceptions
ExceptionalEvent>>#applyDefaultHandler:
  receiver = Exception: (ExError) An error has occurred.
  arg1 = Signal on Exception: (ExError) An error has occurred.
  temp1 = Exception: (ExError) An error has occurred.
ExceptionalEvent>>#signalFor:
  receiver = Exception: (ExError) An error has occurred.
  arg1 = Signal on Exception: (ExError) An error has occurred.
  temp1 = nil
ExceptionalEvent>>#signalWithArguments:
  receiver = Exception: (ExError) An error has occurred.
  arg1 = ('Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow')
ExceptionalEvent>>#signalWith:
  receiver = Exception: (ExError) An error has occurred.
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
PlatformFunction(Object)>>#error:
  receiver = <c: int32 'winspool.drv':DocumentPropertiesA pointer pointer pointer pointer pointer uint32>
  arg1 = 'Primitive failed in: PlatformFunction>>#callWith:with:with:with:with:with: due to Floating point underflow'
PlatformFunction(Object)>>#primitiveFailed:withArgument:backUp:
  receiver = <c: int32 'winspool.drv':DocumentPropertiesA pointer pointer pointer pointer pointer uint32>
  arg1 = 59
  arg2 = -1
  arg3 = 1
PlatformFunction(Object)>>#primitiveFailed
  receiver = <c: int32 'winspool.drv':DocumentPropertiesA pointer pointer pointer pointer pointer uint32>
PlatformFunction>>#callWith:with:with:with:with:with:
  receiver = <c: int32 'winspool.drv':DocumentPropertiesA pointer pointer pointer pointer pointer uint32>
  arg1 = OSHwnd {0}
  arg2 = OSHandle {2346284}
  arg3 = '\\MyPrintServer\P_sg4095'
  arg4 = OSDevmode [53] {*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}
.
.

*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}}
  arg5 = nil
  arg6 = 2
OSCall>>#documentProperties:hPrinter:pDeviceName:pDevModeOutput:pDevModeInput:fMode:
  receiver = an OSCall
  arg1 = OSHwnd {0}
  arg2 = OSHandle {2346284}
  arg3 = '\\MyPrintServer\P_sg4095'
  arg4 = OSDevmode [53] {*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}
*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}
.
.

*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}}
  arg5 = nil
  arg6 = 2
CgPrintJobAttributes class>>#devModeDriver:devName:devMedium:flags:oldDeviceMode:
  receiver = CgPrintJobAttributes
  arg1 = 'winspool'
  arg2 = '\\MyPrintServer\P_sg4095'
  arg3 = 'P_sg4095.MY.SELF.COM'
  arg4 = 2
  arg5 = nil
  temp1 = 7880
  temp2 = OSDevmode [53] {*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}
*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}

.
.
*OSDevmode {
dmDeviceName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmSpecVersion: 0
dmDriverVersion: 0
dmSize: 0
dmDriverExtra: 0
dmFields: 0
dmOrientation: 0
dmPaperSize: 0
dmPaperLength: 0
dmPaperWidth: 0
dmScale: 0
dmCopies: 0
dmDefaultSource: 0
dmPrintQuality: 0
dmColor: 0
dmDuplex: 0
dmYResolution: 0
dmTTOption: 0
dmCollate: 0
dmFormName: OSUInt8 [32] {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
dmLogPixels: 0
dmBitsPerPel: 0
dmPelsWidth: 0
dmPelsHeight: 0
dmDisplayFlags: 0
dmDisplayFrequency: 0
dmICMMethod: 0
dmICMIntent: 0
dmMediaType: 0
dmDitherType: 0
dmReserved1: 0
dmReserved2: 0
}}
  temp3 = nil
  temp4 = [44 205 35 0]
  temp5 = OSHandle {2346284}
  temp6 = 2
CgPrintJobAttributes class>>#defaultForDriver:device:medium:oldAttributes:
  receiver = CgPrintJobAttributes
  arg1 = 'winspool'
  arg2 = '\\MyPrintServer\P_sg4095'
  arg3 = 'P_sg4095.MY.SELF.COM'
  arg4 = nil
  temp1 = nil
  temp2 = nil
CgPrinterScreenInfo>>#initialize
  receiver = a CgPrinterScreenInfo
  temp1 = 'winspool'
  temp2 = '\\MyPrintServer\P_sg4095'
  temp3 = 'P_sg4095.MY.SELF.COM'
  temp4 = nil
  temp5 = nil
  temp6 = nil
CgPrinterScreenInfo class>>#driverName:deviceName:outputMedium:
  receiver = CgPrinterScreenInfo
  arg1 = 'winspool'
  arg2 = '\\MyPrintServer\P_sg4095'
  arg3 = 'P_sg4095.MY.SELF.COM'
CgWinPrinterServer class>>#allPrinterScreenInfos
  receiver = CgWinPrinterServer
  temp1 = [0 0 0 0 50 77 27 0 48 77 27 0 32 77 27 0 254 76 27 0 252 76 27 0 250 76 27 0 20 73 27 0 248 76 27 0 230 76 27 0 222 76 27 0 220 76 27 0 0 0 0 0 64 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 216 72 27 0 214 72 27 0 196 72 27 0 136 72 27 0 134 72 27 0 132 72 27 0 48 68 27 0 130 72 27 0 112 72 27 0 104 72 27 0 102 72 27 0 0 0 0 0 64 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 67 27 0 224 67 27 0 144 67 27 0 52 67 27 0 50 67 27 0 48 67 27 0 164 65 27 0 46 67 27 0 26 67 27 0 18 67 27 0 16 67 27 0 0 0 0 0 64 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 106 62 27 0 58 62 27 0 40 62 27 0 254 61 27 0 198 61 27 0 134 61 27 0 76 61 27 0 36 30 27 0 74 61 27 0 56 61 27 0 48 61 27 0 46 61 27 0 20 29 27 0 25 42 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238 28 27 0 190 28 27 0 172 28 27 0 130 28 27 0 74 28 27 0 72 28 27 0 64 28 27 0 24 253 26 0 62 28 27 0 44 28 27 0 36 28 27 0 34 28 27 0 8 252 26 0 24 34 0 0 1 0  ...etc...]
  temp2 = [196 154 0 0]
  temp3 = [8 0 0 0]
  temp4 = true
  temp5 = 39620
  temp6 = 8
  temp7 = Could not print receiver
  temp8 = Dictionary(a CgPrinterScreenInfo a CgPrinterScreenInfo a CgPrinterScreenInfo a CgPrinterScreenInfo )
  temp9 = 5
CgWinPrinterServer class>>#isValidServerName:
  receiver = CgWinPrinterServer
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
[] in CgServer class>>#open:
  receiver = CgServer
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  blockarg1 = CgWinPrinterServer
OrderedCollection>>#do:
  receiver = OrderedCollection(CgWinPrinterServer CgWinServer )
  arg1 = [] in CgServer class>>#open:
CgServer class>>#open:
  receiver = CgServer
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
[] in CgServer class>>#named:
  receiver = CgServer
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  temp1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  temp2 = nil
Dictionary>>#at:ifAbsent:
  receiver = Dictionary(a CgWinServer )
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  arg2 = [] in CgServer class>>#named:
  temp1 = 5
  temp2 = nil
  temp3 = 11
  temp4 = 5
CgServer class>>#named:
  receiver = CgServer
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  temp1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  temp2 = nil
CgDisplay class>>#open:
  receiver = CgDisplay
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  temp1 = nil
CwAppContext>>#openDisplay:applicationName:applicationClass:
  receiver = a CwAppContext
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'
  arg2 = 'envy'
  arg3 = 'ENVY'
CwAppContext>>#openDisplay:
  receiver = a CwAppContext
  arg1 = '\\MyPrintServer\P_KW4711,winspool,P_KW4711.MY.SELF.COM'

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: Runtime error "Floating point underflow" in CgPrinterJobAttributes

Klaus Breker
Hello,

up with this again, because another customer has the same problem with the printer initialization. What can I do to solve this problem?

Regards

Klaus

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/OG5PUFlRSzdRa01K.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: Runtime error "Floating point underflow" in CgPrinterJobAttributes

Wayne Johnston
We've seen this.  Note it's CgPrintJobAttributes not CgPrinterJobAttributes.  It sounds like IBM itself may have at least proposed a fix at some point.  Info from our developer:

"In our case, it wasn't the 7th printer, but in the case outlined in 2905, the printer crashed us trying to fill in a 7th osDevMode structure when the printer had only indicated it needed 6.75...  osDevMode structures.  How it seems to work is VAST asks the printer how much space it needs to fill in the osDevMode info:

   devModeSize := docPropertiesFn
       callWith: HwndNull
       with: prHandle
       with: deviceNamePSZ
       with: nil
       with: nil
       with: 0.

Then based on this response, VAST creates a ByteArray large enough to hold 'devModeSize + 10 bytes'. As this was not always enough to end up with an even number of 'OsDevMode fixedSize' buffers, we changed the code to what it is now.  I never have completely understood the 'OsDevMode thingies'.  I just know that different printers require different numbers of them when asked.  Some are high like the one in your example below, and some are much lower.  

In the end, the this fix did not end up solving the problem our customer was having; however, we left it in the code as it seems to be a safe change that provides a little more cushion than the '+10' solution.  In thinking about this again, I guess the updated solution does not always give us at least +10 bytes as the IBM solution did .. just food for thought."

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/RkpwTzJGTDNWbzhK.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.