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:
(https://smf.probesoftware.com/gallery/1_28_04_26_11_14_40.png)
which can be accessed from the CalcImage Help menu.