/* 発注データ抽出 O_FLT.C Order Filter */
#include <stdio.h>
#include <jctype.h>
void main()
{
int c,d,p,s,g,t,m,i;
int b[29]; /* buffer 29文字分 */
s=0; /* 1個前のデータ */
p=0; /* 改行後のデータカウント buffer("b")用 */
d=0; /* 改行後のデータカウント */
t=0; /* 本当にスタートしてよいならON */
g=0; /* ボディヘッドのGらしきを見つけたらON */
m=0; /* 違うGの時、bufferに別のGがいるか? */
for (i=0;i<29;i++){ /* bufferの初期化 */
}
while((c=getchar()) !=EOF){ /* 文字受け取り */
if (c=='B' && s=='\n' && d > 10){ /* ヘッダ先頭?みつける */
d=0;
putchar ('\n'); /* 改行 */
}
if (c=='G' && s=='\n' ){ /* ボディ先頭?みつける */
}
if (c=='E' && s=='\n' && d > 10){ /* ENDらしきをみつける */
/* 正常であれば,前の改行から10字以内で英字はこない */
putchar ('\n');
}
if (g==1){ /* ボディ先頭Gをみつけたかも状態 */
if (isprint(c)||iskana(c)){ /* 印刷可能orカナ */
b[p]=c; /* bufferにためる */
p=p+1; /* buffer中のカウント */
}
if (p>28){ /* buffer満杯になったところで・・・ */
p=0;
g=0;
t=0; /*正しいGであることを前提に */
for (i=1;i<7;i++){ /* b[0]は当然'G' 6字連続数字 */
if (isdigit(b[i])){
}else{
}
}
for (i=8;i<29;i++){ /* カナは絶対ない領域 */
}
if (t==0){ /* 正常なGだった */
m=0;
d=0;
putchar ('\n'); /* まず改行 */
}else{ /* Gは違った */
m=0;
for (i=1;i<29;i++){ /* buffer中に別のGがあるか */
if (b[i] == 'G'){
m=i; /* buffer中 m 字目にみつけ */
break;
}
}
if (m!=0){ /* bufferにGがある場合 */
for (i=0; i < m; i++){ /* Gまでbuffer掃き出し */
if (isprint(b[i])||iskana(b[i])) {
putchar(b[i]);
d=d+1;
}
}
for (i=0;i<30-m;i++){ /* G以降を先頭にずらす */
}
for (i=29-m;i<29;i++){ /* ずれたあまりを初期化 */
}
g=1; /* g をONにして繰り返させる。 */
p=29-m; /* カウンターセット */
}
}
if (m == 0){ /* bufferにGがないのでそのままOUT */
for (i=0;i<29;i++){
if (isprint(b[i])||iskana(b[i])) { /*制御文字カット */
}
}
for (i=0;i<29;i++){
}
}
}
}else{
if (isprint(c)||iskana(c)){ /* G問題に無関係状態 */
putchar(c); /* 制御文字でなければOUT */
d=d+1;
}
}
s=c; /* 1個前のデータ保持 */
}
}