Skip to content
Snippets Groups Projects
Commit 9b28970b authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Read/use SAUCE for width and ice-color setting when cols not specified

Also added -normal option to use save/normal/restore attr sequence for conditional-newlines. This is helpful for narrow ANSIs (e.g. 44-column FILE_ID.ANS) that depend on the viewer to read/use the SAUCE info.
parent c21d535d
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
/* ans2asc.c */ /* Convert ANSI messages to Synchronet Ctrl-A code format */
/* Convert ANSI messages to Synchronet .asc (Ctrl-A code) format */
/* $Id: ans2asc.c,v 1.16 2020/05/09 23:17:43 rswindell Exp $ */
/**************************************************************************** /****************************************************************************
* @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.tab-size 4 (Plain Text/Source Code File Header) *
...@@ -17,28 +13,18 @@ ...@@ -17,28 +13,18 @@
* See the GNU General Public License for more details: gpl.txt or * * See the GNU General Public License for more details: gpl.txt or *
* http://www.fsf.org/copyleft/gpl.html * * http://www.fsf.org/copyleft/gpl.html *
* * * *
* Anonymous FTP access to the most recent released source is available at *
* ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net *
* *
* Anonymous CVS access to the development source and modification history *
* is available at cvs.synchro.net:/cvsroot/sbbs, example: *
* cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login *
* (just hit return, no password is necessary) *
* cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src *
* *
* For Synchronet coding style and modification guidelines, see * * For Synchronet coding style and modification guidelines, see *
* http://www.synchro.net/source.html * * http://www.synchro.net/source.html *
* * * *
* You are encouraged to submit any modifications (preferably in Unix diff *
* format) via e-mail to mods@synchro.net *
* *
* Note: If this box doesn't appear square, then you need to fix your tabs. * * Note: If this box doesn't appear square, then you need to fix your tabs. *
****************************************************************************/ ****************************************************************************/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> /* isdigit */
#include <string.h> /* strcmp */ #include <string.h> /* strcmp */
#include "sauce.h"
#include "git_branch.h"
#include "git_hash.h"
#ifndef CTRL_Z #ifndef CTRL_Z
#define CTRL_Z 0x1a #define CTRL_Z 0x1a
...@@ -46,20 +32,20 @@ ...@@ -46,20 +32,20 @@
static void print_usage(const char* prog) static void print_usage(const char* prog)
{ {
char revision[16]; fprintf(stderr,"\nSynchronet ANSI-Terminal-Sequence to Ctrl-A-Code Conversion Utility %s/%s\n"
,GIT_BRANCH
sscanf("$Revision: 1.16 $", "%*s %s", revision); ,GIT_HASH
);
fprintf(stderr,"\nSynchronet ANSI-Terminal-Sequence to Ctrl-A-Code Conversion Utility v%s\n",revision);
fprintf(stderr,"\nusage: %s infile.ans [outfile.asc | outfile.msg] [[option] [...]]\n",prog); fprintf(stderr,"\nusage: %s infile.ans [outfile.asc | outfile.msg] [[option] [...]]\n",prog);
fprintf(stderr,"\noptions:\n\n"); fprintf(stderr,"\noptions:\n\n");
fprintf(stderr," -ice treat blink as bright-background (iCE colors)\n"); fprintf(stderr," -ice treat blink as bright-background (iCE colors)\n");
fprintf(stderr," -<columns> insert conditional-newlines to force wrap (e.g. -80)\n"); fprintf(stderr," -<columns> insert conditional-newlines to force wrap (e.g. -80)\n");
fprintf(stderr," -normal use 'save/normal/restore' attributes for conditional new-lines\n");
fprintf(stderr," -newline append a newline (CRLF) sequence to output file\n"); fprintf(stderr," -newline append a newline (CRLF) sequence to output file\n");
fprintf(stderr," -clear insert a clear screen code at beginning of output file\n"); fprintf(stderr," -clear insert a clear screen code at beginning of output file\n");
fprintf(stderr," -pause append a pause (hit a key) code to end of output file\n"); fprintf(stderr," -pause append a pause (hit a key) code to end of output file\n");
fprintf(stderr," -space use space characters for cursor-right movement/alignment\n"); fprintf(stderr," -space use space characters for cursor-right movement/alignment\n");
fprintf(stderr,"-delay <interval> insert a 1/10th second delay code at output byte interval\n"); fprintf(stderr," -delay <int> insert a 1/10th second delay code at output byte interval\n");
fprintf(stderr," (lower interval values result in more delays, slower display)\n"); fprintf(stderr," (lower interval values result in more delays, slower display)\n");
} }
...@@ -69,7 +55,8 @@ int main(int argc, char **argv) ...@@ -69,7 +55,8 @@ int main(int argc, char **argv)
int i,ch,ni; int i,ch,ni;
FILE *in=stdin; FILE *in=stdin;
FILE *out=stdout; FILE *out=stdout;
int ice=0; bool ice=false;
bool normal=false;
int cols=0; int cols=0;
int column=0; int column=0;
int delay=0; int delay=0;
...@@ -96,16 +83,18 @@ int main(int argc, char **argv) ...@@ -96,16 +83,18 @@ int main(int argc, char **argv)
} }
} }
else if(strcmp(argv[i], "-ice") == 0) else if(strcmp(argv[i], "-ice") == 0)
ice = 1; ice = true;
else if(strcmp(argv[i], "-clear") == 0) else if(strcmp(argv[i], "-clear") == 0)
clear = 1; clear = 1;
else if(strcmp(argv[i], "-pause") == 0) else if(strcmp(argv[i], "-pause") == 0)
pause = 1; pause = 1;
else if(strcmp(argv[i], "-space") == 0) else if(strcmp(argv[i], "-space") == 0)
space = 1; space = 1;
else if(strcmp(argv[i], "-normal") == 0)
normal = true;
else if(strcmp(argv[i], "-newline") == 0) else if(strcmp(argv[i], "-newline") == 0)
newline++; newline++;
else if(isdigit(argv[i][1])) else if(IS_DIGIT(argv[i][1]))
cols = atoi(argv[i] + 1); cols = atoi(argv[i] + 1);
else { else {
print_usage(argv[0]); print_usage(argv[0]);
...@@ -124,26 +113,40 @@ int main(int argc, char **argv) ...@@ -124,26 +113,40 @@ int main(int argc, char **argv)
} }
} }
if(in != stdin && cols < 1) {
struct sauce_charinfo info;
if(sauce_fread_charinfo(in, /* type: */NULL, &info)) {
cols = info.width;
ice = info.ice_color;
}
}
const char* cond_newline = normal ? "\1+\1N\1/\1-" : "\1/";
if(clear) if(clear)
fprintf(out,"\1N\1L"); fprintf(out,"\1N\1L");
esc=0; esc=0;
while((ch=fgetc(in))!=EOF && ch != CTRL_Z) { while((ch=fgetc(in))!=EOF && ch != CTRL_Z) {
if(ch=='[' && esc) { /* ANSI escape sequence */ if(ch=='[' && esc) { /* ANSI escape sequence */
if(cols && column >= cols) {
fprintf(out, cond_newline); // Conditional-newline
column = 0;
}
ni=0; /* zero number index */ ni=0; /* zero number index */
memset(n,1,sizeof(n)); memset(n,1,sizeof(n));
while((ch=fgetc(in))!=EOF) { while((ch=fgetc(in))!=EOF) {
if(isdigit(ch)) { /* 1 digit */ if(IS_DIGIT(ch)) { /* 1 digit */
n[ni]=ch&0xf; n[ni]=ch&0xf;
ch=fgetc(in); ch=fgetc(in);
if(ch==EOF) if(ch==EOF)
break; break;
if(isdigit(ch)) { /* 2 digits */ if(IS_DIGIT(ch)) { /* 2 digits */
n[ni]*=10; n[ni]*=10;
n[ni]+=ch&0xf; n[ni]+=ch&0xf;
ch=fgetc(in); ch=fgetc(in);
if(ch==EOF) if(ch==EOF)
break; break;
if(isdigit(ch)) { /* 3 digits */ if(IS_DIGIT(ch)) { /* 3 digits */
n[ni]*=10; n[ni]*=10;
n[ni]+=ch&0xf; n[ni]+=ch&0xf;
ch=fgetc(in); ch=fgetc(in);
...@@ -157,9 +160,9 @@ int main(int argc, char **argv) ...@@ -157,9 +160,9 @@ int main(int argc, char **argv)
case '=': case '=':
case '?': case '?':
ch=fgetc(in); /* First digit */ ch=fgetc(in); /* First digit */
if(isdigit(ch)) ch=fgetc(in); /* l or h ? */ if(IS_DIGIT(ch)) ch=fgetc(in); /* l or h ? */
if(isdigit(ch)) ch=fgetc(in); if(IS_DIGIT(ch)) ch=fgetc(in);
if(isdigit(ch)) fgetc(in); if(IS_DIGIT(ch)) fgetc(in);
break; break;
case 'f': case 'f':
case 'H': case 'H':
...@@ -294,7 +297,7 @@ int main(int argc, char **argv) ...@@ -294,7 +297,7 @@ int main(int argc, char **argv)
break; break;
default: default:
if(cols && column >= cols) { if(cols && column >= cols) {
fprintf(out, "\1/"); // Conditional-newline fprintf(out, cond_newline); // Conditional-newline
column = 0; column = 0;
} }
fputc(ch,out); fputc(ch,out);
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" /> <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
<Import Project="..\xpdev\xpdev.props" />
<Import Project="..\build\undeprecate.props" /> <Import Project="..\build\undeprecate.props" />
<Import Project="..\build\target_ia32.props" /> <Import Project="..\build\target_ia32.props" />
</ImportGroup> </ImportGroup>
...@@ -40,6 +41,7 @@ ...@@ -40,6 +41,7 @@
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" /> <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
<Import Project="..\build\undeprecate.props" /> <Import Project="..\build\undeprecate.props" />
<Import Project="..\build\target_ia32.props" /> <Import Project="..\build\target_ia32.props" />
<Import Project="..\xpdev\xpdev.props" />
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup> <PropertyGroup>
...@@ -70,8 +72,7 @@ ...@@ -70,8 +72,7 @@
<ProgramDataBaseFileName>.\msvc.win32.release\ans2asc/</ProgramDataBaseFileName> <ProgramDataBaseFileName>.\msvc.win32.release\ans2asc/</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalIncludeDirectories> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
...@@ -110,8 +111,7 @@ ...@@ -110,8 +111,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
...@@ -138,6 +138,12 @@ ...@@ -138,6 +138,12 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<ClCompile Include="sauce.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\xpdev\xpdev.vcxproj">
<Project>{7428a1e8-56b7-4868-9c0e-29d031689feb}</Project>
</ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment