testsuite.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.
  3. ** See COPYING for distribution information.
  4. */
  5. #include "rfc822.h"
  6. #include <stdio.h>
  7. static void print_func(char c, void *p)
  8. {
  9. p=p;
  10. putchar(c);
  11. }
  12. static void print_separator(const char *s, void *p)
  13. {
  14. p=p;
  15. printf("%s", s);
  16. }
  17. static struct rfc822t *tokenize(const char *p)
  18. {
  19. struct rfc822t *tp;
  20. int i;
  21. char buf[2];
  22. printf("Tokenize: %sn", p);
  23. tp=rfc822t_alloc(p, NULL);
  24. if (!tp) exit(0);
  25. buf[1]=0;
  26. for (i=0; i<tp->ntokens; i++)
  27. {
  28. buf[0]=tp->tokens[i].token;
  29. if (buf[0] == '' || buf[0] == '"' || buf[0] == '(')
  30. {
  31. printf("%s: ", buf[0] == '"' ? "Quote":
  32. buf[0] == '(' ? "Comment":"Atom");
  33. fwrite(tp->tokens[i].ptr, tp->tokens[i].len, 1, stdout);
  34. printf("n");
  35. }
  36. else printf("Token: %sn", buf[0] ? buf:"atom");
  37. }
  38. return (tp);
  39. }
  40. static struct rfc822a *doaddr(struct rfc822t *t)
  41. {
  42. struct rfc822a *a=rfc822a_alloc(t);
  43. if (!a) exit(0);
  44. printf("----n");
  45. rfc822_print(a, print_func, print_separator, NULL);
  46. printf("n");
  47. rfc822_addrlist(a, print_func, NULL);
  48. rfc822_namelist(a, print_func, NULL);
  49. return (a);
  50. }
  51. int main()
  52. {
  53. struct rfc822t *t1, *t2, *t3, *t4;
  54. struct rfc822a *a1, *a2, *a3, *a4;
  55. t1=tokenize("nobody@example.com (Nobody (is) here\) right)");
  56. t2=tokenize("Distribution  list: nobody@example.com daemon@example.com");
  57. t3=tokenize("Mr Nobody <nobody@example.com>, Mr. Nobody <nobody@example.com>");
  58. t4=tokenize("nobody@example.com, <nobody@example.com>, Mr. Nobody <nobody@example.com>");
  59. a1=doaddr(t1);
  60. a2=doaddr(t2);
  61. a3=doaddr(t3);
  62. a4=doaddr(t4);
  63. rfc822a_free(a4);
  64. rfc822a_free(a3);
  65. rfc822a_free(a2);
  66. rfc822a_free(a1);
  67. rfc822t_free(t4);
  68. rfc822t_free(t3);
  69. rfc822t_free(t2);
  70. rfc822t_free(t1);
  71. return (0);
  72. }