mirror of
				https://github.com/deater/dos33fsprogs.git
				synced 2025-11-04 04:16:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
#define OFFSET	32
 | 
						|
#define OFFSET2	35
 | 
						|
 | 
						|
//#define OFFSET	35
 | 
						|
 | 
						|
static int hex2int(int val) {
 | 
						|
 | 
						|
	if ((val>='0') && (val<='9')) return val-'0';
 | 
						|
	if ((val>='A') && (val<='F')) return (val-'A')+10;
 | 
						|
	if ((val>='a') && (val<='f')) return (val-'a')+10;
 | 
						|
 | 
						|
	printf("Unknown: %c %d\n",val,val);
 | 
						|
	return -1;
 | 
						|
}
 | 
						|
 | 
						|
static int color_count=0;
 | 
						|
static int colors[16];
 | 
						|
 | 
						|
static int find_color(int which) {
 | 
						|
	int i;
 | 
						|
 | 
						|
	for(i=0;i<color_count;i++) {
 | 
						|
		if (colors[i]==which) {
 | 
						|
//			printf("Found %d at %d\n",which,i);
 | 
						|
			return i;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/* not found */
 | 
						|
	colors[color_count]=which;
 | 
						|
//	printf("New %d at %d\n",which,color_count);
 | 
						|
	color_count++;
 | 
						|
 | 
						|
	return color_count-1;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int main(int argc, char **argv) {
 | 
						|
 | 
						|
	int i = 0;
 | 
						|
	unsigned char in[1024];
 | 
						|
	char string[256];
 | 
						|
	char *result;
 | 
						|
	int op=0;
 | 
						|
	int color;
 | 
						|
 | 
						|
 | 
						|
	memset(in,0,sizeof(in));
 | 
						|
 | 
						|
	memset(colors,0,sizeof(colors));
 | 
						|
 | 
						|
	while(1) {
 | 
						|
		result=fgets(string,256,stdin);
 | 
						|
		if (result==NULL) break;
 | 
						|
 | 
						|
		for(i=0;i<strlen(string);i++) {
 | 
						|
			if (string[i]=='$') {
 | 
						|
				color=find_color(hex2int(string[i+1]));
 | 
						|
				in[op]=color;
 | 
						|
				op++;
 | 
						|
				color=find_color(hex2int(string[i+2]));
 | 
						|
				in[op]=color;
 | 
						|
				op++;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	printf("Raw Image was %d bytes, %d colors\n",op,color_count);
 | 
						|
 | 
						|
	for(i=0;i<8;i++) printf("%c",colors[i]+35);
 | 
						|
 | 
						|
	for(i=0;i<op;i+=2) printf("%c",((in[i]<<3)+in[i+1])+35);
 | 
						|
 | 
						|
	printf("\n");
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 |