--- sbbs/src/sbbs3/ans2asc.c 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/ans2asc.c 2018/04/24 16:43:18 1.1.1.2 @@ -2,13 +2,13 @@ /* Convert ANSI messages to Synchronet .asc (Ctrl-A code) format */ -/* $Id: ans2asc.c,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: ans2asc.c,v 1.1.1.2 2018/04/24 16:43:18 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2003 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -42,12 +42,12 @@ int main(int argc, char **argv) { - char esc,n[25]; + unsigned char esc,n[25]; char revision[16]; int i,ch,ni; FILE *in,*out; - sscanf("$Revision: 1.1 $", "%*s %s", revision); + sscanf("$Revision: 1.1.1.2 $", "%*s %s", revision); if(argc<2) { fprintf(stderr,"\nans2asc %s\n",revision); @@ -77,6 +77,7 @@ int main(int argc, char **argv) while((ch=fgetc(in))!=EOF) { if(ch=='[' && esc) { /* ANSI escape sequence */ ni=0; /* zero number index */ + memset(n,1,sizeof(n)); while((ch=fgetc(in))!=EOF) { if(isdigit(ch)) { /* 1 digit */ n[ni]=ch&0xf; @@ -185,9 +186,24 @@ int main(int argc, char **argv) fputc('7',out); break; } } break; - case 'C': + case 'B': /* cursor down */ + while(n[0]) { + fprintf(out,"\n"); + n[0]--; + } + break; + case 'C': /* cursor right */ fprintf(out,"\1%c",0x7f+n[0]); break; + case 'D': /* cursor left */ + if(n[0]>=80) + fprintf(out,"\r"); + else + while(n[0]) { + fprintf(out,"\b"); + n[0]--; + } + break; default: fprintf(stderr,"Unsupported ANSI code '%c' (0x%02X)\r\n",ch,ch); break;