[Libpst-devel] Re: PATCH: readpst.c code reorganisation

Arne Ahrend aahrend at web.de
Sun Feb 19 19:40:45 UTC 2006


On Sun, 19 Feb 2006 20:33:56 +0100
Arne Ahrend <aahrend at web.de> wrote:

Sixth patch

> This is a series of patches succesively taking chunks of code out of 
> the huge main() function in readpst.c and into separate functions.
> 
> No functionality change, but improvement of readability.
> 
> Arne

--- readpst.c-05	2006-02-19 20:04:36.000000000 +0100
+++ readpst.c	2006-02-19 20:04:43.000000000 +0100
@@ -92,6 +92,7 @@ void write_fabricated_header(FILE* f_out
 			     char boundary[], int mode, char c_time[], time_t em_time);
 void write_normal_email(FILE* f_output, char f_name[], pst_item* item, int mode, pst_file* pst);
 void create_enter_dir(struct file_ll* f, char file_as[], int mode, int overwrite);
+void write_vcard(FILE* f_output, pst_item_contact* contact, char comment[]);
 // }}}1
 // Global Variables {{{1
 char *prog_name; 
@@ -374,109 +375,9 @@ int main(int argc, char** argv) {
 	if (item->contact == NULL) { // this is an incorrect situation. Inform user
 	  DEBUG_MAIN(("main: ERROR. This contact has not been fully parsed. one of the pre-requisties is NULL\n"));
 	} else {
-	  if (contact_mode == CMODE_VCARD) {
-	    // the specification I am following is (hopefully) RFC2426 vCard Mime Directory Profile
-	    fprintf(f->output, "BEGIN:VCARD\n");
-	    fprintf(f->output, "FN:%s\n", rfc2426_escape(item->contact->fullname));
-	    fprintf(f->output, "N:%s;%s;%s;%s;%s\n",
-		    rfc2426_escape((item->contact->surname==NULL?"":item->contact->surname)),
-		    rfc2426_escape((item->contact->first_name==NULL?"":item->contact->first_name)),
-		    rfc2426_escape((item->contact->middle_name==NULL?"":item->contact->middle_name)),
-		    rfc2426_escape((item->contact->display_name_prefix==NULL?"":item->contact->display_name_prefix)),
-		    rfc2426_escape((item->contact->suffix==NULL?"":item->contact->suffix)));
-	    if (item->contact->nickname != NULL)
-	      fprintf(f->output, "NICKNAME:%s\n", rfc2426_escape(item->contact->nickname));
-	    if (item->contact->address1 != NULL)
-	      fprintf(f->output, "EMAIL:%s\n", rfc2426_escape(item->contact->address1));
-	    if (item->contact->address2 != NULL)
-	      fprintf(f->output, "EMAIL:%s\n", rfc2426_escape(item->contact->address2));
-	    if (item->contact->address3 != NULL)
-	      fprintf(f->output, "EMAIL:%s\n", rfc2426_escape(item->contact->address3));
-	    if (item->contact->birthday != NULL)
-	      fprintf(f->output, "BDAY:%s\n", rfc2425_datetime_format(item->contact->birthday));
-	    if (item->contact->home_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=home:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->home_po_box!=NULL?item->contact->home_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->home_street!=NULL?item->contact->home_street:"")),
-		      rfc2426_escape((item->contact->home_city!=NULL?item->contact->home_city:"")),
-		      rfc2426_escape((item->contact->home_state!=NULL?item->contact->home_state:"")),
-		      rfc2426_escape((item->contact->home_postal_code!=NULL?item->contact->home_postal_code:"")),
-		      rfc2426_escape((item->contact->home_country!=NULL?item->contact->home_country:"")));
-	      fprintf(f->output, "LABEL;TYPE=home:%s\n", rfc2426_escape(item->contact->home_address));
-	    }
-	    if (item->contact->business_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=work:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->business_po_box!=NULL?item->contact->business_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->business_street!=NULL?item->contact->business_street:"")),
-		      rfc2426_escape((item->contact->business_city!=NULL?item->contact->business_city:"")),
-		      rfc2426_escape((item->contact->business_state!=NULL?item->contact->business_state:"")),
-		      rfc2426_escape((item->contact->business_postal_code!=NULL?item->contact->business_postal_code:"")),
-		      rfc2426_escape((item->contact->business_country!=NULL?item->contact->business_country:"")));
-	      fprintf(f->output, "LABEL;TYPE=work:%s\n", rfc2426_escape(item->contact->business_address));
-	    }
-	    if (item->contact->other_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=postal:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->other_po_box!=NULL?item->contact->business_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->other_street!=NULL?item->contact->other_street:"")),
-		      rfc2426_escape((item->contact->other_city!=NULL?item->contact->other_city:"")),
-		      rfc2426_escape((item->contact->other_state!=NULL?item->contact->other_state:"")),
-		      rfc2426_escape((item->contact->other_postal_code!=NULL?item->contact->other_postal_code:"")),
-		      rfc2426_escape((item->contact->other_country!=NULL?item->contact->other_country:"")));
-	      fprintf(f->output, "ADR;TYPE=postal:%s\n", rfc2426_escape(item->contact->other_address));
-	    }
-	    if (item->contact->business_fax != NULL)
-	      fprintf(f->output, "TEL;TYPE=work,fax:%s\n", rfc2426_escape(item->contact->business_fax));
-	    if (item->contact->business_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=work,voice:%s\n", rfc2426_escape(item->contact->business_phone));
-	    if (item->contact->business_phone2 != NULL)
-	      fprintf(f->output, "TEL;TYPE=work,voice:%s\n", rfc2426_escape(item->contact->business_phone2));
-	    if (item->contact->car_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=car,voice:%s\n", rfc2426_escape(item->contact->car_phone));
-	    if (item->contact->home_fax != NULL)
-	      fprintf(f->output, "TEL;TYPE=home,fax:%s\n", rfc2426_escape(item->contact->home_fax));
-	    if (item->contact->home_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=home,voice:%s\n", rfc2426_escape(item->contact->home_phone));
-	    if (item->contact->home_phone2 != NULL)
-	      fprintf(f->output, "TEL;TYPE=home,voice:%s\n", rfc2426_escape(item->contact->home_phone2));
-	    if (item->contact->isdn_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=isdn:%s\n", rfc2426_escape(item->contact->isdn_phone));
-	    if (item->contact->mobile_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=cell,voice:%s\n", rfc2426_escape(item->contact->mobile_phone));
-	    if (item->contact->other_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=msg:%s\n", rfc2426_escape(item->contact->other_phone));
-	    if (item->contact->pager_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=pager:%s\n", rfc2426_escape(item->contact->pager_phone));
-	    if (item->contact->primary_fax != NULL)
-	      fprintf(f->output, "TEL;TYPE=fax,pref:%s\n", rfc2426_escape(item->contact->primary_fax));
-	    if (item->contact->primary_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=phone,pref:%s\n", rfc2426_escape(item->contact->primary_phone));
-	    if (item->contact->radio_phone != NULL)
-	      fprintf(f->output, "TEL;TYPE=pcs:%s\n", rfc2426_escape(item->contact->radio_phone));
-	    if (item->contact->telex != NULL)
-	      fprintf(f->output, "TEL;TYPE=bbs:%s\n", rfc2426_escape(item->contact->telex));
-	    if (item->contact->job_title != NULL)
-	      fprintf(f->output, "TITLE:%s\n", rfc2426_escape(item->contact->job_title));
-	    if (item->contact->profession != NULL)
-	      fprintf(f->output, "ROLE:%s\n", rfc2426_escape(item->contact->profession));
-	    if (item->contact->assistant_name != NULL || item->contact->assistant_phone != NULL) {
-	      fprintf(f->output, "AGENT:BEGIN:VCARD\\n");
-	      if (item->contact->assistant_name != NULL)
-		fprintf(f->output, "FN:%s\\n", rfc2426_escape(item->contact->assistant_name));
-	      if (item->contact->assistant_phone != NULL)
-		fprintf(f->output, "TEL:%s\\n", rfc2426_escape(item->contact->assistant_phone));
-	      fprintf(f->output, "END:VCARD\\n\n");
-	    }
-	    if (item->contact->company_name != NULL)
-	      fprintf(f->output, "ORG:%s\n", rfc2426_escape(item->contact->company_name));
-	    if (item->comment != NULL)
-	      fprintf(f->output, "NOTE:%s\n", rfc2426_escape(item->comment));
-		      
-	    fprintf(f->output, "VERSION: 3.0\n");
-	    fprintf(f->output, "END:VCARD\n\n");
-	  } else {
+	  if (contact_mode == CMODE_VCARD)
+	    write_vcard(f->output, item->contact, item->comment);
+	  else {
 	    fprintf(f->output, "%s <%s>\n", item->contact->fullname, item->contact->address1);
 	  }
         }
@@ -1483,3 +1384,108 @@ void create_enter_dir(struct file_ll* f,
 		}
 	}
 }
+
+void write_vcard(FILE* f_output, pst_item_contact* contact, char comment[])
+{
+	// the specification I am following is (hopefully) RFC2426 vCard Mime Directory Profile
+	fprintf(f_output, "BEGIN:VCARD\n");
+	fprintf(f_output, "FN:%s\n", rfc2426_escape(contact->fullname));
+	fprintf(f_output, "N:%s;%s;%s;%s;%s\n",
+		rfc2426_escape((contact->surname==NULL?"":contact->surname)),
+		rfc2426_escape((contact->first_name==NULL?"":contact->first_name)),
+		rfc2426_escape((contact->middle_name==NULL?"":contact->middle_name)),
+		rfc2426_escape((contact->display_name_prefix==NULL?"":contact->display_name_prefix)),
+		rfc2426_escape((contact->suffix==NULL?"":contact->suffix)));
+	if (contact->nickname != NULL)
+		fprintf(f_output, "NICKNAME:%s\n", rfc2426_escape(contact->nickname));
+	if (contact->address1 != NULL)
+		fprintf(f_output, "EMAIL:%s\n", rfc2426_escape(contact->address1));
+	if (contact->address2 != NULL)
+		fprintf(f_output, "EMAIL:%s\n", rfc2426_escape(contact->address2));
+	if (contact->address3 != NULL)
+		fprintf(f_output, "EMAIL:%s\n", rfc2426_escape(contact->address3));
+	if (contact->birthday != NULL)
+		fprintf(f_output, "BDAY:%s\n", rfc2425_datetime_format(contact->birthday));
+	if (contact->home_address != NULL) {
+		fprintf(f_output, "ADR;TYPE=home:%s;%s;%s;%s;%s;%s;%s\n",
+			rfc2426_escape((contact->home_po_box!=NULL?contact->home_po_box:"")),
+			"", // extended Address
+			rfc2426_escape((contact->home_street!=NULL?contact->home_street:"")),
+			rfc2426_escape((contact->home_city!=NULL?contact->home_city:"")),
+			rfc2426_escape((contact->home_state!=NULL?contact->home_state:"")),
+			rfc2426_escape((contact->home_postal_code!=NULL?contact->home_postal_code:"")),
+			rfc2426_escape((contact->home_country!=NULL?contact->home_country:"")));
+		fprintf(f_output, "LABEL;TYPE=home:%s\n", rfc2426_escape(contact->home_address));
+	}
+	if (contact->business_address != NULL) {
+		fprintf(f_output, "ADR;TYPE=work:%s;%s;%s;%s;%s;%s;%s\n",
+			rfc2426_escape((contact->business_po_box!=NULL?contact->business_po_box:"")),
+			"", // extended Address
+			rfc2426_escape((contact->business_street!=NULL?contact->business_street:"")),
+			rfc2426_escape((contact->business_city!=NULL?contact->business_city:"")),
+			rfc2426_escape((contact->business_state!=NULL?contact->business_state:"")),
+			rfc2426_escape((contact->business_postal_code!=NULL?contact->business_postal_code:"")),
+			rfc2426_escape((contact->business_country!=NULL?contact->business_country:"")));
+		fprintf(f_output, "LABEL;TYPE=work:%s\n", rfc2426_escape(contact->business_address));
+	}
+	if (contact->other_address != NULL) {
+		fprintf(f_output, "ADR;TYPE=postal:%s;%s;%s;%s;%s;%s;%s\n",
+			rfc2426_escape((contact->other_po_box!=NULL?contact->business_po_box:"")),
+			"", // extended Address
+			rfc2426_escape((contact->other_street!=NULL?contact->other_street:"")),
+			rfc2426_escape((contact->other_city!=NULL?contact->other_city:"")),
+			rfc2426_escape((contact->other_state!=NULL?contact->other_state:"")),
+			rfc2426_escape((contact->other_postal_code!=NULL?contact->other_postal_code:"")),
+			rfc2426_escape((contact->other_country!=NULL?contact->other_country:"")));
+		fprintf(f_output, "ADR;TYPE=postal:%s\n", rfc2426_escape(contact->other_address));
+	}
+	if (contact->business_fax != NULL)
+		fprintf(f_output, "TEL;TYPE=work,fax:%s\n", rfc2426_escape(contact->business_fax));
+	if (contact->business_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=work,voice:%s\n", rfc2426_escape(contact->business_phone));
+	if (contact->business_phone2 != NULL)
+		fprintf(f_output, "TEL;TYPE=work,voice:%s\n", rfc2426_escape(contact->business_phone2));
+	if (contact->car_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=car,voice:%s\n", rfc2426_escape(contact->car_phone));
+	if (contact->home_fax != NULL)
+		fprintf(f_output, "TEL;TYPE=home,fax:%s\n", rfc2426_escape(contact->home_fax));
+	if (contact->home_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=home,voice:%s\n", rfc2426_escape(contact->home_phone));
+	if (contact->home_phone2 != NULL)
+		fprintf(f_output, "TEL;TYPE=home,voice:%s\n", rfc2426_escape(contact->home_phone2));
+	if (contact->isdn_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=isdn:%s\n", rfc2426_escape(contact->isdn_phone));
+	if (contact->mobile_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=cell,voice:%s\n", rfc2426_escape(contact->mobile_phone));
+	if (contact->other_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=msg:%s\n", rfc2426_escape(contact->other_phone));
+	if (contact->pager_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=pager:%s\n", rfc2426_escape(contact->pager_phone));
+	if (contact->primary_fax != NULL)
+		fprintf(f_output, "TEL;TYPE=fax,pref:%s\n", rfc2426_escape(contact->primary_fax));
+	if (contact->primary_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=phone,pref:%s\n", rfc2426_escape(contact->primary_phone));
+	if (contact->radio_phone != NULL)
+		fprintf(f_output, "TEL;TYPE=pcs:%s\n", rfc2426_escape(contact->radio_phone));
+	if (contact->telex != NULL)
+		fprintf(f_output, "TEL;TYPE=bbs:%s\n", rfc2426_escape(contact->telex));
+	if (contact->job_title != NULL)
+		fprintf(f_output, "TITLE:%s\n", rfc2426_escape(contact->job_title));
+	if (contact->profession != NULL)
+		fprintf(f_output, "ROLE:%s\n", rfc2426_escape(contact->profession));
+	if (contact->assistant_name != NULL || contact->assistant_phone != NULL) {
+		fprintf(f_output, "AGENT:BEGIN:VCARD\\n");
+		if (contact->assistant_name != NULL)
+			fprintf(f_output, "FN:%s\\n", rfc2426_escape(contact->assistant_name));
+		if (contact->assistant_phone != NULL)
+			fprintf(f_output, "TEL:%s\\n", rfc2426_escape(contact->assistant_phone));
+		fprintf(f_output, "END:VCARD\\n\n");
+	}
+	if (contact->company_name != NULL)
+		fprintf(f_output, "ORG:%s\n", rfc2426_escape(contact->company_name));
+	if (comment != NULL)
+		fprintf(f_output, "NOTE:%s\n", rfc2426_escape(comment));
+		      
+	fprintf(f_output, "VERSION: 3.0\n");
+	fprintf(f_output, "END:VCARD\n\n");
+}





More information about the Libpst-devel mailing list