?? recordutilities.c
字號:
#include "main.h"/* =============================================================================== Author: Hammer, May 2002, For www.cprogramming.com/cboard/ File: RecordUtilities.c Contents: rec_Compare rec_CompareID rec_CompareStatus rec_PrintShort rec_PrintLong rec_SearchAndPrint ===============================================================================*//* =============================================================================== Function: rec_Compare Args: 2 pointers to Record struct's to be compared Returns: <0 if p1 < p2 >0 if p1 > p2 0 if p1 = p2 Purpose: Compares 2 Record struct's by the element specified in gl_AppCfg.SortField =============================================================================== */int rec_Compare(const struct Record *rec1, const struct Record *rec2){ char Fields[2][MAXL_FIELD+1]; int len[2], i, j; /* * Set up strings for case insensative compare */ if (gl_AppCfg.SortField == RECF_ID) return ((rec1->ID > rec2->ID)); strncpy (Fields[0], rec_GetFieldPointer(rec1, gl_AppCfg.SortField), MAXL_FIELD+1); strncpy (Fields[1], rec_GetFieldPointer(rec2, gl_AppCfg.SortField), MAXL_FIELD+1); len[0] = strlen(Fields[0]); len[1] = strlen(Fields[1]); for (i = 0; i < 2; i++) { for (j = 0; j < len[i]; j++) { if (isupper(Fields[i][j])) Fields[i][j] = tolower(Fields[i][j]); } } return (strcmp(Fields[0], Fields[1]));}/* =============================================================================== Function: rec_CompareID Args: Pointer to Record struct's to be compared with ID Returns: >0 if match 0 if no match Purpose: Compares 2 Record structs by the ID element =============================================================================== */int rec_CompareID(const struct Record *rec, void *ptr){ int *idptr = ptr; if (rec->ID == *idptr) return (1); else return (0);}/* =============================================================================== Function: rec_CompareStatus Args: Pointer to Record struct's to be compared with Status field Returns: >0 if match 0 if no match Purpose: Compares 2 Record structs by the Status element =============================================================================== */int rec_CompareStatus(const struct Record *rec, void *ptr){ unsigned char *statusptr = ptr; if (rec->Status & *statusptr) /* bitwise comparison */ return (1); else return (0);}/* =============================================================================== Function: rec_PrintShort Args: A pointer to a Record struct to be printed Returns: Nothing Purpose: Print only a couple of fields from a single Record struct =============================================================================== */void rec_PrintShort(void *ptr){ struct Record *rec = ptr; printf("%s%3d> %-20s %s %s\n",(rec->Status & ST_DELETED)?"Deleted>":"", rec->ID, rec->Name, rec->PhoneNum1, rec->EmailAddr);}/* =============================================================================== Function: rec_PrintLong Args: A pointer to a Record struct to be printed Returns: Nothing Purpose: Prints all fields from a single Record struct =============================================================================== */void rec_PrintLong(void *ptr){ struct Record *rec = ptr; printf ("Record ID:\t%d %s\n", rec->ID, (rec->Status & ST_DELETED)?"(Deleted)":""); printf ("Name:\t\t%s\n", rec->Name); printf ("1st Phone:\t%s\n", rec->PhoneNum1); printf ("2nd Phone:\t%s\n", rec->PhoneNum2); printf ("3rd Phone:\t%s\n", rec->PhoneNum3); printf ("Address:\t%s\n", rec->AddrLine1); if (rec->AddrLine2[0] != '\0') printf (" \t%s\n", rec->AddrLine2); if (rec->AddrLine3[0] != '\0') printf (" \t%s\n", rec->AddrLine3); if (rec->AddrLine4[0] != '\0') printf (" \t%s\n", rec->AddrLine4); if (rec->AddrLine5[0] != '\0') printf (" \t%s\n", rec->AddrLine5); printf ("Email Addr:\t%s\n", rec->EmailAddr); printf ("Misc Data:\t%s\n", rec->Misc);}/* =============================================================================== Function: rec_SearchAndPrint Args: A pointer to a Record struct to be printed (if criteria meet) Returns: Nothing Purpose: Called during the list traversal process, this function will search a specified field for the search string stored in the global struct gl_AppData.SearchText =============================================================================== */void rec_SearchAndPrint(void *ptr){ struct Record *rec = ptr; char *sptr, *tmp; int len, i; char rectext[MAXL_FIELD+1]; if (gl_AppData.SearchField == RECF_DUMMY) sptr = NULL; else sptr = rec_GetFieldPointer(rec, gl_AppData.SearchField); if (sptr) { strncpy(rectext, sptr, MAXL_FIELD+1); len = strlen(rectext); /* Convert data to lower case to allow for case insensative search */ for (i = 0, tmp = rectext; i < len; i++, tmp++) {if (isupper(*tmp)) *tmp = tolower(*tmp);} if (!strstr(rectext, gl_AppData.SearchText)) return; } rec_PrintShort(ptr); gl_AppData.LinesDisplayedSoFar++; if (gl_AppData.LinesDisplayedSoFar == gl_AppCfg.LinesPerDisplay) { io_EnterToContinue(); gl_AppData.LinesDisplayedSoFar = 0; }}/* =============================================================================== Function: rec_GetFieldPointer Args: A pointer to a Record struct, and a field type indicator Returns: A char pointer to the start of the field specified by the type indicator Purpose: Quick way to obtain string from the Record struct. =============================================================================== */char *rec_GetFieldPointer(const struct Record *rec, enum RECORD_FIELDS WhichField){ char *sptr; switch (WhichField) { case RECF_NAME: sptr = (char *)rec->Name; break; case RECF_PHONENUM1: sptr = (char *)rec->PhoneNum1; break; case RECF_PHONENUM2: sptr = (char *)rec->PhoneNum2; break; case RECF_PHONENUM3: sptr = (char *)rec->PhoneNum3; break; case RECF_ADDRLINE1: sptr = (char *)rec->AddrLine1; break; case RECF_ADDRLINE2: sptr = (char *)rec->AddrLine2; break; case RECF_ADDRLINE3: sptr = (char *)rec->AddrLine3; break; case RECF_ADDRLINE4: sptr = (char *)rec->AddrLine4; break; case RECF_ADDRLINE5: sptr = (char *)rec->AddrLine5; break; case RECF_EMAILADDR: sptr = (char *)rec->EmailAddr; break; case RECF_MISC: sptr = (char *)rec->Misc; break; default: sptr = (char *)rec->Name; break; } return (sptr);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -