// SEKONIC SR-2300 omrapi.dll Sample

#include <stdio.h>
#include "OMRAPI.h"

void	DispMarkData(OMR_MARK_INFO *pmark_info, CHAR *pmark_data);			// display mark data


//-----------------------------------------------------------------------------
// Main
void main (int argc, char** argv)
{
	OMR_STATUS		status = SR_SUCCESS;				// Responce
	OMR_MARK_INFO	mark_info;							// Mark infomation
	CHAR			mark_data[SR_COL_MAX*SR_ROW_MAX];	// Mark data
	int				iPageParam;							// Front/Back
	
	// Title
	printf("OMRAPI.DLL Sample Program\n"
		   "Copyright (c) 2000-2002 SEKONIC CORPORATION \n\n");
	
	// Open Device
	if ( OMR_OpenDeviceUSB() != SR_SUCCESS) {					// Open Device
		// Error handler code
		printf("OMR_OpenDeviceUSB Fail.\n");						// Display Error
		return;														// End Program
	}
	
	// SetReadingMethod
	if ( !OMR_SetReadingMethod(SR_READ_DIRECT, 0) ){			// Direct
		// Error handler code
		printf("OMR_SetReadingMethod : Fail\n");					// Display Error
		return;														// End Program
	}
	/*	
	
	if ( !OMR_SetReadingMethod(SR_READ_FRONT_EDGE, 3) ){		// Front edge
		// Error handler code
		printf("OMR_SetReadingMethod : Fail\n");					// Display Error
		return;														// End Program
	}
	*/
	
	// SetNumberOfColumnsToRead
	if ( !OMR_SetNumberOfColumnsToRead(46) ){					// if function error
		// Error handler code
		printf("SetNumberOfColumnsToRead : Fail\n");				// Display Error
		return;														// End Program
	}
	
	// Feed sheet And Get Mark Data
	while(1){													// loop
		if( !OMR_FeedSheet() ){										// if feed sheet error
			// Error handler code
			printf("FeedSheet : Fail\n");								// Display Error
			break;														// End Program
		}
		status	= OMR_GetLastError();								// Get Last Error
		if( status != SR_SUCCESS){									// if error
			// Error handler code
			printf("Message:[0x%X] %s\n", status, OMR_FormatMessage( status, SR_STRING_ENGLISH ) );
			break;														// End loop
		}
		
		iPageParam			= SR_PAGE_FRONT;						// select front page
		mark_info.columns	= SR_COL_MAX;
		mark_info.rows		= SR_ROW_MAX;
		if( !OMR_GetMarks(iPageParam, &mark_info, mark_data) ){		// Get Mark data
			// Error handler code
			printf("GetMarks : Fail\n");								// display fail
			break;														// end program
		}
//		if( mark_info.rows != 64){									// if TM count
//			// Error handler code
//			printf("Different rows.\n");								// fail
//		}
//		else{														// else success
			// handle mark data code
			DispMarkData(&mark_info, mark_data);						// display mark data
//		}
	}
	
	// close device
	OMR_CloseDevice();
	
	printf("Press Enter key...");
	getc(stdin);
	return;
}


//-----------------------------------------------------------------------------
// Display Mark data
void	DispMarkData(OMR_MARK_INFO *pmark_info, CHAR *pmark_data)
{
	int			row, col;							// row,col
	char		mark;								// mark density
	
	printf("   ----+----|----+----|----+----|----+----|----+---\n");
	for(row = 0; row < pmark_info->rows; row++){
		printf("%02d:", row+1);											// row
		for(col = 0; col < pmark_info->columns; col++){					// mark data
			mark	= pmark_data[(row*pmark_info->columns)+col];		// get mark density
			if(mark < 16)
				printf("%x", mark);
			else
				printf("@", mark);
		}
		printf("\n");
	}
	printf("\n");
}


