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; }
/*********************************************************************** * * 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); }
/*--------------------------------------------------------------------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); }
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); }
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); } }
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); }
/* 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; }
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); }
/*********************************************************************** * * 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); }
/*********************************************************************** * * 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); }
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); }
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; }
static void DisplayInvalidDateErrorString(UInt16 id) { FldDrawField(ClearFieldText(Ln2SlFormResult)); SysCopyStringResource(gAppErrStr, InvalidDateString); FrmCustomAlert(ErrorAlert, gAppErrStr, " ", " "); }
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; }