/* fild_8dw.c */
/* 8 = 1+3+4 Targets */
/* Take a Control by the Number of Field.            */
/* Modified Recyclable Object << 'firstwd()'.        */
/* As I saw below, by using
 *    isspace OR *from==' ', I can recognize field delimiter Blank (' ');
 *    while by using
 *    !isspace (NOT is space), I can capture the words at given field;
 *    And tandem numbers of WHILE-loops becomes the field Number.
 *    Now, here comes the first prototype of Field Number Controlled
 *    given word Capture Recycable Object.
 *
 *    I tested this for Win3.1 "DIR.Txt" by 'Pro134E.prj', and works fine.
 */
/* I wanted to make this one to be a geneic Based-on Field Number, Read and
 *    Write control.  Then it may be useful at various situations.
 *    By a quick test, this did exactly what I wanted.
 */
/* Now, at any given field, I can skip or make it blank.
 *     while () ++from;                ->  skip the field as if not exist.
 *     while () *to++ = *from++ = ' '  ->  make it erased (by white liquid paper).
 */
/* By this "Field_No2.c" version, suppose No Details of output control
 *    is necessary, but just Field Number level control.
 *    Column position Counter "i" is deleted.
 *    -> Yes, this is working.  When I applied to Win3.1 "DIR.txt"
 *       It printed Field Shift in a few sporadic rows, since some of
 *       them don't have the 2nd Field "Extention" Word.
 */
/* This way is out of 'main.c', but rather Recycling Object Control.
 *    The 'main.c' can't control anything about.   I already have
 *    the 'Main.c' Control version by Column Position, so this would
 *    be the best complement to it.   Recycling Object like this is
 *    so tiny, and go anywhere, and so easy to read and modify.  Thus,
 *    in this point of view, also the best complement to 'Main.c'
 *    control.   So, use this conveniently.
 */
/* Before this Object became "Sandwitch (upField, downField)"
 *    it can apply Liquid Paper only the same column length of
 *    original text, by this Field Control Object.
 */
/* Now, the "Sandwitch" and Liquid Paper goes on 4th Field.  With
 *    'upField', 'downField' variables, Liquid Paper is moved into
 *    'main.c', with any desirable fixed column length.
 *        UpField    Object
 *        
 *        DownField  Object
 * This one is for 'DownField' from 4th to the end.
 * Again here, I have Options, do I choose for mute-mode on 4th to end,
 * OR, do something else such 'break' to get out of While-loop.
 * I did the former: apply mute-mode to the end of 4th Field, and
 * TURN-ON into ALL-Print-mode.   It worked pretty well.  As I see
 * here below, in terms of programming,
 *
 * == Programming Note=
 * I only need to deal with up to the Liquid Paper Field(s).  Then
 * the rest of Fields are just one line,
 * "Print the rest of All Fields, doesn't matter How many".
 */
/* Break down of 8UP = Erase 1+3+4 Fields */
/*   8UP -> 1 mute; 
 *          2 print;
 *          to end mute;
 *   8Down -> 1-to-4 mute;
 *          to end All print;
 */

#include <ctype.h>

extern char *fild_8dw (char *to, char *from)
{
   /* 1st:  Capturing 1st Field(Word)  */
   while (isspace(*from) && *from!='\0')                   {  ++from;  }
   while ( !isspace(*from) && *from!='\0' && *from!='.' )  {  ++from;  }

   /* Between Words, Read Blank(' ') or similar */
   while (isspace(*from) && *from!='\0' )                  {  ++from;   }

   /* 2nd:  Capturing 2nd Field(Word)  */
   while ( !isspace(*from) && *from!='\0' && *from!='.' )  {  ++from;  }

   /* Between Words, Read Blank(' ') or similar */
   while (isspace(*from) && *from!='\0' )                  {  ++from;   }

   /* 3rd:  Capturing 3rd Field(Word)  */
   while ( !isspace(*from) && *from!='\0' && *from!='.' )  {  ++from;  }

   /* Between Words, Read Blank(' ') or similar */
   while (isspace(*from) && *from!='\0' )                  {  ++from;   }

   /* 4th:  Capturing 4th Field(Word)  */
   /* Now, here is the mode-switch place, this 4th itself is mute, */
   /*   but after this All-Print-mode.  */
   while ( !isspace(*from) && *from!='\0' && *from!='.' )  {  ++from;  }

   /* To-the-end:  Until end of line   */
   /* At the first time in this 'DownField.o', output-mode is ALL ON */
   while ( *from!='\0' )                                   {  *to++ = *from++;  }


   *to = '\0';
   return (from);
}