荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: zzt (好好学习,天天向上), 信区: Linux
标 题: 写乐一个抓msg的程序(for bbs)!
发信站: BBS 荔园晨风站 (Thu Feb 17 19:44:01 2000), 站内信件
发信人: PeterPan (你快跳啊), 信区: Linux
标 题: 写乐一个抓msg的程序(for bbs)!
发信站: 一网深情 (Wed Jun 9 22:31:49 1999), 转信
【 以下文字转载自 Unix 讨论区 】
【 原文由 PeterPan 所发表 】
用于抓收到的和回别人的msg, 花了一整天的时间总算写成乐,
贴出来于大家共享.
文件名:
catchmsg.cpp
编译:
g++ catchmsg.cpp -o catchmsg
用法是这样的:
telnet bbs.your.host |catchmsg savefile
祝:
广大的热爱Linux和Unix的GGDD们和JJMM们聊天快乐,
把更多美好回忆留在按ext2格式化的硬盘上和心中.
----蜀南血梦
#include<iostream.h>
#include<fstream.h>
#define MSG_INIT 0
#define MSG_BEGIN 1
#define MSG_PAUSE 2
#define MSG_STOP 3
#define MSG_RESUME 4
#define MSG_ESC 5
struct CStateNode{
int nStart;
int nEnd;
char *pszSteps;
char *pszFullSteps;
}aStateNodes[100]={
{0,MSG_ESC,"\x1b[","\x1b["},
{MSG_ESC,MSG_BEGIN,"0;1;44;36m","\x1b[0;1;44;36m"},
{0,MSG_BEGIN,"立即回讯息给","立即回讯息给"},
{0,MSG_BEGIN,"回讯息给","回讯息给"},
{MSG_ESC,MSG_PAUSE,"4;","\x1b[4;"},
{MSG_ESC,MSG_PAUSE,"1;","\x1b[1;"},
{0,MSG_STOP,"\r","\r\n"},
{MSG_ESC,MSG_RESUME,"2;","\x1b[2;"},
{0,0,NULL}};
int nState=0;
int nCurNode=0;
int nCurPos=0;
int StepOn(char c,const char **pp)
{
CStateNode *psn=aStateNodes+nCurNode;
if(psn->pszSteps[nCurPos]=='\0'){
nCurPos=0;
CStateNode *p=aStateNodes;
while(p->pszSteps!=NULL){
if(p->nStart==nState)
goto ok;
p++;
nCurNode++;
}
nState=nCurNode=0;
}
ok:
psn=aStateNodes+nCurNode;
while(psn->pszSteps!=NULL){
if(psn->nStart==nState&&c==psn->pszSteps[nCurPos]){
nCurPos++;
if(psn->pszSteps[nCurPos]=='\0'){
*pp=psn->pszFullSteps;
nState=psn->nEnd;
}else
*pp=NULL;
return nState;
}
nCurPos=0;
nCurNode++;
psn++;
}
nState=nCurNode=nCurPos=0;
*pp=NULL;
//try again;
psn=aStateNodes+nCurNode;
while(psn->pszSteps!=NULL){
if(psn->nStart==nState&&c==psn->pszSteps[nCurPos]){
nCurPos++;
if(psn->pszSteps[nCurPos]=='\0'){
*pp=psn->pszFullSteps;
nState=psn->nEnd;
}else
*pp=NULL;
return nState;
}
nCurNode++;
psn++;
}
nState=nCurNode=nCurPos=0;
*pp=NULL;
return nState;
}
void main(int argc,char ** argv)
{
char c;
int stat=0;
const char *pszSteps;
ofstream out(argv[1]);
ofstream stat_out("catchmsg.dat");
cin.get(c);
while(!cin.eof()){
cout.put(c);
if(stat==0&&StepOn(c,&pszSteps)==MSG_BEGIN&& pszSteps){
out.write(pszSteps,strlen(pszSteps));
out.flush();
stat=MSG_BEGIN;
}else if(stat==MSG_BEGIN||stat==MSG_RESUME){
int step=StepOn(c,&pszSteps);
if(step==MSG_PAUSE
&& pszSteps){
stat=MSG_PAUSE;
out.put(c);
out.flush();
}else if(step==MSG_STOP
&& pszSteps){
stat=0;
out.put(c);
out.put('\n');
out.flush();
}
if(stat&&stat!=MSG_PAUSE){
out.put(c);
out.flush();
}
}else if(stat==MSG_PAUSE
&&StepOn(c,&pszSteps)==MSG_RESUME
&& pszSteps){
stat=MSG_RESUME;
out.write(pszSteps,strlen(pszSteps));
out.flush();
}
cin.get(c);
}
}
--
我是天堂,
你跳下来吧!
我是地狱,
你也跳下来吧!!
爱情的规则就如同商场的规则......
撑死胆大的,饿死胆小的.
※ 修改:.PeterPan 于 Jun 9 22:35:05 修改本文.[FROM: 202.115.16.23]
※ 来源:.一网深情 bbs.uestc.edu.cn.[FROM: 202.115.16.23]
--
※ 转载:.一网深情 bbs.uestc.edu.cn.[FROM: 202.115.16.23]
--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.1.11]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店