News:

:) To see the latest forum posts scroll to the bottom of the main page and click on the View the most recent posts on the forum link

Main Menu

CalcImage CIP project file format

Started by John Donovan, April 28, 2026, 11:15:26 AM

Previous topic - Next topic

John Donovan

I thought it might be useful to post the read/write code for the CalcImage CIP project file format.  This is the text file that CalcImage uses to store all information (not contained in the PFE MDB file), for defining a quantitative mapping project.

For example to help Ben Buse here:

Quote from: Ben Buse on April 27, 2026, 07:10:03 AMAlso need to figure out how to load files into calcimage best.

At moment I'm creating a new blank project in calcimage and then loading each of the files as grd files. Is there a better way of doing this.

I tried loading the wds elements through the create project wizzard. But when I added eds grd files at the end, it said must be added before off peak maps.

So here is the code for reading and then, writing a CalcImage CIP project file:

Sub CalcImageReadWriteProjectFile(mode As Integer)
' Read or write the project file
'  mode = 1 read project
'  mode = 2 write project

ierror = False
On Error GoTo CalcImageReadWriteProjectFileError

Dim i As Integer, tFlag As Integer, j As Integer
Dim itemp6 As Integer
Dim tfilename As String
Dim astring As String, bstring As String

' Read project
If mode% = 1 Then

' Init project
Call CalcImageInitProject(Int(0))
If ierror Then Exit Sub

' Check for version of CIP file for reading only!
CalcImageProjectVersion% = CalcImageGetProjectFileVersion()
If ierror Then Exit Sub

' If file version is zero, call special routine for backward compatibility (write project uses current version)
If CalcImageProjectVersion% = 0 Then
Call CalcImageReadVersionZeroCIPFile(mode%)
If ierror Then Exit Sub
Exit Sub
End If

' Project file contains full path, but condition and image files do not (must be in same folder as CIP and MDB file)
Open CalcImageProjectFile$ For Input As #CalcImageProjectFileNumber%

Input #CalcImageProjectFileNumber%, CalcImageProjectVersion%, CalcImageProjectTitle$

' Check that CIP file is not a newer version
If CalcImageProjectVersion% > CIP_FILE_VERSION% Then GoTo CalcImageReadWriteProjectFileNewerCIPFile

' If version 2, read CalcImageSampleNameTitle field
If CalcImageProjectVersion% >= 2 Then
Input #CalcImageProjectFileNumber%, CalcImageSampleNameTitle$
End If

' Read and load probe data file name
Input #CalcImageProjectFileNumber%, tfilename$
tfilename$ = MiscGetPathOnly$(CalcImageProjectFile$) & tfilename$

' Check for files existing
If Trim$(tfilename$) = vbNullString Then GoTo CalcImageReadWriteProjectFileBlankCondition
If Dir$(tfilename$) = vbNullString Then GoTo CalcImageReadWriteProjectFileMissingCondition

' Load Probe database file name (full path)
ProbeDataFile$ = tfilename$
Line Input #CalcImageProjectFileNumber%, astring$   ' read entire parameter line and parse each parameter (for backward compatibility)

' Read sample number
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageProbeDataSample% = Val(bstring$)

' Read number of images
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageNumberofImageFiles% = Val(bstring$)
If CalcImageNumberofImageFiles% > MAXIMAGE% Then GoTo CalcImageReadWriteProjectFileTooManyImages

' Read CalcImageCalculateTotalsImageFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateTotalsImageFlag% = Val(bstring$)

' Read CalcImageCalculateStoichiometricOxygenImageFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateStoichiometricOxygenImageFlag% = Val(bstring$)

Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateExcessOxygenImageFlag% = Val(bstring$)

' Read CalcImageCalculateNetIntensitiesFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateNetIntensitiesFlag% = Val(bstring$)

' Read CalcImageCalculateBgdIntensitiesFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateBgdIntensitiesFlag% = Val(bstring$)

' Read CalcImageCalculateKratioIntensitiesFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateKratioIntensitiesFlag% = Val(bstring$)

' Read CalcImageCalculateQuantPercentsFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateQuantPercentsFlag% = Val(bstring$)

' Read CalcImageCalculateAtomicPercentsFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateAtomicPercentsFlag% = Val(bstring$)

' Read CalcImageCalculateOxidePercentsFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateOxidePercentsFlag% = Val(bstring$)

' Read CalcImageCalculateFormulaBasisFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateFormulaBasisFlag% = Val(bstring$)

' Read CalcImageCalculateElementByDiffImageFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateElementByDiffImageFlag% = Val(bstring$)

' Read CalcImageCalculateDetectionLimitsFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateDetectionLimitsFlag% = Val(bstring$)

' Read CalcImageCalculateAnalyticalSensitivityFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateAnalyticalSensitivityFlag% = Val(bstring$)

' Read CalcImageCalculateLogWeightPercentsFlag
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateLogWeightPercentsFlag% = Val(bstring$)

' Read CalcImageCalculateDetectionLimitsBlankingFlag (new)
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateDetectionLimitsBlankingFlag% = Val(bstring$)

' Read CalcImageCalculateAnalyticalSensitivityBlankingFlag (new)
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageCalculateAnalyticalSensitivityBlankingFlag% = Val(bstring$)

' Read CalcImageBlankValuesOutsideMinMaxAnalyticalTotalFlag (new)
Call MiscParseStringToStringA(astring$, VbSpace, bstring$)
If ierror Then Exit Sub
CalcImageBlankValuesOutsideMinMaxAnalyticalTotalFlag% = Val(bstring$)

' To ensure that the elemental quant flag is always set
CalcImageCalculateQuantPercentsFlag% = -1   ' always calculate elemental percents!

' Read image files (count time is no longer utilized since intensity data is in cps from PI)
For i% = 1 To CalcImageNumberofImageFiles%
If CalcImageProjectVersion% <= 9 Then
Input #CalcImageProjectFileNumber%, CalcImageImageTypes%(i%), CalcImageElementRows%(i%), CalcImageCountTimes!(i%), CalcImageBeamCurrents!(i%), CalcImageBeamCurrents2!(i%), CalcImageTimeOfAcqs#(i%), CalcImageTimeOfAcqs2#(i%), CalcImageImageFiles$(i%)
Else
Input #CalcImageProjectFileNumber%, CalcImageImageTypes%(i%), CalcImageElementRows%(i%), CalcImageCountTimes!(i%), CalcImageBeamCurrents!(i%), CalcImageBeamCurrents2!(i%), CalcImageTimeOfAcqs#(i%), CalcImageTimeOfAcqs2#(i%), CalcImageImageFiles$(i%), CalcImageImagePositions!(i%)
End If
CalcImageImageFiles$(i%) = MiscGetPathOnly$(CalcImageProjectFile$) & CalcImageImageFiles$(i%)
Next i%

' Now read CPQ files and parameters
Call CalcImageCPQReadWriteProjectFile(mode%, CalcImageProjectFileNumber%)
If ierror Then Exit Sub

' If version 3, read misc parameters array (6 integers)
If CalcImageProjectVersion% >= 3 Then
Input #CalcImageProjectFileNumber%, CalcImageTitleAppendDataFlag%, CalcImageSurferOutputTemplateFlag%, CalcImageSurferSliceTemplateFlag%, CalcImageSurferPolygonTemplateFlag%, CalcImageSurferStripTemplateFlag%, UseManualAssignmentModeFlag%, itemp6%
End If

' If version 4, read EDS spectrum image flag (not utilized yet) and filename
If CalcImageProjectVersion% >= 4 Then
Input #CalcImageProjectFileNumber%, tFlag%, IntegrateEDSSpectrumImagingFilename$
End If

' If version 5, read scan type (0 = beam scan, 1 = stage scan) and scan orientation type (0 = Cameca stage/beam or JEOL beam scan (UL/LR), 1 = JEOL stage scan (UR/LL))
If CalcImageProjectVersion% >= 5 Then
Input #CalcImageProjectFileNumber%, CalcImageScanTypeFlag%, CalcImageOrientationTypeFlag%
End If

' If version 6, read analog signal image output flags and names
If CalcImageProjectVersion% >= 6 Then
Input #CalcImageProjectFileNumber%, CalcImageAnalogSignalFlags(1), CalcImageAnalogSignalLabels(1), CalcImageAnalogSignalFlags(2), CalcImageAnalogSignalLabels(2), CalcImageAnalogSignalFlags(3), CalcImageAnalogSignalLabels(3)
End If

' If version 7, read analog signal image filenames
If CalcImageProjectVersion% >= 7 Then
Input #CalcImageProjectFileNumber%, AnalogFilenames$(1), AnalogFilenames$(2), AnalogFilenames$(3)
If Trim$(AnalogFilenames$(1)) <> vbNullString Then AnalogFilenames$(1) = MiscGetPathOnly$(CalcImageProjectFile$) & AnalogFilenames$(1)
If Trim$(AnalogFilenames$(2)) <> vbNullString Then AnalogFilenames$(2) = MiscGetPathOnly$(CalcImageProjectFile$) & AnalogFilenames$(2)
If Trim$(AnalogFilenames$(3)) <> vbNullString Then AnalogFilenames$(3) = MiscGetPathOnly$(CalcImageProjectFile$) & AnalogFilenames$(3)
End If

' If version 8, read number of TDI files and number of intervals
If CalcImageProjectVersion% >= 8 Then
Input #CalcImageProjectFileNumber%, CalcImageNumberOfTDIImageFiles%, CalcImageNumberOfTDIImageIntervals%
For i% = 1 To CalcImageNumberOfTDIImageFiles%
Input #CalcImageProjectFileNumber%, CalcImageTDIImageIntervals%(i%), CalcImageTDIElementRows%(i%), CalcImageTDICountTimes!(i%), CalcImageTDIBeamCurrents!(i%), CalcImageTDIBeamCurrents2!(i%), CalcImageTDITimeOfAcqs#(i%), CalcImageTDITimeOfAcqs2#(i%), CalcImageTDIImageFiles$(i%)
CalcImageTDIImageFiles$(i%) = MiscGetPathOnly$(CalcImageProjectFile$) & CalcImageTDIImageFiles$(i%)
Next i%
End If

' If version 9, read output matrix corrections flag and unused flags
If CalcImageProjectVersion% >= 9 Then
Input #CalcImageProjectFileNumber%, CalcImageCalculateMatrixCorrectionsFlag%, tFlag%, tFlag%, tFlag%, tFlag%, tFlag%
End If

' If version 11, read dynamic element parameters (version 10 is above for image files- spectrometer positions)
If CalcImageProjectVersion% >= 11 Then
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceElement%(j%), DynamicSpecifiedElementByDifferenceValue!(j%), DynamicSpecifiedElementByDifferenceGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceOperator1%, DynamicSpecifiedElementByDifferenceOperator2%

Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaElement%(j%), DynamicSpecifiedElementByDifferenceFormulaValue!(j%), DynamicSpecifiedElementByDifferenceFormulaGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaOperator1%, DynamicSpecifiedElementByDifferenceFormulaOperator2%

Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenElement%(j%), DynamicSpecifiedElementByStoichiometryToOxygenValue!(j%), DynamicSpecifiedElementByStoichiometryToOxygenGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenOperator1%, DynamicSpecifiedElementByStoichiometryToOxygenOperator2%

Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherElement%(j%), DynamicSpecifiedElementByStoichiometryToAnotherValue!(j%), DynamicSpecifiedElementByStoichiometryToAnotherGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherOperator1%, DynamicSpecifiedElementByStoichiometryToAnotherOperator2%

Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopElement%(j%), DynamicSpecifiedElementExcessOxygenByDroopValue!(j%), DynamicSpecifiedElementExcessOxygenByDroopGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopOperator1%, DynamicSpecifiedElementExcessOxygenByDroopOperator2%
End If

' If version 12, read dynamic oxygen by stoichiometry parameters
If CalcImageProjectVersion% >= 12 Then
Input #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryFlag%
For j% = 1 To MAXCRITERIA%
Input #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryElement%(j%), DynamicOxygenByStoichiometryValue!(j%), DynamicOxygenByStoichiometryGreaterLess%(j%)
Next j%
Input #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryOperator1%, DynamicOxygenByStoichiometryOperator2%
End If

Close #CalcImageProjectFileNumber%

' Check for blank title
If Trim$(CalcImageProjectTitle$) = vbNullString Then CalcImageProjectTitle$ = "CalcImage Quantitative Image Project " & Now

' Check for blank file names
For i% = 1 To CalcImageNumberofImageFiles%
If Trim$(CalcImageImageFiles$(i%)) = vbNullString Then GoTo CalcImageReadWriteProjectFileBlankImage
If Dir$(CalcImageImageFiles$(i%)) = vbNullString Then GoTo CalcImageReadWriteProjectFileMissingImage
Next i%

End If


' Write project
If mode% = 2 Then

' Update CIP project file to current version
CalcImageProjectVersion% = CIP_FILE_VERSION%

' Check for files existing
If Trim$(ProbeDataFile$) = vbNullString Then GoTo CalcImageReadWriteProjectFileBlankCondition
If Dir$(ProbeDataFile$) = vbNullString Then GoTo CalcImageReadWriteProjectFileMissingCondition

For i% = 1 To CalcImageNumberofImageFiles%
If Trim$(CalcImageImageFiles$(i%)) = vbNullString Then GoTo CalcImageReadWriteProjectFileBlankImage
If Dir$(CalcImageImageFiles$(i%)) = vbNullString Then GoTo CalcImageReadWriteProjectFileMissingImage
Next i%

' Check for blank title
If Trim$(CalcImageProjectTitle$) = vbNullString Then CalcImageProjectTitle$ = "CalcImage Quantitative Image Project " & Now

If CalcImageNumberofImageFiles% > MAXIMAGE% Then GoTo CalcImageReadWriteProjectFileTooManyImages

' Project file does not contain full path (uses current CIP folder)
Open CalcImageProjectFile$ For Output As #CalcImageProjectFileNumber%

Print #CalcImageProjectFileNumber%, CalcImageProjectVersion%, VbDquote$ & CalcImageProjectTitle$ & VbDquote$
Print #CalcImageProjectFileNumber%, VbDquote$ & CalcImageSampleNameTitle$ & VbDquote$
Print #CalcImageProjectFileNumber%, VbDquote$ & MiscGetFileNameOnly$(ProbeDataFile$) & VbDquote$
Print #CalcImageProjectFileNumber%, CalcImageProbeDataSample%, CalcImageNumberofImageFiles%, CalcImageCalculateTotalsImageFlag%, CalcImageCalculateStoichiometricOxygenImageFlag%, CalcImageCalculateExcessOxygenImageFlag%, CalcImageCalculateNetIntensitiesFlag%, CalcImageCalculateBgdIntensitiesFlag%, CalcImageCalculateKratioIntensitiesFlag%, CalcImageCalculateQuantPercentsFlag%, CalcImageCalculateAtomicPercentsFlag%, CalcImageCalculateOxidePercentsFlag%, CalcImageCalculateFormulaBasisFlag%, CalcImageCalculateElementByDiffImageFlag%, CalcImageCalculateDetectionLimitsFlag%, CalcImageCalculateAnalyticalSensitivityFlag%, CalcImageCalculateLogWeightPercentsFlag%, CalcImageCalculateDetectionLimitsBlankingFlag%, CalcImageCalculateAnalyticalSensitivityBlankingFlag%, CalcImageBlankValuesOutsideMinMaxAnalyticalTotalFlag%

' Write on and off peak image files
For i% = 1 To CalcImageNumberofImageFiles%
If CalcImageProjectVersion% <= 9 Then
Print #CalcImageProjectFileNumber%, CalcImageImageTypes%(i%), CalcImageElementRows%(i%), Format$(CalcImageCountTimes!(i%), f83$), CalcImageBeamCurrents!(i%), CalcImageBeamCurrents2!(i%), CalcImageTimeOfAcqs#(i%), CalcImageTimeOfAcqs2#(i%), VbDquote$ & MiscGetFileNameOnly$(CalcImageImageFiles$(i%)) & VbDquote$
Else
Print #CalcImageProjectFileNumber%, CalcImageImageTypes%(i%), CalcImageElementRows%(i%), Format$(CalcImageCountTimes!(i%), f83$), CalcImageBeamCurrents!(i%), CalcImageBeamCurrents2!(i%), CalcImageTimeOfAcqs#(i%), CalcImageTimeOfAcqs2#(i%), VbDquote$ & MiscGetFileNameOnly$(CalcImageImageFiles$(i%)) & VbDquote$, CalcImageImagePositions!(i%)
End If
Next i%

' Now write CPQ files and parameters
Call CalcImageCPQReadWriteProjectFile(mode%, CalcImageProjectFileNumber%)
If ierror Then Exit Sub

' Now write misc parameters
Print #CalcImageProjectFileNumber%, CalcImageTitleAppendDataFlag%, CalcImageSurferOutputTemplateFlag%, CalcImageSurferSliceTemplateFlag%, CalcImageSurferPolygonTemplateFlag%, CalcImageSurferStripTemplateFlag%, UseManualAssignmentModeFlag, itemp6%

' Now write EDS spectrum image flag (not utilized yet) and filename
Print #CalcImageProjectFileNumber%, tFlag%, VbDquote$ & IntegrateEDSSpectrumImagingFilename$ & VbDquote$

' Now write scan type (0 = beam scan, 1 = stage scan) and scan orientation type (0 = Cameca stage/beam or JEOL beam scan (UL/LR), 1 = JEOL stage scan (UR/LL))
Print #CalcImageProjectFileNumber%, CalcImageScanTypeFlag%, CalcImageOrientationTypeFlag%

' Now write analog signal image output flags and names
Print #CalcImageProjectFileNumber%, CalcImageAnalogSignalFlags(1), VbDquote$ & CalcImageAnalogSignalLabels(1) & VbDquote, CalcImageAnalogSignalFlags(2), VbDquote$ & CalcImageAnalogSignalLabels(2) & VbDquote, CalcImageAnalogSignalFlags(3), VbDquote$ & CalcImageAnalogSignalLabels(3) & VbDquote

' Now write analog signal file names
Print #CalcImageProjectFileNumber%, VbDquote$ & MiscGetFileNameOnly$(AnalogFilenames$(1)) & VbDquote$, VbDquote$ & MiscGetFileNameOnly$(AnalogFilenames$(2)) & VbDquote$, VbDquote$ & MiscGetFileNameOnly$(AnalogFilenames$(3)) & VbDquote$

' Now write number of TDI files and number of TDI intervals
Print #CalcImageProjectFileNumber%, CalcImageNumberOfTDIImageFiles%, CalcImageNumberOfTDIImageIntervals%

' Write TDI image files
For i% = 1 To CalcImageNumberOfTDIImageFiles%
Print #CalcImageProjectFileNumber%, CalcImageTDIImageIntervals%(i%), CalcImageTDIElementRows%(i%), Format$(CalcImageTDICountTimes!(i%), f83$), CalcImageTDIBeamCurrents!(i%), CalcImageTDIBeamCurrents2!(i%), CalcImageTDITimeOfAcqs#(i%), CalcImageTDITimeOfAcqs2#(i%), VbDquote & MiscGetFileNameOnly$(CalcImageTDIImageFiles$(i%)) & VbDquote
Next i%

' Write newest calculation flags
Print #CalcImageProjectFileNumber%, CalcImageCalculateMatrixCorrectionsFlag%, tFlag%, tFlag%, tFlag%, tFlag%, tFlag%

' Write dynamic element parameters
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceElement%(j%), DynamicSpecifiedElementByDifferenceValue!(j%), DynamicSpecifiedElementByDifferenceGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceOperator1%, DynamicSpecifiedElementByDifferenceOperator2%

Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaElement%(j%), DynamicSpecifiedElementByDifferenceFormulaValue!(j%), DynamicSpecifiedElementByDifferenceFormulaGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByDifferenceFormulaOperator1%, DynamicSpecifiedElementByDifferenceFormulaOperator2%

Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenElement%(j%), DynamicSpecifiedElementByStoichiometryToOxygenValue!(j%), DynamicSpecifiedElementByStoichiometryToOxygenGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToOxygenOperator1%, DynamicSpecifiedElementByStoichiometryToOxygenOperator2%

Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherElement%(j%), DynamicSpecifiedElementByStoichiometryToAnotherValue!(j%), DynamicSpecifiedElementByStoichiometryToAnotherGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementByStoichiometryToAnotherOperator1%, DynamicSpecifiedElementByStoichiometryToAnotherOperator2%

Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopElement%(j%), DynamicSpecifiedElementExcessOxygenByDroopValue!(j%), DynamicSpecifiedElementExcessOxygenByDroopGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicSpecifiedElementExcessOxygenByDroopOperator1%, DynamicSpecifiedElementExcessOxygenByDroopOperator2%

' Write dynamic oxygen by stoichiometry parameters
Print #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryFlag%
For j% = 1 To MAXCRITERIA%
Print #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryElement%(j%), DynamicOxygenByStoichiometryValue!(j%), DynamicOxygenByStoichiometryGreaterLess%(j%)
Next j%
Print #CalcImageProjectFileNumber%, DynamicOxygenByStoichiometryOperator1%, DynamicOxygenByStoichiometryOperator2%

Close #CalcImageProjectFileNumber%
End If

Exit Sub

' Errors
CalcImageReadWriteProjectFileError:
CalcImageProjectFile$ = vbNullString
CalcImageSampleNameTitle$ = vbNullString
MsgBox Error$, vbOKOnly + vbCritical, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
ierror = True
Exit Sub

CalcImageReadWriteProjectFileNewerCIPFile:
msg$ = "CalcImage CIP file (" & CalcImageProjectFile$ & ") version (" & Format$(CalcImageProjectVersion%) & ") was created by a newer version of the CalcImage application. Please update Probe for EPMA to get the most recent version of CalcImage"
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
ProbeDataFile$ = vbNullString
ierror = True
Exit Sub

CalcImageReadWriteProjectFileBlankCondition:
msg$ = "Probe data file name is blank in CalcImage Project File " & CalcImageProjectFile$
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
ProbeDataFile$ = vbNullString
ierror = True
Exit Sub

CalcImageReadWriteProjectFileMissingCondition:
msg$ = "Probe data file " & tfilename$ & " is missing"
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
CalcImageProjectFile$ = vbNullString
CalcImageSampleNameTitle$ = vbNullString
ierror = True
Exit Sub

CalcImageReadWriteProjectFileTooManyImages:
msg$ = "Too many image files specified in CalcImage Project File " & CalcImageProjectFile$
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
CalcImageProjectFile$ = vbNullString
CalcImageSampleNameTitle$ = vbNullString
ierror = True
Exit Sub

CalcImageReadWriteProjectFileBlankImage:
msg$ = "Image file number " & Str$(i%) & " name is blank in CalcImage Project File " & CalcImageProjectFile$
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
CalcImageProjectFile$ = vbNullString
CalcImageSampleNameTitle$ = vbNullString
ierror = True
Exit Sub

CalcImageReadWriteProjectFileMissingImage:
msg$ = "Image file " & CalcImageImageFiles$(i%) & " is missing"
MsgBox msg$, vbOKOnly + vbExclamation, "CalcImageReadWriteProjectFile"
Close #CalcImageProjectFileNumber%
CalcImageProjectFile$ = vbNullString
CalcImageSampleNameTitle$ = vbNullString
ierror = True
Exit Sub

End Sub

Note that additional explanation is provided in the CalcImage Help file:



which can be accessed from the CalcImage Help menu.
John J. Donovan, Pres. 
(541) 343-3400

"Not Absolutely Certain, Yet Reliable"