Code: Alles auswählen
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[]) {
	// printf("argc = %d\n", argc);
	
	if (argc<2) {
		printf("usage: %s Atari 8 Bit .LST files\n", argv[0]);
		return 0;
	}
	
	if ((strcmp(argv[1], "--help") && strcmp(argv[1], "-h"))==0) {
		printf("\nreplaces special Atari characters with codes of their keystrokes.\n");
		printf("Outputs names get a .txt added\n");
		printf("Files will be overwritten WITHOUT ANY WARNING!\n\n");
		return 0;
	}
	
	if ((strcmp(argv[1], "--version") && strcmp(argv[1], "-v"))==0) {
		printf("\n2022.07.14\n\n");
		return 0;
	}
	
	for(int i=1; i<argc; i++) {
		// printf("arg[%d]=\"%s\"\n", i, argv[i]);
		FILE *fp_in, *fp_out;
		
		fp_in=fopen(argv[i], "rb");
		
		if (fp_in==NULL) {
			printf("File \"%s\" not found\n", argv[i]);
		} else {
			char filename[20];
			int c;
			sprintf(filename, "%s.txt", argv[i]);
			fp_out=fopen(filename, "wb");
			
			while((c = getc(fp_in)) != EOF) {
				// printf("Read Char #%d\n", c);
				switch(c) {
//					case 32:
//						fputs("{Spacebar}", fp_out);
//						break;
					case 0: fputs("{Ctrl + ,}", fp_out); break;
					case 1: fputs("{Ctrl + A}", fp_out); break;
					case 2: fputs("{Ctrl + B}", fp_out); break;
					case 3: fputs("{Ctrl + C}", fp_out); break;
					case 4: fputs("{Ctrl + D}", fp_out); break;
					case 5: fputs("{Ctrl + E}", fp_out); break;
					case 6: fputs("{Ctrl + F}", fp_out); break;
					case 7: fputs("{Ctrl + G}", fp_out); break;
					case 8: fputs("{Ctrl + H}", fp_out); break;
					case 9: fputs("{Ctrl + I}", fp_out); break;
					case 10: fputs("{Ctrl + J}", fp_out); break;
					case 11: fputs("{Ctrl + K}", fp_out); break;
					case 12: fputs("{Ctrl + L}", fp_out); break;
					case 13: fputs("{Ctrl + M}", fp_out); break;
					case 14: fputs("{Ctrl + N}", fp_out); break;
					case 15: fputs("{Ctrl + O}", fp_out); break;
					case 16: fputs("{Ctrl + P}", fp_out); break;
					case 17: fputs("{Ctrl + Q}", fp_out); break;
					case 18: fputs("{Ctrl + R}", fp_out); break;
					case 19: fputs("{Ctrl + S}", fp_out); break;
					case 20: fputs("{Ctrl + T}", fp_out); break;
					case 21: fputs("{Ctrl + U}", fp_out); break;
					case 22: fputs("{Ctrl + V}", fp_out); break;
					case 23: fputs("{Ctrl + W}", fp_out); break;
					case 24: fputs("{Ctrl + X}", fp_out); break;
					case 25: fputs("{Ctrl + Y}", fp_out); break;
					case 26: fputs("{Ctrl + Z}", fp_out); break;
					case 27: fputs("{ESC ESC}", fp_out); break;
					case 28: fputs("{ESC Ctrl + -}", fp_out); break;
					case 29: fputs("{ESC Ctrl + =}", fp_out); break;
					case 30: fputs("{ESC Ctrl + +}", fp_out); break;
					case 31: fputs("{ESC Ctrl + *}", fp_out); break;
					case 96: fputs("{Ctrl + .}", fp_out); break;
					
					case 123: fputs("{Ctrl + ;}", fp_out); break;
					case 125: fputs("{ESC Ctrl + <}", fp_out); break;
					case 126: fputs("{ESC Backspace}", fp_out); break;
					case 127: fputs("{ESC Tab}", fp_out); break;
					case 128: fputs("{Inverse Ctrl + ,}", fp_out); break;
					case 129: fputs("{Inverse Ctrl + A}", fp_out); break;
					case 130: fputs("{Inverse Ctrl + B}", fp_out); break;
					case 131: fputs("{Inverse Ctrl + C}", fp_out); break;
					case 132: fputs("{Inverse Ctrl + D}", fp_out); break;
					case 133: fputs("{Inverse Ctrl + E}", fp_out); break;
					case 134: fputs("{Inverse Ctrl + F}", fp_out); break;
					case 135: fputs("{Inverse Ctrl + G}", fp_out); break;
					case 136: fputs("{Inverse Ctrl + H}", fp_out); break;
					case 137: fputs("{Inverse Ctrl + I}", fp_out); break;
					case 138: fputs("{Inverse Ctrl + J}", fp_out); break;
					case 139: fputs("{Inverse Ctrl + K}", fp_out); break;
					case 140: fputs("{Inverse Ctrl + L}", fp_out); break;
					case 141: fputs("{Inverse Ctrl + M}", fp_out); break;
					case 142: fputs("{Inverse Ctrl + N}", fp_out); break;
					case 143: fputs("{Inverse Ctrl + O}", fp_out); break;
					case 144: fputs("{Inverse Ctrl + P}", fp_out); break;
					case 145: fputs("{Inverse Ctrl + Q}", fp_out); break;
					case 146: fputs("{Inverse Ctrl + R}", fp_out); break;
					case 147: fputs("{Inverse Ctrl + S}", fp_out); break;
					case 148: fputs("{Inverse Ctrl + T}", fp_out); break;
					case 149: fputs("{Inverse Ctrl + U}", fp_out); break;
					case 150: fputs("{Inverse Ctrl + V}", fp_out); break;
					case 151: fputs("{Inverse Ctrl + W}", fp_out); break;
					case 152: fputs("{Inverse Ctrl + X}", fp_out); break;
					case 153: fputs("{Inverse Ctrl + Y}", fp_out); break;
					case 154: fputs("{Inverse Ctrl + Z}", fp_out); break;
					case 155: fputs("\n", fp_out); break;
					case 156: fputs("{ESC Shift + Backspace}", fp_out); break;
					case 157: fputs("{ESC Shift + >}", fp_out); break;
					case 158: fputs("{ESC Ctrl + Tab}", fp_out); break;
					case 159: fputs("{ESC Shift + Tab}", fp_out); break;
					
					case 160: fputs("{ }", fp_out); break;
					case 161: fputs("{!}", fp_out); break;
					case 162: fputs("{\"}", fp_out); break;
					case 163: fputs("{#}", fp_out); break;
					case 164: fputs("{$}", fp_out); break;
					case 165: fputs("{%}", fp_out); break;
					case 166: fputs("{&}", fp_out); break;
					case 167: fputs("{'}", fp_out); break;
					case 168: fputs("{(}", fp_out); break;
					case 169: fputs("{)}", fp_out); break;
					case 170: fputs("{*}", fp_out); break;
					case 171: fputs("{+}", fp_out); break;
					case 172: fputs("{,}", fp_out); break;
					case 173: fputs("{-}", fp_out); break;
					case 174: fputs("{.}", fp_out); break;
					case 175: fputs("{/}", fp_out); break;
					case 176: fputs("{0}", fp_out); break;
					case 177: fputs("{1}", fp_out); break;
					case 178: fputs("{2}", fp_out); break;
					case 179: fputs("{3}", fp_out); break;
					case 180: fputs("{4}", fp_out); break;
					case 181: fputs("{5}", fp_out); break;
					case 182: fputs("{6}", fp_out); break;
					case 183: fputs("{7}", fp_out); break;
					case 184: fputs("{8}", fp_out); break;
					case 185: fputs("{9}", fp_out); break;
					case 186: fputs("{:}", fp_out); break;
					case 187: fputs("{;}", fp_out); break;
					case 188: fputs("{<}", fp_out); break;
					case 189: fputs("{=}", fp_out); break;
					case 190: fputs("{>}", fp_out); break;
					case 191: fputs("{?}", fp_out); break;
					case 192: fputs("{@}", fp_out); break;
					case 193: fputs("{A}", fp_out); break;
					case 194: fputs("{B}", fp_out); break;
					case 195: fputs("{C}", fp_out); break;
					case 196: fputs("{D}", fp_out); break;
					case 197: fputs("{E}", fp_out); break;
					case 198: fputs("{F}", fp_out); break;
					case 199: fputs("{G}", fp_out); break;
					case 200: fputs("{H}", fp_out); break;
					case 201: fputs("{I}", fp_out); break;
					case 202: fputs("{J}", fp_out); break;
					case 203: fputs("{K}", fp_out); break;
					case 204: fputs("{L}", fp_out); break;
					case 205: fputs("{M}", fp_out); break;
					case 206: fputs("{N}", fp_out); break;
					case 207: fputs("{O}", fp_out); break;
					case 208: fputs("{P}", fp_out); break;
					case 209: fputs("{Q}", fp_out); break;
					case 210: fputs("{R}", fp_out); break;
					case 211: fputs("{S}", fp_out); break;
					case 212: fputs("{T}", fp_out); break;
					case 213: fputs("{U}", fp_out); break;
					case 214: fputs("{V}", fp_out); break;
					case 215: fputs("{W}", fp_out); break;
					case 216: fputs("{X}", fp_out); break;
					case 217: fputs("{Y}", fp_out); break;
					case 218: fputs("{Z}", fp_out); break;
					case 219: fputs("{[}", fp_out); break;
					case 220: fputs("{\\}", fp_out); break;
					case 221: fputs("{]}", fp_out); break;
					case 222: fputs("{^}", fp_out); break;
					case 223: fputs("{_}", fp_out); break;
					case 224: fputs("{Inverse Ctrl + .}", fp_out); break;
					case 225: fputs("{a}", fp_out); break;
					case 226: fputs("{b}", fp_out); break;
					case 227: fputs("{c}", fp_out); break;
					case 228: fputs("{d}", fp_out); break;
					case 229: fputs("{e}", fp_out); break;
					case 230: fputs("{f}", fp_out); break;
					case 231: fputs("{g}", fp_out); break;
					case 232: fputs("{h}", fp_out); break;
					case 233: fputs("{i}", fp_out); break;
					case 234: fputs("{j}", fp_out); break;
					case 235: fputs("{k}", fp_out); break;
					case 236: fputs("{l}", fp_out); break;
					case 237: fputs("{m}", fp_out); break;
					case 238: fputs("{n}", fp_out); break;
					case 239: fputs("{o}", fp_out); break;
					case 240: fputs("{p}", fp_out); break;
					case 241: fputs("{q}", fp_out); break;
					case 242: fputs("{r}", fp_out); break;
					case 243: fputs("{s}", fp_out); break;
					case 244: fputs("{t}", fp_out); break;
					case 245: fputs("{u}", fp_out); break;
					case 246: fputs("{v}", fp_out); break;
					case 247: fputs("{w}", fp_out); break;
					case 248: fputs("{x}", fp_out); break;
					case 249: fputs("{y}", fp_out); break;
					case 250: fputs("{z}", fp_out); break;
					case 251: fputs("{Inverse Ctrl + ;}", fp_out); break;
					case 252: fputs("{|}", fp_out); break;
					case 253: fputs("{ESC Ctrl + 2}", fp_out); break;
					case 254: fputs("{ESC Ctrl + Backspace}", fp_out); break;
					case 255: fputs("{ESC Ctrl + >}", fp_out); break;
					default:
						// printf("writing default value of #%d\n", c);
						fputc(c, fp_out);
				}
			}
			
			fclose(fp_out);
		}
		
		fclose(fp_in);
	}
	
	return 0;
}
Nicht das eleganteste C-Programm, aber dafür ungetestet.