Exemple #1
0
static Boolean
CourseListHandleSelection(void)
{
  MemHandle m, mWebsite, mEmail, old;
  CourseDBRecord c;
  FieldType *fldWebsite, *fldEmail;
  Char *buffer;
  
  m = DmQueryRecord(DatabaseGetRefN(DB_MAIN), gCourseInd[LstGetSelection(GetObjectPtr(LIST_courses))]);
  if (! m)  return true;
  UnpackCourse(&c, MemHandleLock(m));
  fldWebsite = GetObjectPtr(FIELD_cl_website);
  fldEmail = GetObjectPtr(FIELD_cl_email);

  if (StrLen(c.website) == 0) {
    mWebsite = MemHandleNew(4);
    buffer=MemHandleLock(mWebsite);
    MemSet(buffer, 4, 0);
    StrCopy(buffer, "-?-");
  } else {
    mWebsite = MemHandleNew(StrLen(c.website)+1);
    buffer = MemHandleLock(mWebsite);
    MemSet(buffer, StrLen(c.website)+1, 0);
    StrCopy(buffer, c.website);
  }
  MemHandleUnlock(mWebsite);
  old = FldGetTextHandle(fldWebsite);
  FldSetTextHandle(fldWebsite, mWebsite);
  if (old != NULL)  MemHandleFree(old); 
  FldDrawField(fldWebsite);

  if (StrLen(c.teacherEmail) == 0) {
    mEmail = MemHandleNew(4);
    buffer = MemHandleLock(mEmail);
    MemSet(buffer, 4, 0);
    StrCopy(buffer, "-?-");
  } else {
    mEmail = MemHandleNew(StrLen(c.teacherEmail)+1);
    buffer = MemHandleLock(mEmail);
    MemSet(buffer, StrLen(c.teacherEmail)+1, 0);
    StrCopy(buffer, c.teacherEmail);
  }
  MemHandleUnlock(mEmail);
  old = FldGetTextHandle(fldEmail);
  FldSetTextHandle(fldEmail, mEmail);
  if (old != NULL)  MemHandleFree(old); 
  FldDrawField(fldEmail);

  MemHandleUnlock(m);

  return false;
}
Exemple #2
0
/***********************************************************************
 *
 * FUNCTION:    PrvSetTimeField
 *
 * DESCRIPTION: Set the given field's text to show a time and day of week.
 *
 * PARAMETERS:  frm - a pointer to the form containing the field to set
 *					 timeFieldID - the ID of the field to set
 *					 timeHandle - the handle used for storing the text for this field
 *					 time - a pointer to the date and time to show in the field
 *					 drawField - whether to draw field after setting its text
 *
 * RETURNED:	 nothing
 *
 * REVISION HISTORY:
 *			Name	Date		Description
 *			----	----		-----------
 *			peter	3/7/00	Initial Revision
 *
 ***********************************************************************/
static void PrvSetTimeField(FormType * frm, UInt16 timeFieldID, MemHandle timeHandle,
	DateTimeType *time, Boolean drawField)
{
	FieldType * timeFieldP;
	Char * timeString, * timeZoneDOWFormatString, * currentDOWString;
	MemHandle resHandle;
	TimeFormatType timeFormat;			// Format to display time in

	timeFormat = (TimeFormatType)PrefGetPreference(prefTimeFormat);
	
	timeString = MemHandleLock(timeHandle);
	TimeToAscii(time->hour, time->minute, timeFormat, timeString);
	currentDOWString = timeString + StrLen(timeString);
	currentDOWString[0] = ' ';
	currentDOWString++;

	resHandle = DmGetResource(strRsc, DOWformatString);
	ErrNonFatalDisplayIf(resHandle == NULL, "Missing string resource");
	timeZoneDOWFormatString = MemHandleLock(resHandle);
	DateTemplateToAscii(timeZoneDOWFormatString, time->month, time->day, time->year,
		currentDOWString, dowLongDateStrLength);
	MemHandleUnlock(resHandle);
	
	MemHandleUnlock(timeHandle);
	timeFieldP = FrmGetObjectPtr (frm, FrmGetObjectIndex (frm, timeFieldID));
	FldSetTextHandle(timeFieldP, timeHandle);
	
	if (drawField)
		FldDrawField(timeFieldP);
}
Exemple #3
0
/*--------------------------------------------------------------------display-+
|                                                                             |
+----------------------------------------------------------------------------*/
void display(char const * text, int len)
{
   FormPtr frm = FrmGetActiveForm();
   FieldPtr field = (FieldPtr)FrmGetObjectPtr(
      frm,
      FrmGetObjectIndex(frm, MainConsoleField)
   );
   FldInsert(field, text, len);
   updateScroll();
   FldDrawField(field);
}
Exemple #4
0
void DisplayNextRecord(DmOpenRef db, Int16 step)
{
	FormPtr form = FrmGetActiveForm();
	if (FormIsNot(form, FormDetail)) return;

	CalculateNextRow(db, step);
	DisplayCurrentRecord(db);
	
	FieldPtr fieldContent = (FieldPtr) GetObjectPtr(form, FieldContent);
	FldDrawField(fieldContent);
	UpdateScrollbar(form, FieldContent, ScrollbarContent);
}
Exemple #5
0
void DisplayNextUnreadRecord(DmOpenRef db)
{
	Int16 index = GetNextUnreadIndex(db, g_SelectedCategory);
	if (index == -1)
		DisplayNextRecord(db, 1);
	else {
		FormPtr form = FrmGetActiveForm();
		if (FormIsNot(form, FormDetail)) return;
		FieldPtr fieldContent = (FieldPtr) GetObjectPtr(form, FieldContent);
		DisplayRecord(db, -1, index);
		FldDrawField(fieldContent);
	}
}
Exemple #6
0
void printarray2( FieldPtr fld, BYTE *name, int arraylen, BYTE *array )
{
	int i;
	BYTE sprintb[10];

	AppendField( fld, name, StrLen(name) );
	AppendField( fld, " ", 1 );
	for( i=0; i<arraylen; i++ ) {
		StrPrintF( sprintb, "%x", array[i] );
		AppendField( fld, sprintb+6, 2 );
	}
	AppendField( fld, "\n", 1 );
	FldDrawField(fld);
}
Exemple #7
0
/* SetFieldTextFromHandle -- Fills a field with contents of a handle
 * Args:    
 *     Word     fieldID  -- ID of field to fill, see cwimp.rpc file
 *     VoidHand txtH     -- Handle of String to fill ID with
 * Returns:
 *     FieldPtr          -- Ptr to the field set.
 */
FieldPtr SetFieldTextFromHandle(Word fieldID, VoidHand txtH)
{
  Handle   oldTxtH;
  FormPtr  frm = FrmGetActiveForm();
  FieldPtr fldP;

  fldP = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, fieldID));
  ErrNonFatalDisplayIf(!fldP, "missing field");
  oldTxtH = FldGetTextHandle(fldP);

  FldSetTextHandle(fldP, (Handle) txtH);
  // FldEraseField( fldP );
  FldDrawField(fldP);

  if (oldTxtH)
    MemHandleFree((VoidHand) oldTxtH);

  return fldP;
}
Exemple #8
0
void SetFieldFromHandle ( UInt16 fieldID, MemHandle txtH )
{
	MemHandle oldTxtH;	/* Old text */
	FormType * frmP;	/* Form pointer */
	FieldType * fldP;	/* Field pointer */

	frmP = FrmGetActiveForm();	/* Find form pointer */
	fldP = FrmGetObjectPtr (frmP, FrmGetObjectIndex ( frmP, fieldID)); /* Find field pointer */

	ErrNonFatalDisplayIf ( !fldP, "missing field");	/* Check if the current object exists */
	
	oldTxtH = FldGetTextHandle(fldP);	/* Find text pointer of old text */
	
	FldSetTextHandle(fldP, txtH);	/* Set the new text */
	FldDrawField(fldP);	/* Redraw field */
	
	if (oldTxtH != NULL)	/* Free up old text */
		MemHandleFree(oldTxtH);

}
Exemple #9
0
/***********************************************************************
 *
 * FUNCTION:    RepeatDrawDescription
 *
 * DESCRIPTION: This routine draws the text description of the current
 *              repeat type and frequency.
 *
 *              The description is created from a template string.  The
 *              repeat type and frequency determines which template is
 *              used.  The template may contain one or more of the
 *              following token:
 *                   ^d - day name (ex: Monday)
 *							^f - frequency
 *                   ^x - day of the month ordinal number (ex: 1st - 31th)
 *                   ^m - month name (ex: July)
 *                   ^w - week ordinal number (1st, 2nd, 3rd, 4th, or last)
 *
 * PARAMETERS:  frm - pointer to the repeat dialog box
 *
 * RETURNED:    nothing
 *
 ***********************************************************************/
void RepeatDrawDescription(FormType* frm) {
  UInt8 repeatOn;
  UInt16 i;
  UInt16 len;
  UInt16 freq;
  UInt16 dayOfWeek;
  UInt16 templateId = repeatNoneString;
  UInt16 repeatOnCount = 0;
  Char* descP = NULL;
  Char* resP = NULL;
  Char* saveResP = NULL;
  MemHandle descH = NULL;
  MemHandle resH = NULL;
  RepeatInfoType repeat;
  FieldType* fld = GetObjectPointer(frm, RepeatDescField);

  FldEraseField (fld);

  /* Get the current setting of the repeat ui gadgets. */
  RepeatGetUIValues(frm, &repeat);
  
  /*
  ** Determine which template string to use.  The template string is
  ** used to format the description string. Note that we could add
  ** a soft constant which tells us whether we need to use different
  ** strings for freq == 1 case (depends on language), thus saving space.
  */
  freq = repeat.repeatFrequency;
  switch (repeat.repeatType) {
  case repeatNone:
    templateId = repeatNoneString;
    break;
    
  case repeatHourly:
    if (freq == 1)
      /* "Every hour" */
      templateId = everyHourRepeatString;
    else
      /* "Every [other | 2nd | 3rd...] hour" */
      templateId = hourlyRepeatString;
    break;
    
  case repeatDaily:
    if (freq == 1)
      /* "Every day" */
      templateId = everyDayRepeatString;
    else
      /* "Every [other | 2nd | 3rd...] day" */
      templateId = dailyRepeatString;
    break;
    
  case repeatWeekly:
    if (freq == 1)
      /* "Every week on [days of week]" */
      templateId = everyWeekRepeat1DayString;
    else
      templateId = weeklyRepeat1DayString;
    
    /*
    ** Generate offset to appropriate string id,
    ** based on # of days that we need to append.
    */
    for (i = 0; i < daysInWeek; i++) {
      if (repeat.repeatOn & (1 << i) ) 
	repeatOnCount++;
    }
    templateId += repeatOnCount - 1;
    break;

  case repeatMonthlyByDate:
    if (freq == 1)
      /* "The ^w ^d of every month" */
      templateId = everyMonthByDateRepeatString;
    else
      templateId = monthlyByDateRepeatString;
    break;
    
  case repeatMonthlyByDay:
    if (freq == 1)
      templateId = everyMonthByDayRepeatString;
    else
      templateId = monthlyByDayRepeatString;
    break;
    
  case repeatYearly:
    if (freq == 1)
      templateId = everyYearRepeatString;
    else
      templateId = yearlyRepeatString;
    break;
    
  default:
    ErrNonFatalDisplay("Unknown repeat type");
    break;
  }

  /*
  ** Allocate a block to hold the description and copy the template
  ** string into it.
  */
  resH = DmGetResource(strRsc, templateId);
  resP = MemHandleLock(resH);
  descH = MemHandleNew(MemPtrSize(resP));
  ASSERT(descH);
  descP = MemHandleLock(descH);
  StrCopy(descP, resP);
  MemHandleUnlock(resH);
  
  /* Substitute the month name string for the month name token. */
  resH = DmGetResource(strRsc, repeatMonthNamesString);
  resP = MemHandleLock(resH);
  for (i = 1; i < d.frm_date.month; i++)
    resP = StrChr(resP, spaceChr) + 1;
  len = StrChr(resP, spaceChr) - resP;
  descP = SubstituteStr(descP, monthNameToken, resP, len);
  MemHandleUnlock(resH);

  /* Substitute the day name string for the day name token. */
  if ((repeatOnCount == 1) || (repeat.repeatType == repeatMonthlyByDay))
    templateId = repeatFullDOWNamesString;
  else
    templateId = repeatShortDOWNamesString;
  
  resH = DmGetResource(strRsc, templateId);
  resP = MemHandleLock(resH);
  if (repeat.repeatType == repeatWeekly) {
    dayOfWeek = repeat.repeatStartOfWeek;
    repeatOn = repeat.repeatOn;
    saveResP = resP;
    while (StrStr (descP, dayNameToken)) {
      for (i = 0; i < daysInWeek; i++) {
	if (repeatOn & (1 << dayOfWeek)) {
	  repeatOn &= ~(1 << dayOfWeek);
	  break;
	}
	dayOfWeek = (dayOfWeek + 1 + daysInWeek) % daysInWeek;
      }
      resP = saveResP;
      for (i = 0; i < dayOfWeek; i++)
	resP = StrChr(resP, spaceChr) + 1;
      
      len = StrChr(resP, spaceChr) - resP;
      descP = SubstituteStr(descP, dayNameToken, resP, len);
    }
  } else {
    dayOfWeek = DayOfWeek (d.frm_date.month, d.frm_date.day,
			   d.frm_date.year/* + firstYear*/);
    for (i = 0; i < dayOfWeek; i++)
      resP = StrChr(resP, spaceChr) + 1;
    len = StrChr(resP, spaceChr) - resP;
    descP = SubstituteStr(descP, dayNameToken, resP, len);
  }
  MemHandleUnlock (resH);

  /*
  ** Substitute the repeat frequency string for the frequency token. Note that
  ** we do something special for 2nd (other), since the gender of 'other' changes
  ** for some languages, depending on whether the next word is day, month, week,
  ** or year.
  */
  if (freq == 2) {
    Char otherFreqName[16];
    const UInt16 index = repeat.repeatType - repeatNone;
    SysStringByIndex(freqOrdinal2ndStrlID, index, otherFreqName, sizeof(otherFreqName));
    descP = SubstituteStr(descP, frequenceToken, otherFreqName, StrLen(otherFreqName));
  } else {
    resH = DmGetResource(strRsc, freqOrdinalsString);
    resP = MemHandleLock(resH);
    for (i = 1; i < freq; i++)
      resP = StrChr(resP, spaceChr) + 1;
    len = StrChr(resP, spaceChr) - resP;
    descP = SubstituteStr(descP, frequenceToken, resP, len);
    MemHandleUnlock(resH);
  }

  /*
  ** Substitute the repeat week string (1st, 2nd, 3rd, 4th, or last)
  ** for the week ordinal token.
  */
  if (repeat.repeatType == repeatMonthlyByDay) {
    resH = DmGetResource(strRsc, weekOrdinalsString);
    resP = MemHandleLock(resH);
    for (i = 0; i < repeat.repeatOn / daysInWeek; i++)
      resP = StrChr (resP, spaceChr) + 1;
    len = StrChr(resP, spaceChr) - resP;
    descP = SubstituteStr(descP, weekOrdinalToken, resP, len);
    MemHandleUnlock(resH);
  } else {
    /* make sure the week ordinal token really doesn't appear */
    ErrNonFatalDisplayIf(StrStr(descP, weekOrdinalToken) != NULL, "week ordinal not substituted");
  }

  /*
  ** Substitute the repeat date string (1st, 2nd, ..., 31th) for the
  ** day ordinal token.
  */
  resH = DmGetResource(strRsc, dayOrdinalsString);
  resP = MemHandleLock(resH);
  for (i = 1; i < d.frm_date.day; i++)
    resP = StrChr(resP, spaceChr) + 1;
  len = StrChr(resP, spaceChr) - resP;
  descP = SubstituteStr(descP, dayOrdinalToken, resP, len);
  MemHandleUnlock(resH);

  /* Draw the description. */
  MemHandleUnlock(descH);
  FldFreeMemory(fld);
  FldSetTextHandle(fld, descH);
  FldDrawField(fld);
}
Exemple #10
0
/***********************************************************************
 *
 * FUNCTION:    RepeatSetUIValues
 *
 * DESCRIPTION: This routine sets the current repeat settings of the
 *              ui gadgets in the repeat dialog box
 *
 * PARAMETERS:  frm     - pointer to the Repeat Dialog
 *              repeatP - pointer to a RepeatInfoType structure.
 *
 * RETURNED:    nothing
 *
 ***********************************************************************/
void RepeatSetUIValues(FormType* frm, RepeatInfoType* repeatP) {
  UInt16 i;
  UInt16 id;
  UInt16 oldFreq;
  MemHandle freqH;
  Char* freqP = NULL;
  Boolean on = false;
  FieldType* fld = NULL;
  const Int8 startOfWeek = PrefGetPreference(prefWeekStartDay);

  /* Set the selection of the "repeat type" push button group. */
  id = repeatP->repeatType + RepeatNone;
  if (repeatP->repeatType > repeatMonthlyByDay)
    id--;
  FrmSetControlGroupSelection (frm, RepeatTypeGroup, id);


  /* Set the frequency field */
  if (repeatP->repeatType != repeatNone) {
    fld = GetObjectPointer(frm, RepeatFrequenceField);
    freqH = FldGetTextHandle(fld);
    if (freqH) {
      freqP = MemHandleLock(freqH);
      oldFreq = StrAToI(freqP);
    } else {
      freqH = MemHandleNew(maxFrequenceFieldLen);
      ASSERT(freqH);
      freqP = MemHandleLock(freqH);
      oldFreq = 0;
    }

    if (oldFreq != repeatP->repeatFrequency) {
      StrIToA(freqP, repeatP->repeatFrequency);
      FldSetTextHandle(fld, freqH);
      if (FrmVisible(frm)) {
	FldEraseField(fld);
	FldDrawField(fld);
      }
    }
    MemHandleUnlock (freqH);
  }

  /* Set the selection of the "repeat on" push button groups. */
  if (repeatP->repeatType == repeatWeekly) {
    /*
    ** If the appointment has a different start-day-of-week than
    ** the dialog-box's current start-day-of-week, rearrange the
    ** labels on the days-of-week push buttons.
    ** Note that this will only handle button-label shifts of one day.
    */
    if (startOfWeek != d.repeat_start_of_week) {
      const Char* sundayLabel = CtlGetLabel(GetObjectPointer(frm, RepeatDayOfWeek1PushButton));
      for (id = RepeatDayOfWeek1PushButton; id < RepeatDayOfWeek7PushButton; id++)
	CtlSetLabel(GetObjectPointer(frm, id), CtlGetLabel(GetObjectPointer(frm, id + 1)));

      CtlSetLabel(GetObjectPointer(frm, RepeatDayOfWeek7PushButton), sundayLabel);
      d.repeat_start_of_week = startOfWeek;
    }

    /* Turn on the push buttons for the days the appointment repeats on. */
    for (i = 0; i < daysInWeek; i++) {
      on = ((repeatP->repeatOn & (1 << i) ) != 0);
      id = RepeatDayOfWeek1PushButton +
	((i - startOfWeek + daysInWeek) % daysInWeek);
      CtlSetValue(GetObjectPointer(frm, id), on);
    }
  }

  /* Set the selection of the "repeat by" push button groups. */
  if (repeatP->repeatType == repeatMonthlyByDate)
    FrmSetControlGroupSelection(frm, RepeatByGroup, RepeatByDatePushButton);
  else
    FrmSetControlGroupSelection(frm, RepeatByGroup, RepeatByDayPushButton);
  
  /* Set the "end on" trigger label and popup list selection. */
  if (repeatP->repeatType != repeatNone)
    RepeatSetDateTrigger(repeatP->repeatEndDate);
}
Exemple #11
0
int scdir( )
{
	SC_READER_INFO *ri;
	SC_CARD_INFO *ci;

	FieldPtr fld;
	FormPtr frm;

	int scerr=0;

	BYTE sprintb[80];
	BYTE buffer[255];
	int resplen;
	int ret;
	int i;
	LONG l;
	BOOLEAN bool1;
	WORD w1, w2;

	if( scInit() ) return(SCDIR_LIB_ERROR);

    ri = scGeneralNewReader( readerType, 1 );
	if( ri==NULL ) {
		scEnd();
		return(SCDIR_LIB_ERROR);
	}

    ci = scGeneralNewCard( );
	if( ci==NULL ) {
		scGeneralFreeReader( &ri );
		scEnd();
		return(SCDIR_LIB_ERROR);
	};

	/* Init Reader */
	ret = scReaderInit( ri, "1" );
	if( ret!=SC_EXIT_OK ) { scerr=SCDIR_READER_ERROR; goto exit; }

	/* Get Card Status */
	ret = scReaderCardStatus( ri );
	if( ret!=SC_EXIT_OK ) { scerr=SCDIR_READER_ERROR; goto exit; }
	if( !(ri->status&SC_CARD_STATUS_PRESENT) )
	{ scerr=SCDIR_NO_CARD; goto exit; }

	/* Activate Card */
	ret = scReaderActivate( ri );
	if(ret!=SC_EXIT_OK) { scerr=SCDIR_READER_ERROR; goto exit; }

	/* Reset Card */
	ret= scReaderResetCard( ri, ci );
	if(ret!=SC_EXIT_OK) { scerr=SCDIR_CARD_ERROR; goto exit; }

	/* Get Card Type */
	ci->type=0;
	ret = scSmartcardGetCardType( ci );
	if( (ret!=SC_EXIT_OK) && (ret!=SC_EXIT_NOT_SUPPORTED) )
	{ scerr=SCDIR_CARD_ERROR; goto exit; }

	frm = FrmGetActiveForm();
	fld = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, dataFieldID)); 

	CleanField( fld );

	switch( ci->type )
	{
		case SC_CARD_MULTIFLEX_3K:
			myprintf0( "Card: Schlumberger Multiflex 3K\n" );
			break;
		case SC_CARD_MULTIFLEX_8K:
			myprintf0( "Card: Schlumberger Multiflex 8K\n" );
			break;
		case SC_CARD_MULTIFLEX_8K_DES:
			myprintf0( "Card: Schlumberger Multiflex 8K (with Full DES option)\n" );
			break;
		case SC_CARD_CRYPTOFLEX:
			myprintf0( "Card: Schlumberger Cryptoflex\n" );
			break;
		case SC_CARD_CRYPTOFLEX_DES:
			myprintf0( "Card: Schlumberger Cryptoflex (with Full DES option)\n" );
			break;
		case SC_CARD_CRYPTOFLEX_KEYGEN:
			myprintf0( "Card: Schlumberger Cryptoflex (with RSA key generation)\n" );
			break;
		case SC_CARD_CYBERFLEX:
			myprintf0( "Card: Schlumberger Cyberflex\n" );
			break;
		case SC_CARD_PAYFLEX_1K_USER:
			myprintf0( "Card: Schlumberger Payflex 1K User card\n" );
			break;
		case SC_CARD_PAYFLEX_1K_SAM:
			myprintf0( "Card: Schlumberger Payflex 1K SAM\n" );
			break;
		case SC_CARD_PAYFLEX_4K_USER:
			myprintf0( "Card: Schlumberger Payflex 4K User card\n" );
			break;
		case SC_CARD_PAYFLEX_4K_SAM:
			myprintf0( "Card: Schlumberger Payflex 4K SAM\n" );
			break;
		case SC_CARD_GPK4000_S:
			myprintf0( "Card: Gemplus GPK4000-s\n" );
			break;
		case SC_CARD_GPK4000_SP:
			myprintf0( "Card: Gemplus GPK4000-sp\n" );
			break;
		case SC_CARD_GPK4000_SDO:
			myprintf0( "Card: Gemplus GPK4000-sdo\n" );
			break;
		case SC_CARD_GPK2000_S:
			myprintf0( "Card: Gemplus GPK2000-s\n" );
			break;
		case SC_CARD_GPK2000_SP:
			myprintf0( "Card: Gemplus GPK2000-sp\n" );
			break;
		case SC_CARD_MPCOS_EMV_1B:
			myprintf0( "Card: Gemplus EMV (1-Byte data units)\n" );
			break;
		case SC_CARD_MPCOS_EMV_4B:
			myprintf0( "Card: Gemplus EMV (4-Byte data units)\n" );
			break;
		case SC_CARD_GELDKARTE:
			myprintf0( "Card: Geldkarte\n" );
			break;
		case SC_CARD_TCOS:
			myprintf0("Telesec TCOS 2 card\n");
			break;
		case SC_CARD_TCOS_44:
			myprintf0("Telesec TCOS 2 card (SLE44)\n");
			break;
		case SC_CARD_TCOS_66:
			myprintf0("Telesec TCOS 2 card (SLE66)\n");
			break;
		case SC_CARD_BASICCARD:
			myprintf0( "Card: BasicCard\n" );
			break;
		case SC_CARD_BASICCARD_COMP:
			myprintf0( "Card: Compact BasicCard\n" );
			break;
		case SC_CARD_BASICCARD_ENH:
			myprintf0( "Card: Enhanced BasicCard\n" );
			break;
		case SC_CARD_BRADESCO:
			myprintf0( "Card: Moeda Eletronica Bradesco\n" );
			break;
		case SC_CARD_GSMSIM:
			myprintf0( "Card: GSM SIM card.\n" );
			break;
		case SC_CARD_UNKNOWN:
		default:
			myprintf0( "Card: Unknown\n" );
	}

	FldDrawField(fld);

	printarray( fld, "ATR:", ci->atrlen, ci->atr );

	switch( ci->type )
	{
#ifdef WITH_MULTIFLEX
		case SC_CARD_MULTIFLEX_3K:
		case SC_CARD_MULTIFLEX_8K:
		case SC_CARD_MULTIFLEX_8K_DES:
			/* Select EF */
			ret = scMultiflexCmdSelectFile( ri, ci, 0x0002, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			/* Read */
			resplen=8;
			ret = scMultiflexCmdReadBinary( ri, ci, 0, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Serial number:", resplen, buffer );

			/* Select MF */
			ret = scMultiflexCmdSelectFile( ri, ci, 0x3F00, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			myprintf0("Master File (3F00):\n");

			i=(buffer[2]<<8)+buffer[3];
			myprintf1("  Free: %d Bytes\n",i);

			i=buffer[14];
			myprintf1("  Number of DFs: %d\n",i);

			i=buffer[15];
			myprintf1("  Number of EFs: %d\n",i);

			i=buffer[16];
			myprintf1("  Number of secret codes: %d\n",i);

			i=buffer[18];
			myprintf1("  CHV status: %d\n",i);

			i=buffer[19];
			myprintf1("  CHV unblocking key status: %d\n",i);

			FldDrawField(fld);

			break;
#endif /* WITH_MULTIFLEX */
#ifdef WITH_CRYPTOFLEX
		case SC_CARD_CRYPTOFLEX:
		case SC_CARD_CRYPTOFLEX_DES:
		case SC_CARD_CRYPTOFLEX_KEYGEN:
			/* Select EF */
			ret = scCryptoflexCmdSelectFile( ri, ci, 0x0002, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			/* Read */
			resplen=8;
			ret = scCryptoflexCmdReadBinary( ri, ci, 0, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Serial number:", resplen, buffer );

			/* Select MF */
			ret = scCryptoflexCmdSelectFile( ri, ci, 0x3F00, buffer,
				&resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			myprintf0("Master File (3F00):\n");

			i=(buffer[2]<<8)+buffer[3];
			myprintf1("  Free: %d Bytes\n",i);

			i=buffer[14];
			myprintf1("  Number of DFs: %d\n",i);

			i=buffer[15];
			myprintf1("  Number of EFs: %d\n",i);

			i=buffer[16];
			myprintf1("  Number of secret codes: %d\n",i);

			i=buffer[18];
			myprintf1("  CHV status: %d\n",i);

			i=buffer[19];
			myprintf1("  CHV unblocking key status: %d\n",i);

			FldDrawField(fld);

			break;
#endif /* WITH_CRYPTOFLEX */
#ifdef WITH_GPK4000
		case SC_CARD_GPK4000_S:
		case SC_CARD_GPK4000_SP:
		case SC_CARD_GPK4000_SDO:
			/* Chip Serial Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_CHIP_SN, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Chip serial number:", resplen, buffer );

			/* Card Serial Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_CARD_SN, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Card serial number:", resplen, buffer );

			/* Issuer Serial Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_ISSUER_SN, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Issuer serial number:", resplen, buffer );

			/* Issuer Reference Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_ISSUER_REF, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Issuer reference number:", resplen, buffer );

			/* Pre-issuing data */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_PRE_ISSUING, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Pre-issuing data:", resplen, buffer );

			break;
#endif /* WITH_GPK4000 */
#ifdef WITH_BASICCARD
		case SC_CARD_BASICCARD:
		case SC_CARD_BASICCARD_COMP:
		case SC_CARD_BASICCARD_ENH:
			/* State */
			ret = scBasiccardCmdGetState( ri, ci, buffer, &bool1 );
			testretsws(SCDIR_CARD_ERROR);

			switch( buffer[0] ) {
				case 0:
					myprintf0( "State: NEW\n" );
					break;
				case 1:
					myprintf0( "State: LOAD\n" );
					break;
				case 2:
					myprintf0( "State: TEST\n" );
					break;
				case 3:
					myprintf0( "State: RUN\n" );
					break;
				default:
					myprintf0(" State: Unknown\n" );
			}

			FldDrawField(fld);

			if( (buffer[0]==SC_BASICCARD_STATE_NEW) ||
				(buffer[0]==SC_BASICCARD_STATE_LOAD) ) {
				/* EEPROM Size */
				ret = scBasiccardCmdEepromSize( ri, ci, &w1, &w2 );
				testretsws(SCDIR_CARD_ERROR);

				myprintf0( "EEPROM:\n" );
				myprintf1( "  Start address: %lxh\n", (long)w1 );
				myprintf1( "  Size:          %d\n", w2 );
			}

			FldDrawField(fld);

			if( (buffer[0]==SC_BASICCARD_STATE_TEST) ||
				(buffer[0]==SC_BASICCARD_STATE_RUN) ) {
				/* Application ID */
				ret = scBasiccardCmdGetApplId( ri, ci, buffer, &resplen );
				testretsws(SCDIR_CARD_ERROR);

				printarray( fld, "Application ID:", resplen, buffer );
			}

			break;
#endif /* WITH_BASICCARD */
#ifdef WITH_TCOS
		case SC_CARD_TCOS:
		case SC_CARD_TCOS_44:
		case SC_CARD_TCOS_66:
			/* Select EF(GDO) */
			ret = scTcosCmdSelect( ri, ci, SC_TCOS_SELECT_ABS_PATH, 0,
				"\x2F\x02", 2, SC_TCOS_RDATA_FCI, buffer, &resplen );
			testreturn(SCDIR_CARD_ERROR);
			if( ci->sw[0]==0x90 ) {
				/* Read */
				resplen=0;
				ret = scTcosCmdReadBinary( ri, ci, 0, buffer, &resplen );
				testretsw(SCDIR_CARD_ERROR,0x90,0x00);

				/* Should interpret the BER structure. */
				printarray( fld, "Serial number:", buffer[1], (buffer+2) );
			}

			/* Select EF(DIR) */
			ret = scTcosCmdSelect( ri, ci, SC_TCOS_SELECT_ABS_PATH, 0,
				"\x2F\x00", 2, SC_TCOS_RDATA_FCI, buffer, &resplen );
			testreturn(SCDIR_CARD_ERROR);
			if( ci->sw[0]==0x90 ) {
				/* Read */
				resplen=0;
				ret = scTcosCmdReadBinary( ri, ci, 0, buffer, &resplen );
				testretsw(SCDIR_CARD_ERROR,0x90,0x00);

				/* Should interpret the BER structure. */
				printarray( fld, "AID:", buffer[1], (buffer+2) );
			}

			break;
#endif /* WITH_TCOS */
#ifdef WITH_GPK4000
		case SC_CARD_BRADESCO:
			/* Card Serial Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_CARD_SN, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Card serial number:", resplen, buffer );

			/* Issuer Serial Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_ISSUER_SN, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Issuer serial number:", resplen, buffer );

			/* Issuer Reference Number */
			ret = scGpk4000CmdGetInfo( ri, ci,
				SC_GPK4000_INFO_ISSUER_REF, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray( fld, "Issuer reference number:", resplen, buffer );

			/* Select DF */
			ret = scGpk4000CmdSelFil( ri, ci, SC_GPK4000_SELECT_DF,
				0x0200, NULL, 0, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			/* Read Binary */
			resplen = 6;
			ret = scGpk4000CmdRdBin( ri, ci, 0x8100, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			myprintf1("Account: %hd/", (buffer[0]<<8)+buffer[1] );
			myprintf1("%ld\n",
				((long)buffer[2]<<24)+((long)buffer[3]<<16)+((long)buffer[4]<<8)+buffer[5]);

			FldDrawField(fld);

			/* Read Binary */
			resplen = 3;
			ret = scGpk4000CmdRdBin( ri, ci, 0x8202, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			l=((long)buffer[0]<<16)+((long)buffer[1]<<8)+buffer[2];
			myprintf1("Balance: R$ %ld.", (long) l/100 );
			myprintf1("%hd", (short) (l/10)%10 );
			myprintf1("%hd\n", (short) l%10 );

			FldDrawField(fld);

			break;
#endif /* WITH_GPK4000 */
		default:
			break;
	}
#ifdef WITH_GELDKARTE
	if( ci->type==SC_CARD_GELDKARTE ) {
			/* EF_ID */
			/* Select MF */
			ret = scGeldkarteCmdSelectFile( ri, ci, 
				SC_GELDKARTE_SELECT_MF, 0, NULL, 0,
				SC_GELDKARTE_SELRESP_NONE, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);
			/* Select EF */
			ret = scGeldkarteCmdSelectFile( ri, ci, 
				SC_GELDKARTE_SELECT_EF, 0x0003, NULL, 0,
				SC_GELDKARTE_SELRESP_NONE, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);
			/* Read Record */
			resplen = 22;
			ret = scGeldkarteCmdReadRecord( ri, ci, 1,
				SC_GELDKARTE_READREC_SELECTED, 0, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			printarray2(fld,"Karteninstitut: ", 3, (buffer+1) );
			printarray2(fld,"Kartennummer: ", 5, (buffer+4) );
			myprintf0("Aktivierungsdatum: ");
			printbyte(buffer[14]);
			myprintf0("/");
			printbyte(buffer[13]);
			myprintf0("/");
			printbyte(buffer[12]);
			myprintf0("\nVerfallsdatum: ");
			printbyte(buffer[11]);
			myprintf0("/");
			printbyte(buffer[10]);
			myprintf0("\nLand: ");
			printbyte(buffer[15]);
			printbyte(buffer[16]);
			myprintf3("\nWaehrung: %c%c%c\n", buffer[17], buffer[18],
				buffer[19] );

			/* EF_VERSION */
			/* Select MF */
			ret = scGeldkarteCmdSelectFile( ri, ci, 
				SC_GELDKARTE_SELECT_MF, 0, NULL, 0,
				SC_GELDKARTE_SELRESP_NONE, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);
			/* Select EF */
			ret = scGeldkarteCmdSelectFile( ri, ci, 
				SC_GELDKARTE_SELECT_EF, 0x0017, NULL, 0,
				SC_GELDKARTE_SELRESP_NONE, buffer, &resplen );
			testreturn(SCDIR_CARD_ERROR);
			if( ci->sw[0]==0x90 ) {
				/* Read Record */
				resplen = 8;
				ret = scGeldkarteCmdReadRecord( ri, ci, 1,
					SC_GELDKARTE_READREC_SELECTED, 0, buffer, &resplen );
				testretsw(SCDIR_CARD_ERROR,0x90,0x00);
			
				printarray(fld,"Version:", 8, buffer );
			}

			/* Select Application */
			ret = scGeldkarteCmdSelectFile( ri, ci, 
				SC_GELDKARTE_SELECT_AID, 0,
				"\xD2\x76\x00\x00\x25\x45\x50\x01\x00", 9,
				SC_GELDKARTE_SELRESP_NONE, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			/* EF_BETRAG */
			/* Read Record */
			resplen = 9;
			ret = scGeldkarteCmdReadRecord( ri, ci, 1,
				SC_GELDKARTE_READREC_SFID, 0x18, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			myprintf0("Betrag: ");
			printbyte(buffer[0]);
			printbyte(buffer[1]);
			myprintf0(".");
			printbyte(buffer[2]);
			myprintf0("\nMax. Betrag: ");
			printbyte(buffer[3]);
			printbyte(buffer[4]);
			myprintf0(".");
			printbyte(buffer[5]);
			myprintf0("\nMax. Transaktion: ");
			printbyte(buffer[6]);
			printbyte(buffer[7]);
			myprintf0(".");
			printbyte(buffer[8]);
			myprintf0("\n");

			/* EF_BOeRSE */
			/* Read Record */
			resplen = 27;
			ret = scGeldkarteCmdReadRecord( ri, ci, 1,
				SC_GELDKARTE_READREC_SFID, 0x19, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			switch( buffer[0] ) {
				case 0x00:
					myprintf0("Kartentyp: Geldkarte\n");
					break;
				case 0xFF:
					myprintf0("Kartentyp: Wertkarte\n");
					break;
				default:
					myprintf0("Kartentyp: unknown\n");
					break;
			}
			myprintf0("Boersenverrechnungskonto:\n");
			printarray2(fld,"  BLZ:         ", 4, (buffer+1) );
			printarray2(fld,"  Kontonummer: ", 5, (buffer+5) );

			/* EF_LSEQ */
			/* Read Record */
			resplen = 2;
			ret = scGeldkarteCmdReadRecord( ri, ci, 1,
				SC_GELDKARTE_READREC_SFID, 0x1A, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			w1=((WORD)buffer[0]<<8)+buffer[1]-1;
			myprintf1("Ladevorgaenge: %hd\n", w1 );

			/* EF_LBEQ */
			/* Read Record */
			resplen = 2;
			ret = scGeldkarteCmdReadRecord( ri, ci, 1,
				SC_GELDKARTE_READREC_SFID, 0x1B, buffer, &resplen );
			testretsw(SCDIR_CARD_ERROR,0x90,0x00);

			w1=((WORD)buffer[0]<<8)+buffer[1]-1;
			myprintf1("Abbuchungen: %hd\n", w1 );

			/* EF_LLOG */
			myprintf0("Lade-/Entladevorgaenge:\n");
			for( i=1; i<4; i++ ) {
				/* Read Record */
				resplen = 33;
				ret = scGeldkarteCmdReadRecord( ri, ci, (BYTE)i,
					SC_GELDKARTE_READREC_SFID, 0x1C, buffer, &resplen );
				if( (ret!=SC_EXIT_OK) || (ci->sw[0]!=0x90) )
					break;

				if( buffer[0]==0x00 ) { break; }

				myprintf1("%d)\n", i );

				myprintf0("  Vorgang: ");
				switch( buffer[0] ) {
					case 0x01:
					case 0x03:
						myprintf0("Laden einleiten\n");
						break;
					case 0x05:
					case 0x07:
						myprintf0("Laden einleiten wiederholen\n");
						break;
					case 0x10:
					case 0x11:
					case 0x12:
					case 0x13:
					case 0x14:
					case 0x15:
					case 0x16:
					case 0x17:
						myprintf0("Laden\n");
						break;
					case 0x21:
						myprintf0("Entladen einleiten\n");
						break;
					case 0x25:
						myprintf0("Endladen einleiten wiederholen\n");
						break;
					case 0x30:
					case 0x31:
					case 0x34:
					case 0x35:
						myprintf0("Entladen\n");
						break;
					default:
						myprintf0("Unbekannt\n");
						break;
				}

				w1=((WORD)buffer[1]<<8)+buffer[2];
				myprintf1("  Ladevorgang: %hd\n", w1 );

				w1=((WORD)buffer[31]<<8)+buffer[32];
				myprintf1("  Abbuchungen: %hd\n", w1 );

				myprintf0("  Betrag: ");
				printbyte(buffer[4]);
				printbyte(buffer[5]);
				myprintf0(".");
				printbyte(buffer[6]);

				printarray2(fld,"\n  Terminal-ID:", 8, (buffer+13) );

				printarray2(fld,"  Terminal-Sequenznummer:", 3, (buffer+21) );

				if( buffer[26]!=0x00 ) {
					myprintf0("  Datum: ");
					printbyte(buffer[27]);
					myprintf0("/");
					printbyte(buffer[26]);
					myprintf0("/");
					printbyte(buffer[24]);
					printbyte(buffer[25]);
					myprintf0("\n");
				}

				if( !( (buffer[28]==0x00) && (buffer[29]==0x00) &&
					(buffer[30]==0x00) ) )  {
					myprintf0("  Uhrzeit: ");
					printbyte(buffer[28]);
					myprintf0(":");
					printbyte(buffer[29]);
					myprintf0(":");
					printbyte(buffer[30]);
					myprintf0("\n");
				}
			}

			/* EF_BLOG */
			myprintf0("Ab-/Rueckbuchungen:\n");
			for( i=1; i<16; i++ ) {
				/* Read Record */
				resplen = 37;
				ret = scGeldkarteCmdReadRecord( ri, ci, (BYTE)i,
					SC_GELDKARTE_READREC_SFID, 0x1D, buffer, &resplen );
				if( (ret!=SC_EXIT_OK) || (ci->sw[0]!=0x90) )
					break;

				if( buffer[0]==0x00 ) { break; }

				myprintf1("%d)\n", i );

				myprintf0("  Vorgang: ");
				switch( buffer[0] ) {
					case 0x50:
					case 0x51:
						myprintf0("Abbuchen\n");
						break;
					case 0x70:
					case 0x71:
						myprintf0("Rueckbuchen\n");
						break;
					default:
						myprintf0("Unbekannt\n");
						break;
				}

				w1=((WORD)buffer[1]<<8)+buffer[2];
				myprintf1("  Abbuchung: %hd\n", w1 );

				w1=((WORD)buffer[3]<<8)+buffer[4];
				myprintf1("  Ladevorgaenge: %hd\n", w1 );

				myprintf0("  Betrag: ");
				printbyte(buffer[5]);
				printbyte(buffer[6]);
				myprintf0(".");
				printbyte(buffer[7]);

				printarray2(fld,"\n  Haendlerkartennummer:", 10, (buffer+8) );

				myprintf1("  Haendlersequenznummer: %ld\n",
					((LONG)buffer[18]<<24)+((LONG)buffer[19]<<16)+
					((LONG)buffer[20]<<8)+buffer[21] );

				myprintf1("  Haendlersummensequenznummer: %ld\n",
					((LONG)buffer[22]<<24)+((LONG)buffer[23]<<16)+
					((LONG)buffer[24]<<8)+buffer[25] );

				if( buffer[31]!=0x00 ) {
					myprintf0("  Datum: ");
					printbyte(buffer[32]);
					myprintf0("/");
					printbyte(buffer[31]);
					myprintf0("/");
					printbyte(buffer[29]);
					printbyte(buffer[30]);
					myprintf0("\n");
				}

				if( !( (buffer[33]==0x00) && (buffer[34]==0x00) &&
					(buffer[35]==0x00) ) )  {
					myprintf0("  Uhrzeit: ");
					printbyte(buffer[33]);
					myprintf0(":");
					printbyte(buffer[34]);
					myprintf0(":");
					printbyte(buffer[35]);
					myprintf0("\n");
				}
			}

	}
#endif /* WITH_GELDKARTE */
#ifdef WITH_GSMSIM
	if( ci->type==SC_CARD_GSMSIM ) {
		/* ICCID */
		/* Select */
		ret = scGsmsimCmdSelect( ri, ci, 0x2FE2, buffer, &resplen );
		if( (ret==0) && (ci->sw[0]==0x90) && (ci->sw[1]==0x00) ) {
			/* Read Binary */
			resplen=10;
			ret = scGsmsimCmdReadBin( ri, ci, 0, buffer, &resplen );
			if( (ret==0) && (ci->sw[0]==0x90) && (ci->sw[1]==0x00) )
				printarray2( fld, "ICCID:", resplen, buffer );
		}
	}
#endif /* WITH_GSMSIM */

exit:
	scReaderDeactivate( ri );
	scReaderShutdown( ri );

	scGeneralFreeCard( &ci );
	scGeneralFreeReader( &ri );

	scEnd();

	return(scerr);
}
Exemple #12
0
Boolean Ln2SlFormHandleEvent(EventPtr e)
{
    Boolean handled = false;
    DateType dt = {0, 0};
    FormPtr frm = FrmGetFormPtr(Ln2SlForm);

    switch (e->eType) {
    case frmOpenEvent:
        if(gbVgaExists)
       		VgaFormModify(frm, vgaFormModify160To240);

        DateSecondsToDate(TimGetSeconds(), &dt);
        DateToAsciiLong(dt.month, dt.day, dt.year + 1904,
					gPrefdfmts, gAppErrStr);
        SetFieldTextFromStr(Ln2SlFormInput, gAppErrStr);

        FrmDrawForm(frm);
        handled = true;
        break;

    case ctlSelectEvent:
        switch(e->data.ctlSelect.controlID) {
        case Ln2SlFormOk:
            FrmReturnToForm(0);

            handled = true;
            break;

        case Ln2SlFormConvert:
        {
            HappyDaysFlag dummy;
            Int16 year, month, day;
            Char* input;
            int ret;
            
            input = FldGetTextPtr(GetObjectPointer(frm, Ln2SlFormInput));

            if ((ret = AnalysisHappyDays(input, &dummy,
                                         &year, &month, &day))) {
                int syear, smonth, sday;
                int leapyes
                    = CtlGetValue(GetObjectPointer(frm, Ln2SlFormInputLeap));

                ret = lunarL2S(lunarRefNum, year, month, day, leapyes, &syear, &smonth, &sday);
                if (ret == errNone) {
                    Char temp[15];
                    SysCopyStringResource(temp, DayOfWeek(smonth, sday, syear) + SunString);

                    DateToAsciiLong(smonth, sday, syear, gPrefdfmts, gAppErrStr);
                    StrNCat(gAppErrStr, " [", AppErrStrLen);
                    StrNCat(gAppErrStr, temp, AppErrStrLen);
                    StrNCat(gAppErrStr, "]", AppErrStrLen);

                    FldDrawField(SetFieldTextFromStr(Ln2SlFormResult, gAppErrStr));
                }
                else DisplayInvalidDateErrorString(Ln2SlFormResult);
            }
            else {
                DisplayInvalidDateErrorString(Ln2SlFormResult);
            }
            
            handled = true;
            break;
        }
        
        default:
            break;
                
        }
        break;

    case menuEvent:
        handled = TextMenuHandleEvent(e->data.menu.itemID, Ln2SlFormInput);
        break;

    default:
        break;
    }

    return handled;
}
Exemple #13
0
static void DisplayInvalidDateErrorString(UInt16 id)
{
    FldDrawField(ClearFieldText(Ln2SlFormResult));
    SysCopyStringResource(gAppErrStr, InvalidDateString);
    FrmCustomAlert(ErrorAlert, gAppErrStr, " ", " ");
}
Exemple #14
0
Boolean Sl2LnFormHandleEvent(EventPtr e)
{
    Boolean handled = false;
    DateType dt = {0, 0};
    FormPtr frm = FrmGetFormPtr(Sl2LnForm);

    switch (e->eType) {
    case frmOpenEvent:
        if(gbVgaExists)
       		VgaFormModify(frm, vgaFormModify160To240);

        DateSecondsToDate(TimGetSeconds(), &dt);

        DateToAsciiLong(dt.month, dt.day, dt.year + 1904,
                        gPrefdfmts, gAppErrStr);

        SetFieldTextFromStr(Sl2LnFormInput, gAppErrStr);

        FrmDrawForm(frm);
        handled = true;
        break;

    case ctlSelectEvent:
        switch(e->data.ctlSelect.controlID) {
        case Sl2LnFormConvert:
        {
            HappyDaysFlag dummy;
            Int16 year, month, day;
            int lyear, lmonth, lday;
            Char* input;
            int ret = false;

            input = FldGetTextPtr(GetObjectPointer(frm, Sl2LnFormInput));
            if ((ret = AnalysisHappyDays(input, &dummy,
                                         &year, &month, &day))) {
                int leapyes = 0;

                ret = lunarS2L(lunarRefNum, year, month, day, &lyear, &lmonth, &lday, &leapyes);
                if (ret == errNone) {
                    if (leapyes) {
                        StrCopy(gAppErrStr, "#)");
                    }
                    else {
                        StrCopy(gAppErrStr, "-)");
                    }
                    DateToAsciiLong(lmonth, lday, lyear, gPrefdfmts, &gAppErrStr[2]);
                          
                    FldDrawField(SetFieldTextFromStr(Sl2LnFormResult,
                                                     gAppErrStr));
                }
                else DisplayInvalidDateErrorString(Sl2LnFormResult);

            }
            else DisplayInvalidDateErrorString(Sl2LnFormResult);

            handled = true;
            break;
        }

        case Sl2LnFormOk:
            FrmReturnToForm(0);

            handled = true;
            break;
            
        default:
            break;
                
        }
        break;

    case menuEvent:
        handled = TextMenuHandleEvent(e->data.menu.itemID, Sl2LnFormInput);
        break;

    default:
        break;
    }

    return handled;
}
/***********************************************************************
 *
 * FUNCTION:    MainFormHandleEvent
 *
 * DESCRIPTION: This routine is the event handler for the 
 *              "MainForm" of this application.
 *
 * PARAMETERS:  eventP  - a pointer to an EventType structure
 *
 * RETURNED:    true if the event has handle and should not be passed
 *              to a higher level handler.
 *
 * REVISION HISTORY:
 *
 *
 ***********************************************************************/
static Boolean MainFormHandleEvent(EventPtr eventP)
{
	Boolean handled = false;
	FormPtr frmP;
    char result[240];
    int rc;
    FieldPtr			fld;


	switch (eventP->eType) 
		{
		case menuEvent:
			return MainFormDoCommand(eventP->data.menu.itemID);

		case frmOpenEvent:
			frmP = FrmGetActiveForm();
			MainFormInit( frmP);
			FrmDrawForm ( frmP);
			handled = true;
			break;
			
		case frmUpdateEvent:
			// To do any custom drawing here, first call FrmDrawForm(), then do your
			// drawing, and then set handled to true.
			break;

/*
	case ctlEnterEvent:
		switch (eventP->data.ctlEnter.controlID)
		{
			case MainRunButton:
			getQuote("IBM",result);
				break;
		}
		break;
*/		

	case ctlSelectEvent:
		switch (eventP->data.ctlSelect.controlID)
		{
			case MainRunButton:
			rc = getQuote("IBM",result);
//			if (rc==SOAP_OK)
//  			{
				fld = GetObjectPtr (MainResultField);
				FldSetTextPtr( fld, result);
				FldDrawField(fld);
				FldRecalculateField(fld,true);
//			 }
//			  else
//			    FrmAlert(Soap_errorAlert);

			
			break;
		}
		break;

		default:
			break;
		
		}
	
	return handled;
}