Click here to show toolbars of the Web Online Help System: show toolbars |
//****************************************************************************** // // File name: DMRContextViewer.cpp // Location: See Matrox Example Launcher in the MIL Control Center // // // Synopsis: This example inquires the settings and the fonts of an // interactively restored Dot Matrix Reader (SureDotOCR) context. // The inquired values are either displayed on screen // or saved to disk depending on user's choice. // // Copyright (C) Matrox Electronic Systems Ltd., 1992-2016. // All Rights Reserved #include <mil.h> // Define the struct of the settings. struct SDMRSettings { MIL_DOUBLE DotDiameter; MIL_INT ForegroundValue; MIL_DOUBLE MaxIntensity; MIL_INT MaxIntensityMode; MIL_INT MinContrast; MIL_INT MinContrastMode; MIL_DOUBLE MinIntensity; MIL_INT MinIntensityMode; MIL_INT NbOfFont; MIL_INT NbOfStringModels; MIL_INT DefaultSystem; MIL_DOUBLE SpaceSizeMax; MIL_INT SpaceSizeMaxMode; MIL_DOUBLE SpaceSizeMin; MIL_INT SpaceSizeMinMode; MIL_DOUBLE StringBoxHeight; MIL_INT StringBoxSizeMode; MIL_DOUBLE StringBoxWidth; MIL_DOUBLE TimeOut; // String model parameters. MIL_DOUBLE CharAcceptance; MIL_INT NbOfConstrainedPositions; MIL_DOUBLE StringAcceptance; MIL_DOUBLE StringCertainty; MIL_DOUBLE StringIndexValue; MIL_DOUBLE StringLabelValue; MIL_INT StringRank; MIL_INT StringSizeMax; MIL_INT StringSizeMin; // Font parameters. MIL_INT FontLabel; MIL_INT NbOfPermittedChars; MIL_INT ConstraintPosition; MIL_INT ConstraintType; MIL_INT FontSizeColumns; MIL_INT FontSizeRows; MIL_INT FontSizeTemplate; MIL_INT NbOfChars; }; // Output context info. to text file (if chosen) MIL_CONST_TEXT_PTR OUTPUT_FILE = MIL_TEXT("MdmrContext.txt"); const MIL_INT MAX_STRING_LENGTH = 30; // Major inquiry functions void InquireSettings (MIL_ID DmrCntxId, SDMRSettings& DMRSettings, MIL_FILE OutputTarget); void InquireStringModel (MIL_ID DmrCntxId, SDMRSettings& DMRSettings, MIL_FILE OutputTarget); void InquireAndPrintFont(MIL_ID DmrCntxId, SDMRSettings& DMRSettings, MIL_FILE OutputTarget); // Helper functions // Open or close output file to screen or text file. void SetOutputTarget(MIL_FILE* pOutputTarget); // Translate the definitions parameters to string. MIL_TEXT_PTR DefToStr(MIL_INT TheDef); // Print out string constraint void PrintConstraintInfo(MIL_ID DmrCntxId, MIL_INT ConstraintType, MIL_TEXT_PTR CharName, MIL_INT ConstraintFontLabel, MIL_FILE OutputTarget); // Print the font to output or a text file. void PrintTemplate(MIL_FILE OutputTarget, MIL_UINT8* CharTemplate, MIL_INT FontSizeRows, MIL_INT FontSizeColumns); // Example description. void PrintHeader() { MosPrintf(MIL_TEXT("[EXAMPLE NAME]\n") MIL_TEXT("DMRContextViewer\n\n") MIL_TEXT("[SYNOPSIS]\n") MIL_TEXT("This example demonstrates how to inquire the DMR context settings.\n\n") MIL_TEXT("[MODULES USED]\n") MIL_TEXT("Modules used: Application, System, Dot Matrix Reader.\n\n") MIL_TEXT("NOTE:\n") MIL_TEXT("If you don't have context ready to use,\n") MIL_TEXT("there is one preset context for testing purpose:\n") MIL_TEXT("\"Matrox Imaging\\Images\\DmrContextViewer\\SampleDmrContextForInquiry.mdmr\"\n\n") MIL_TEXT("Press <Enter> to restore a Dot Matrix Reader context from disk.\n")); MosGetch(); } // Main. int MosMain(void) { PrintHeader(); MIL_ID MilApplication; // Application identifier. MIL_ID MilSystem; // System identifier. SDMRSettings DMRSettings; // Allocate the application. MappAlloc(M_NULL, M_DEFAULT, &MilApplication); // Alloc the system MsysAlloc(M_DEFAULT, M_SYSTEM_HOST, M_DEFAULT, M_DEFAULT, &MilSystem); // Interactively restore a Dot Matrix Reader context. MappControl(M_ERROR, M_PRINT_DISABLE); MIL_ID DmrCntxId = MdmrRestore(M_INTERACTIVE, MilSystem, M_DEFAULT, M_NULL); MappControl(M_ERROR, M_PRINT_ENABLE); if (DmrCntxId != M_NULL) { // Set output to screen or text file MIL_FILE OutputTarget = M_NULL; SetOutputTarget(&OutputTarget); // Inquire the context settings. InquireSettings(DmrCntxId, DMRSettings, OutputTarget); // Inquire the string models info. InquireStringModel(DmrCntxId, DMRSettings, OutputTarget); // Inquire the font info. InquireAndPrintFont(DmrCntxId, DMRSettings, OutputTarget); // Finish output SetOutputTarget(&OutputTarget); // Free DMR context MdmrFree(DmrCntxId); } // Free system and application. MsysFree(MilSystem); MappFree(MilApplication); return 0; } // Function to inquire settings. void InquireSettings(MIL_ID DmrCntxId, SDMRSettings &DMRSettings, MIL_FILE OutputTarget) { MosFprintf(OutputTarget, MIL_TEXT("-------------------------------------------\n") MIL_TEXT("Context Settings:\n") MIL_TEXT("-------------------------------------------\n")); // Inquiry on dot diameters MdmrInquire(DmrCntxId, M_DOT_DIAMETER + M_TYPE_MIL_DOUBLE, &DMRSettings.DotDiameter); if (M_DEFAULT == DMRSettings.DotDiameter) { MdmrInquire(DmrCntxId, M_DOT_DIAMETER + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.DotDiameter); MosFprintf(OutputTarget, MIL_TEXT("M_DOT_DIAMETER = M_DEFAULT (%s)\n"), DefToStr(MIL_INT(DMRSettings.DotDiameter))); } else { MosFprintf(OutputTarget, MIL_TEXT("M_DOT_DIAMETER = %.2f\n"), DMRSettings.DotDiameter); } // Inquiry on foreground values MdmrInquire(DmrCntxId, M_FOREGROUND_VALUE + M_TYPE_MIL_INT, &DMRSettings.ForegroundValue); if (M_DEFAULT == DMRSettings.ForegroundValue) { MdmrInquire(DmrCntxId, M_FOREGROUND_VALUE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.ForegroundValue); MosFprintf(OutputTarget, MIL_TEXT("M_FOREGROUND_VALUE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.ForegroundValue)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_FOREGROUND_VALUE = %s\n"), DefToStr(DMRSettings.ForegroundValue)); } // Inquiry on max pixel intensity mode MdmrInquire(DmrCntxId, M_MAX_INTENSITY_MODE + M_TYPE_MIL_INT, &DMRSettings.MaxIntensityMode); if (M_DEFAULT == DMRSettings.MaxIntensityMode) { MdmrInquire(DmrCntxId, M_MAX_INTENSITY_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.MaxIntensityMode); MosFprintf(OutputTarget, MIL_TEXT("M_MAX_INTENSITY_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.MaxIntensityMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MAX_INTENSITY_MODE = %s\n"), DefToStr(DMRSettings.MaxIntensityMode)); } // Inquiry on maximum pixel intensity MdmrInquire(DmrCntxId, M_MAX_INTENSITY + M_TYPE_MIL_DOUBLE, &DMRSettings.MaxIntensity); if (M_DEFAULT == DMRSettings.MaxIntensity) { MdmrInquire(DmrCntxId, M_MAX_INTENSITY + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.MaxIntensity); MosFprintf(OutputTarget, MIL_TEXT("M_MAX_INTENSITY = M_DEFAULT (%.2f)\n"), DMRSettings.MaxIntensity); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MAX_INTENSITY = %.2f\n"), DMRSettings.MaxIntensity); } // Inquiry on min pixel intensity mode MdmrInquire(DmrCntxId, M_MIN_INTENSITY_MODE + M_TYPE_MIL_INT, &DMRSettings.MinIntensityMode); if (M_DEFAULT == DMRSettings.MinIntensityMode) { MdmrInquire(DmrCntxId, M_MIN_INTENSITY_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.MinIntensityMode); MosFprintf(OutputTarget, MIL_TEXT("M_MIN_INTENSITY_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.MinIntensityMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MIN_INTENSITY_MODE = %s\n"), DefToStr(DMRSettings.MinIntensityMode)); } // Inquiry on minimum pixel intensity MdmrInquire(DmrCntxId, M_MIN_INTENSITY + M_TYPE_MIL_DOUBLE, &DMRSettings.MinIntensity); if (M_DEFAULT == DMRSettings.MinIntensity) { MdmrInquire(DmrCntxId, M_MIN_INTENSITY + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.MinIntensity); MosFprintf(OutputTarget, MIL_TEXT("M_MIN_INTENSITY = M_DEFAULT (%.2f)\n"), DMRSettings.MinIntensity); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MIN_INTENSITY = %.2f\n"), DMRSettings.MinIntensity); } // Inquiry on min contrast mode MdmrInquire(DmrCntxId, M_MIN_CONTRAST_MODE + M_TYPE_MIL_INT, &DMRSettings.MinContrastMode); if (M_DEFAULT == DMRSettings.MinContrastMode) { MdmrInquire(DmrCntxId, M_MIN_CONTRAST_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.MinContrastMode); MosFprintf(OutputTarget, MIL_TEXT("M_MIN_CONTRAST_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.MinContrastMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MIN_CONTRAST_MODE = %s\n"), DefToStr(DMRSettings.MinContrastMode)); } // Inquiry on min contrast MdmrInquire(DmrCntxId, M_MIN_CONTRAST + M_TYPE_MIL_INT, &DMRSettings.MinContrast); if (M_DEFAULT == DMRSettings.MinContrast) { MdmrInquire(DmrCntxId, M_MIN_CONTRAST + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.MinContrast); MosFprintf(OutputTarget, MIL_TEXT("M_MIN_CONTRAST = M_DEFAULT (%d)\n"), (long) DMRSettings.MinContrast); } else { MosFprintf(OutputTarget, MIL_TEXT("M_MIN_CONTRAST = %d\n"), (long) DMRSettings.MinContrast); } // Inquiry on M_SPACE_SIZE_MAX_MODE MdmrInquire(DmrCntxId, M_SPACE_SIZE_MAX_MODE + M_TYPE_MIL_INT, &DMRSettings.SpaceSizeMaxMode); if (M_DEFAULT == DMRSettings.SpaceSizeMaxMode) { MdmrInquire(DmrCntxId, M_SPACE_SIZE_MAX_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.SpaceSizeMaxMode); MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MAX_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.SpaceSizeMaxMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MAX_MODE = %s\n"), DefToStr(DMRSettings.SpaceSizeMaxMode)); } // Inquiry on M_SPACE_SIZE_MAX MdmrInquire(DmrCntxId, M_SPACE_SIZE_MAX + M_TYPE_MIL_DOUBLE, &DMRSettings.SpaceSizeMax); if (M_DEFAULT == DMRSettings.SpaceSizeMax) { MdmrInquire(DmrCntxId, M_SPACE_SIZE_MAX + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.SpaceSizeMax); MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MAX = M_DEFAULT (%.2f)\n"), DMRSettings.SpaceSizeMax); } else { MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MAX = %.2f\n"), (long) DMRSettings.SpaceSizeMax); } // Inquiry on M_SPACE_SIZE_MIN_MODE MdmrInquire(DmrCntxId, M_SPACE_SIZE_MIN_MODE + M_TYPE_MIL_INT, &DMRSettings.SpaceSizeMinMode); if (M_DEFAULT == DMRSettings.SpaceSizeMinMode) { MdmrInquire(DmrCntxId, M_SPACE_SIZE_MIN_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.SpaceSizeMinMode); MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MIN_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.SpaceSizeMinMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MIN_MODE = %s\n"), DefToStr(DMRSettings.SpaceSizeMinMode)); } // Inquiry on M_SPACE_SIZE_MIN MdmrInquire(DmrCntxId, M_SPACE_SIZE_MIN + M_TYPE_MIL_DOUBLE, &DMRSettings.SpaceSizeMin); if (M_DEFAULT == DMRSettings.SpaceSizeMin) { MdmrInquire(DmrCntxId, M_SPACE_SIZE_MIN + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.SpaceSizeMin); MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MIN = M_DEFAULT (%.2f)\n"), DMRSettings.SpaceSizeMin); } else { MosFprintf(OutputTarget, MIL_TEXT("M_SPACE_SIZE_MIN = %.2f\n"), DMRSettings.SpaceSizeMin); } // Inquiry on M_STRING_BOX_SIZE_MODE MdmrInquire(DmrCntxId, M_STRING_BOX_SIZE_MODE + M_TYPE_MIL_INT, &DMRSettings.StringBoxSizeMode); if (M_DEFAULT == DMRSettings.StringBoxSizeMode) { MdmrInquire(DmrCntxId, M_STRING_BOX_SIZE_MODE + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.StringBoxSizeMode); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_SIZE_MODE = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.StringBoxSizeMode)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_SIZE_MODE = %s\n"), DefToStr(DMRSettings.StringBoxSizeMode)); } // Inquiry on width of the rectangular region in which to read strings MdmrInquire(DmrCntxId, M_STRING_BOX_WIDTH + M_TYPE_MIL_DOUBLE, &DMRSettings.StringBoxWidth); if (M_DEFAULT == DMRSettings.StringBoxWidth) { MdmrInquire(DmrCntxId, M_STRING_BOX_WIDTH + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.StringBoxWidth); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_WIDTH = M_DEFAULT (%s)\n"), DefToStr(MIL_INT(DMRSettings.StringBoxWidth))); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_WIDTH = %.2f\n"), DMRSettings.StringBoxWidth); } // Inquiry on the height of the rectangular region in which to read strings MdmrInquire(DmrCntxId, M_STRING_BOX_HEIGHT + M_TYPE_MIL_DOUBLE, &DMRSettings.StringBoxHeight); if (M_DEFAULT == DMRSettings.StringBoxHeight) { MdmrInquire(DmrCntxId, M_STRING_BOX_HEIGHT + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.StringBoxHeight); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_HEIGHT = M_DEFAULT (%s)\n"), DefToStr(MIL_INT(DMRSettings.StringBoxHeight))); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_BOX_HEIGHT = %.2f\n"), DMRSettings.StringBoxHeight); } // Inquiry on number of fonts MdmrInquire(DmrCntxId, M_NUMBER_OF_FONTS + M_TYPE_MIL_INT, &DMRSettings.NbOfFont); MosFprintf(OutputTarget, MIL_TEXT("M_NUMBER_OF_FONTS = %d\n"), (long) DMRSettings.NbOfFont); // Inquiry on number of string models DMRSettings.NbOfStringModels = MdmrInquire(DmrCntxId, M_NUMBER_OF_STRING_MODELS, M_NULL); MosFprintf(OutputTarget, MIL_TEXT("M_NUMBER_OF_STRING_MODELS = %d\n"), (long) DMRSettings.NbOfStringModels); // Inquiry on time out MdmrInquire(DmrCntxId, M_TIMEOUT + M_TYPE_MIL_DOUBLE, &DMRSettings.TimeOut); if (M_DEFAULT == DMRSettings.TimeOut) { MdmrInquire(DmrCntxId, M_TIMEOUT + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.TimeOut); MosFprintf(OutputTarget, MIL_TEXT("M_TIMEOUT = M_DEFAULT (%.2f)\n"), DMRSettings.TimeOut); } else if(M_DISABLE == DMRSettings.TimeOut) { MosFprintf(OutputTarget, MIL_TEXT("M_TIMEOUT = M_DISABLE\n")); } else { MosFprintf(OutputTarget, MIL_TEXT("M_TIMEOUT = %.2f\n"), DMRSettings.TimeOut); } // Pause for next section if (MIL_STDOUT == OutputTarget) { MosPrintf(MIL_TEXT("\nPress <Enter> to show string model info.\n\n")); MosGetch(); } } // Function to inquire string models void InquireStringModel(MIL_ID DmrCntxId, SDMRSettings &DMRSettings, MIL_FILE OutputTarget) { if ((DMRSettings.NbOfStringModels == 0) && (MIL_STDOUT == OutputTarget)) { MosFprintf(OutputTarget, MIL_TEXT("\nNo string models are defined. Press <Enter> to show font info.\n\n")); MosGetch(); return; } for(MIL_INT StrIndex = 0; StrIndex < DMRSettings.NbOfStringModels; StrIndex++) { MosFprintf(OutputTarget, MIL_TEXT("\n-------------------------------------------\n")); MosFprintf(OutputTarget, MIL_TEXT("String model %d settings:\n"), (long) StrIndex); MosFprintf(OutputTarget, MIL_TEXT("-------------------------------------------\n")); // Inquiry on character's acceptance level MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_CHAR_ACCEPTANCE + M_TYPE_MIL_DOUBLE, &DMRSettings.CharAcceptance); if (M_DEFAULT == DMRSettings.CharAcceptance) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_CHAR_ACCEPTANCE + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.CharAcceptance); MosFprintf(OutputTarget, MIL_TEXT("M_CHAR_ACCEPTANCE = M_DEFAULT (%.2f)\n"), DMRSettings.CharAcceptance); } else { MosFprintf(OutputTarget, MIL_TEXT("M_CHAR_ACCEPTANCE = %.2f\n"), DMRSettings.CharAcceptance); } // Inquiry on string score acceptance level MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_ACCEPTANCE + M_TYPE_MIL_DOUBLE, &DMRSettings.StringAcceptance); if (M_DEFAULT == DMRSettings.StringAcceptance) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_ACCEPTANCE + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.StringAcceptance); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_ACCEPTANCE = M_DEFAULT (%.2f)\n"), DMRSettings.StringAcceptance); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_ACCEPTANCE = %.2f\n"), DMRSettings.StringAcceptance); } // Inquiry on string certainty level MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_CERTAINTY + M_TYPE_MIL_DOUBLE, &DMRSettings.StringCertainty); if (M_DEFAULT == DMRSettings.StringCertainty) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_CERTAINTY + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.StringCertainty); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_CERTAINTY = M_DEFAULT (%.2f)\n"), DMRSettings.StringCertainty); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_CERTAINTY = %.2f\n"), DMRSettings.StringCertainty); } // Inquiry on string index value MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_INDEX_VALUE + M_TYPE_MIL_DOUBLE, &DMRSettings.StringIndexValue); if (M_DEFAULT == DMRSettings.StringIndexValue) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_INDEX_VALUE + M_TYPE_MIL_DOUBLE + M_DEFAULT, &DMRSettings.StringIndexValue); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_INDEX_VALUE = M_DEFAULT (%s)\n"), DefToStr(MIL_INT(DMRSettings.StringIndexValue))); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_INDEX_VALUE = %.2f\n"), DMRSettings.StringIndexValue); } // Inquiry on string label value MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_LABEL_VALUE + M_TYPE_MIL_DOUBLE, &DMRSettings.StringLabelValue); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_LABEL_VALUE = %.2f\n"), DMRSettings.StringLabelValue); // Inquiry on string rank MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_RANK + M_TYPE_MIL_INT, &DMRSettings.StringRank); if (M_DEFAULT == DMRSettings.StringRank) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_RANK + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.StringRank); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_RANK = M_DEFAULT (%d)\n"), (long) DMRSettings.StringRank); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_RANK = %d\n"), (long) DMRSettings.StringRank); } // Inquiry on maximum number of characters in string MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_SIZE_MAX + M_TYPE_MIL_INT, &DMRSettings.StringSizeMax); if (M_DEFAULT == DMRSettings.StringSizeMax) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_SIZE_MAX + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.StringSizeMax); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MAX = M_DEFAULT (%s)\n"), DefToStr(DMRSettings.StringSizeMax)); } else if (M_INVALID == DMRSettings.StringSizeMax) { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MAX = %s\n"), DefToStr(DMRSettings.StringSizeMax)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MAX = %d\n"), (long) DMRSettings.StringSizeMax); } // Inquiry on minimum number of characters in string MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_SIZE_MIN + M_TYPE_MIL_INT, &DMRSettings.StringSizeMin); if (M_DEFAULT == DMRSettings.StringSizeMin) { MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_STRING_SIZE_MIN + M_TYPE_MIL_INT + M_DEFAULT, &DMRSettings.StringSizeMin); MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MIN = M_DEFAULT (%.d)\n"), (long) DMRSettings.StringSizeMin); } else if (M_INVALID == DMRSettings.StringSizeMin) { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MIN = %s\n"), DefToStr(DMRSettings.StringSizeMin)); } else { MosFprintf(OutputTarget, MIL_TEXT("M_STRING_SIZE_MIN = %d\n"), (long) DMRSettings.StringSizeMin); } // Inquiry on constraints for different positions of string model // Inquiry on number of explicitly constrained positions MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_NUMBER_OF_CONSTRAINED_POSITIONS + M_TYPE_MIL_INT, &DMRSettings.NbOfConstrainedPositions); MosFprintf(OutputTarget, MIL_TEXT("M_NUMBER_OF_CONSTRAINED_POSITIONS = %d\n"), (long) DMRSettings.NbOfConstrainedPositions); if (DMRSettings.NbOfConstrainedPositions) { MosFprintf(OutputTarget, MIL_TEXT("\nThe %d constraints for specific positions in string are:\n"), (long) DMRSettings.NbOfConstrainedPositions); } else { MosFprintf(OutputTarget, MIL_TEXT("\nThere is no constraints for specific positions in string model.\n\n")); } for(MIL_INT CIndex = 0; CIndex < DMRSettings.NbOfConstrainedPositions; ++CIndex) { // Inquiry on the constraint position MIL_INT ConstraintPosition; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), M_DEFAULT, M_POSITION + M_TYPE_MIL_INT, &ConstraintPosition); MosFprintf(OutputTarget, MIL_TEXT("\nPosition %d: \n"), (long) ConstraintPosition); // Inquiry on permitted characters for this constraint position MIL_INT NbEntries; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), M_DEFAULT, M_NUMBER_OF_PERMITTED_CHARS_ENTRIES + M_TYPE_MIL_INT, &NbEntries); if (NbEntries > 0) { for(MIL_INT j = 0; j<NbEntries; j++) { // Inquiry on the label of the font MIL_INT ConstraintFontLabel; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), j, M_FONT_LABEL_VALUE + M_TYPE_MIL_INT, &ConstraintFontLabel); // Inquiry on the type of the constraint MIL_INT ConstraintType; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), j, M_TYPE + M_TYPE_MIL_INT, &ConstraintType); // Inquiry on the char list MIL_TEXT_PTR CharList = M_NULL; if (M_CHAR_LIST == ConstraintType) { MIL_INT CharListSize; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), j, M_CHAR_LIST + M_STRING_SIZE + M_TYPE_MIL_INT, &CharListSize); CharList = new MIL_TEXT_CHAR[CharListSize]; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_POSITION_CONSTRAINED_ORDER(CIndex), j, M_CHAR_LIST, CharList); } // Print out to target the constraint info. PrintConstraintInfo(DmrCntxId, ConstraintType, CharList, ConstraintFontLabel, OutputTarget); if (CharList) { delete[] CharList; } } } } // Inquiry on permitted character entries MosFprintf(OutputTarget, MIL_TEXT("\nThe implicit constraint is:\n\n")); MIL_INT NbEntries; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, M_DEFAULT, M_NUMBER_OF_PERMITTED_CHARS_ENTRIES + M_TYPE_MIL_INT, &NbEntries); if (NbEntries > 0) { for(MIL_INT j = 0; j < NbEntries; j++) { // Inquiry on label of the font MIL_INT ConstraintFontLabel; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, j, M_FONT_LABEL_VALUE + M_TYPE_MIL_INT, &ConstraintFontLabel); // Inquiry on the type of the constraint MIL_INT ConstraintType; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, j, M_TYPE + M_TYPE_MIL_INT, &ConstraintType); // Inquiry on the char list MIL_TEXT_PTR CharList = M_NULL; if (M_CHAR_LIST == ConstraintType) { MIL_INT CharListSize; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, j, M_CHAR_LIST + M_STRING_SIZE + M_TYPE_MIL_INT, &CharListSize); CharList = new MIL_TEXT_CHAR[CharListSize]; MdmrInquireStringModel(DmrCntxId, M_STRING_INDEX(StrIndex), M_DEFAULT, j, M_CHAR_LIST, CharList); } // Print out to target the constraint info. PrintConstraintInfo(DmrCntxId, ConstraintType, CharList, ConstraintFontLabel, OutputTarget); if (CharList) { delete[] CharList; } } } else { MosFprintf(OutputTarget, MIL_TEXT("Any character from any font is permitted (default behavior).\n")); } } if (MIL_STDOUT == OutputTarget) { MosFprintf(OutputTarget, MIL_TEXT("\nPress <Enter> to show font info.\n\n")); MosGetch(); } } // Function to inquire and print fonts. void InquireAndPrintFont(MIL_ID DmrCntxId, SDMRSettings &Settings, MIL_FILE OutputTarget) { if (Settings.NbOfFont == 0) { MosFprintf(OutputTarget, MIL_TEXT("\nNo fonts are defined. Press <Enter> to continue.\n\n")); return; } for(MIL_INT FontIndex = 0; FontIndex < Settings.NbOfFont; FontIndex++) { MosFprintf(OutputTarget, MIL_TEXT("\n-------------------------------------------\n")); MosFprintf(OutputTarget, MIL_TEXT("Font Settings:\n")); MosFprintf(OutputTarget, MIL_TEXT("-------------------------------------------\n\n")); //Inquiry on font label MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_LABEL_VALUE + M_TYPE_MIL_INT, &Settings.FontLabel); MosFprintf(OutputTarget, MIL_TEXT("M_FONT_LABEL_VALUE = %d\n"), (long) Settings.FontLabel); //Inquiry on the total number of the characters. MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_NUMBER_OF_CHARS + M_TYPE_MIL_INT, &Settings.NbOfChars); MosFprintf(OutputTarget, MIL_TEXT("M_NUMBER_OF_CHARS = %d\n"), (long) Settings.NbOfChars); //Inquiry on the column and row number of the characters. MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_SIZE_COLUMNS + M_TYPE_MIL_INT, &Settings.FontSizeColumns); if (Settings.FontSizeColumns == M_DEFAULT) { MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_SIZE_COLUMNS + M_DEFAULT + M_TYPE_MIL_INT, &Settings.FontSizeColumns); MosFprintf(OutputTarget, MIL_TEXT("M_FONT_SIZE_COLUMNS = M_DEFAULT (%d)\n"), (long) Settings.FontSizeColumns); } else { MosFprintf(OutputTarget, MIL_TEXT("M_FONT_SIZE_COLUMNS = %d\n"), (long) Settings.FontSizeColumns); } MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_SIZE_ROWS + M_TYPE_MIL_INT, &Settings.FontSizeRows); if (Settings.FontSizeRows == M_DEFAULT) { MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_SIZE_ROWS + M_DEFAULT + M_TYPE_MIL_INT, &Settings.FontSizeRows); MosFprintf(OutputTarget, MIL_TEXT("M_FONT_SIZE_ROWS = M_DEFAULT (%d)\n"), (long) Settings.FontSizeRows); } else { MosFprintf(OutputTarget, MIL_TEXT("M_FONT_SIZE_ROWS = %d\n"), (long) Settings.FontSizeRows); } // Inquiry on template size MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), M_DEFAULT, M_NULL, M_FONT_SIZE_TEMPLATE + M_TYPE_MIL_INT, &Settings.FontSizeTemplate); MosFprintf(OutputTarget, MIL_TEXT("M_FONT_SIZE_TEMPLATE = %d\n\n"), (long) Settings.FontSizeTemplate); // Inquiry on font character for (MIL_INT i = 0; i < Settings.NbOfChars; i++) { // Inquire the length of the character name, including the terminating null character. MIL_INT NameLength; MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), i, M_NULL, M_CHAR_NAME + M_HEX_UTF16_FOR_NON_BASIC_LATIN + M_STRING_SIZE + M_TYPE_MIL_INT, &NameLength); MIL_TEXT_PTR CharName = new MIL_TEXT_CHAR[NameLength]; MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), i, M_NULL, M_CHAR_NAME + M_HEX_UTF16_FOR_NON_BASIC_LATIN, CharName); // Inquiry on the character template. MIL_UINT8* CharTemplate = new MIL_UINT8[Settings.FontSizeTemplate]; MdmrInquireFont(DmrCntxId, M_FONT_INDEX(FontIndex), i, M_NULL, M_CHAR_TEMPLATE + M_TYPE_MIL_UINT8, CharTemplate); //Print out each character in the following format: MosFprintf (OutputTarget, MIL_TEXT("Char name = %s\n\n"), CharName); PrintTemplate(OutputTarget, CharTemplate, Settings.FontSizeRows, Settings.FontSizeColumns); // Delete local objects delete[] CharName; delete[] CharTemplate; } } } // Function to output model constraint information. void PrintConstraintInfo(MIL_ID DmrCntxId, MIL_INT ConstraintType, MIL_TEXT_PTR CharList, MIL_INT ConstraintFontLabel, MIL_FILE OutputTarget) { MIL_TEXT_PTR FontLabel = M_NULL; if (M_ANY == ConstraintFontLabel) { FontLabel = new MIL_TEXT_CHAR[6]; MosSprintf(FontLabel, 6, MIL_TEXT("M_ANY")); } else { FontLabel = new MIL_TEXT_CHAR[MAX_STRING_LENGTH]; MosSprintf(FontLabel, MAX_STRING_LENGTH, MIL_TEXT("%d"), (long) ConstraintFontLabel); } if (M_CHAR_LIST == ConstraintType) { MosFprintf(OutputTarget, MIL_TEXT("\"%s\" from font %s\n"), CharList, FontLabel); } else { MIL_TEXT_PTR CharCategory = DefToStr(ConstraintType); MosFprintf(OutputTarget, MIL_TEXT("%s from font %s\n"), CharCategory, FontLabel); delete[] CharCategory; } delete[] FontLabel; } // Function to translate the definitions of the returned parameters to strings. MIL_TEXT_PTR DefToStr(MIL_INT TheDef) { MIL_TEXT_PTR TheStringToReturn = new MIL_TEXT_CHAR[MAX_STRING_LENGTH]; switch (TheDef) { case M_DEFAULT: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_DEFAULT")); break; case M_ANY: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_ANY")); break; case M_FOREGROUND_BLACK: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_FOREGROUND_BLACK")); break; case M_FOREGROUND_WHITE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_FOREGROUND_WHITE")); break; case M_CHAR_WIDTH_FACTOR: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_CHAR_WIDTH_FACTOR")); break; case M_DISABLE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_DISABLE")); break; case M_USER_DEFINED: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_USER_DEFINED")); break; case M_INVALID: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_INVALID")); break; case M_LETTERS: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_LETTERS")); break; case M_DIGITS: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_DIGITS")); break; case M_SPACE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_SPACE")); break; case M_LETTERS_UPPERCASE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_LETTERS_UPPERCASE")); break; case M_LETTERS_LOWERCASE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_LETTERS_LOWERCASE")); break; case M_AUTO: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_AUTO")); break; case M_FALSE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_FALSE")); break; case M_ENABLE: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("M_ENABLE")); break; default: MosSprintf(TheStringToReturn, MAX_STRING_LENGTH, MIL_TEXT("UNKNOWN")); break; } return TheStringToReturn; } // Function to print the font to output or a text file. void PrintTemplate(MIL_FILE OutputTarget, MIL_UINT8* CharTemplate, MIL_INT FontSizeRows, MIL_INT FontSizeColumns) { // Note: // 00 00 FF 00 00 * // 00 FF 00 FF 00 * * // Print to file FF 00 00 00 FF or to screen * * // --------------> FF 00 00 00 FF -------------> * * // FF FF FF FF FF * * * * * // FF 00 00 00 FF * * // FF 00 00 00 FF * * // for (MIL_INT RowIndex = 0; RowIndex < FontSizeRows; RowIndex++) { for (MIL_INT ColIndex = 0; ColIndex < FontSizeColumns; ColIndex++) { if (MIL_STDOUT == OutputTarget) { MosFprintf(OutputTarget, MIL_TEXT("%s "), CharTemplate[RowIndex*FontSizeColumns + ColIndex] == 0 ? MIL_TEXT(" ") : MIL_TEXT("*")); } else { MosFprintf(OutputTarget, MIL_TEXT("%s "), CharTemplate[RowIndex*FontSizeColumns + ColIndex] == 0 ? MIL_TEXT("00") : MIL_TEXT("FF")); } } MosFprintf(OutputTarget, MIL_TEXT("\n")); } MosFprintf(OutputTarget, (MIL_TEXT("\n\n"))); } // Function to set output file void SetOutputTarget(MIL_FILE* pOutputTarget) { // Set output target to screen or text file if (M_NULL == *pOutputTarget) { // Let user choose to print or save the context content to a text file. MIL_INT ch; do { MosPrintf(MIL_TEXT("Press <1> to print the context content to screen.\n") MIL_TEXT("Press <2> to save the context content to a text file.\n\n")); ch = MosGetch(); } while (ch != '1' && ch != '2'); if (ch == '1') { *pOutputTarget = MIL_STDOUT; } else { *pOutputTarget = MosFopen(OUTPUT_FILE, MIL_CONST_TEXT_PTR("w")); if (!(*pOutputTarget)) { MosPrintf(MIL_TEXT("File cannot be created.\n")); return; } } } // Finish output to screen or close the file else { if (MIL_STDOUT == *pOutputTarget) { MosPrintf(MIL_TEXT("\nPress <Enter> to finish.\n\n")); MosGetch(); } else { MosFclose(*pOutputTarget); MosPrintf(MIL_TEXT("MdmrContext.txt is saved in the same folder as the original context.\n")); MosPrintf(MIL_TEXT("\nPress <Enter> to finish.\n\n")); MosGetch(); } } }