參照之前名片檔多頁的寫法 和LinAndy在SOB版POST解決簽名檔的方法改了一下
不過因為敝站的簽名檔的編輯跟原本的SOB不太一樣(仿maple 3)
所以我改的部份只是用於寫信或發表文章時加簽名檔的部份 嗯嗯 :p
沒有最佳化 改的亂亂的 大家就test看看(這個寫法就是沒用到user.c的showsig..)
edit.c
addsig()
{
FILE *fs;
int i=0,j,m,n=0,k=0;
char buf[WRAPMARGIN + 1];
char buf1[256];
char ans[3];
char fpath[STRLEN];
char ch;
char sigch;
char askmsg[100];
static char msg[] = "請選擇簽名檔 (1-9, 0=不加)[0]:\n";
if (!currutmp->userlevel)
return;
msg[27] = ch = '0' | (cuser.uflag & SIG_FLAG);
/*chyiuan add*/
clear();
move(0,0);
prints(msg);
setuserfile(fpath, "sig.0");
j = strlen(fpath) - 1;
for (sigch = '1'; sigch <= '9'; sigch++)
{
fpath[j] = sigch;
if (fs = fopen(fpath, "r"))
{ prints("【 簽名檔.%c 】\n", sigch);
i++;
for (m = 0; m++ < MAXSIGLINES && fgets(buf1, 256, fs); outs(buf1))
{
if (i++ == 21)
{
move(b_lines,0);
outmsg("[SPACE]往下一頁繼續,[數字0~9]選擇簽名檔,[ENTER]使用設定");
do{
k = egetch();
}while(k!='0'&&k!='1'&&k!='2'&&k!='3'&&k!='4'&&k!='5'&&k!='6'&&k!='7'
&& k!='8'&& k!='9'&& k!='\r'&& k!='\n'&&k!=' ');
if (k=='0'||k=='1'||k=='2'||k=='3'||k=='4'||k=='5'||k=='6'||k=='7'
||k=='8'||k=='9')
{
sprintf(askmsg,"你確定要使用第%d個簽名檔嗎?[y/n]:",k-48);
getdata(0,0,askmsg,ans,3,DOECHO,0);
if(ans[0]!='n' && ans[0]!='N')
{
buf[0]=k;
}
else
{
buf[0]=ch;
}
sigch='9';
n=1;
clear();
}
else if (k=='\n' || k=='\r')
{
sprintf(askmsg,"使用原先設定的簽名檔[%d]",ch-48);
pressanykey1(askmsg);
buf[0]=ch;
n=1;
clear();
}
else
{
clear();
move(0,0);
prints(msg);
move(2,0);
i=1;
}
}
}
fclose(fs);
}
}
if(n!=1)
{
move(b_lines,0);
outmsg("[數字0~9]決定使用簽名檔, 或[Enter]使用原先設定的");
do{
k = egetch();
}while(k!='0'&&k!='1'&&k!='2'&&k!='3'&&k!='4'&&k!='5'&&k!='6'&&k!='7'
&& k!='8'&& k!='9'&&k!='\n'&&k!='\r');
if(k=='\r'||k=='\n')
{
sprintf(askmsg,"使用原先設定的簽名檔[%d]",ch-48);
pressanykey1(askmsg);
buf[0]=ch;
}
else if (k=='0'||k=='1'||k=='2'||k=='3'||k=='4'||k=='5'||k=='6'||k=='7'
||k=='8'||k=='9')
{
sprintf(askmsg,"你確定要使用第%d個簽名檔嗎?[y/n]:",k-48);
getdata(0,0,askmsg,ans,3,DOECHO,0);
if(ans[0]!='n' && ans[0]!='N')
{
buf[0]=k ;
}
else
{
buf[0]=ch;
}
}
}
i=j;
if (ch != buf[0] && buf[0] >= '0' && buf[0] <= '9')
{
ch = buf[0];
cuser.uflag = (cuser.uflag & ~SIG_FLAG) | (ch & SIG_FLAG);
}
if (ch != '0') {
fpath[i] = ch;
if (fs = fopen(fpath, "r"))
{
insert_string("\n--\n");
for (i = 0; i < MAXSIGLINES && fgets(buf, sizeof(buf), fs); i++)
insert_string(buf);
fclose(fs);
}
}
}