home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / News / Alexandra.0.82 / Source / plain-subject.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-30  |  1.2 KB  |  53 lines

  1. #include <string.h>
  2. #import "plain-subject.h"
  3. #import <stdio.h>
  4. #import <appkit/nextstd.h>
  5.  
  6. static short delta[7][256];
  7. static BOOL     didInit=NO;
  8.  
  9. char *plain_subject(char *subject,BOOL *reply)
  10.     {
  11.     char *originalSubject=subject;
  12.     int     state=2,i;
  13.     
  14.     if(!subject){
  15.         NXLogError("plain_subject.c: called with NULL pointer");
  16.         return NULL;
  17.     }
  18.     
  19.     if(!didInit)
  20.         {
  21.         didInit=YES;
  22.         memset(delta,0,6*256*sizeof(short));
  23.         for(i=0;i<256;i++)
  24.             delta[6][i]=1;
  25.         delta[2]['r']=3; delta[2]['R']=3;
  26.         delta[3]['e']=4; delta[3]['E']=4;
  27.         delta[4]['^']=5; delta[4][':']=6;
  28.         delta[5]['0']=5; delta[5]['1']=5; delta[5]['2']=5; delta[5]['3']=5;  
  29.         delta[5]['4']=5; delta[5]['5']=5; delta[5]['6']=5; delta[5]['7']=5;  
  30.         delta[5]['8']=5; delta[5]['9']=5; delta[5][':']=6;
  31.         delta[6][' ']=6; delta[6][  0]=0;
  32.         }
  33.     while(state>1)
  34.         state=delta[state][(unsigned char)*originalSubject++];
  35.     *reply=state;
  36.     if(*reply)
  37.         originalSubject--;
  38.     else
  39.         originalSubject=subject;
  40.     return originalSubject;
  41.     }
  42.  
  43. /*
  44.  
  45.                                     digit      space
  46.                                     /    \       /   \     
  47.          R,r        E,e         ^   \   /   :  \   /
  48.     (2) -----> (3) -----> (4) -----> (5) -----> (6) -----> ((1))
  49.                             \___________________/
  50.                                         :
  51.                                         
  52. */
  53.