/**************************************
            MAKEMSG V2.0
     (c) Merlin Computer GMBH
        KICKSTART 8/9 1988


 Erzeugt aus Textfiles ablauffähige
 Codefiles, die den Text selbstständig
 ausgeben.
 V2.0 für Aztec C3.4a
 (W) `87 O.Wagner
 ***************************************/

#include <stdio.h>
#define sput(s) fput(stdout,s)

wf(f,s)
register FILE *f;
register char *s;
{
 while (*s!=(char)'\xaa') putc(*s++,f);
}

fput(f,s)
register FILE *f;
register char *s;
{
 while (*s) putc(*s++,f);
}

main(argc, argv)
int argc;
char *argv[];
{
 register int c,h,e=0,lw=15,le=0;
 register FILE *ft,*fa,*rf;
 register char l=2;
 char cls=0,ret=0;
 FILE *fopen();
 char *co="Can't open <";
 char *tf="ram:mmsg.temp";

/* Argumente prüfen und notwendige
   Meldungen ausgeben.
   Schablone: MAKEMSG textfile/A codefile/A -c/S -e(char)/S */
 if (*argv[1] == '?') {
  sput("\2333mMakeMSG V2.0\2330m  Written by O.Wagner  \
(C) `87 by Markt & Technik Verlag AG\nUSAGE: MAKEMSG textfile \
codefile [options]\nOptions avaible are:\n");
  sput("-C     : clear screen before output\n\-Echar : set char \
replaced by CSI ($9B)\n-R     : disable auto-linefeed at EOF\n");
  exit(0); }
 if (argc<3 || !strcmp(argv[1],argv[2])) { sput("Bad args\n"); exit(20); }
 for(c=3; c<argc; c++) {
  if (*argv[c]++!='-') {
   sput("Following arguments must be options\n"); exit(20); }
  switch(tolower(*argv[c]++)) {
   case 'e':
    e=*argv[c];
    break;
   case 'c':
    cls=1;
    break;
   case 'r':
    ret=1;
    break;
   default:
    sput("Illegal option\n"); exit(20); }
 }
/* Files öffnen */
 if (!(rf = fopen(tf,"w"))) {
  sput(co); sput("ram:mmsg.temp>\n");
  exit(20); }
 if (!(ft = fopen(argv[1],"r"))) {
  sput(co); sput(argv[1]); sput(">\n");
  fclose(rf); unlink(tf); exit(20); }
 if (!(fa = fopen(argv[2],"w"))) {
  sput(co); sput(argv[2]); sput(">\n");
  fclose(rf); fclose(ft); unlink(tf);
  exit(20); }
/* Text in Ram-Disk kopieren, dabei
   Wandlungen vornehmen                 */
 if (cls) { le++; l++; putc(12,rf); }
 while ((c=getc(ft))!=EOF) {
  if (e && e==c) c=155;
  if ((++l)==4) { l=0; lw++; }
  le++; putc((h=c),rf); }
 if (!ret && h!=10) { le++; putc(10,rf);
  if ((++l)==4) { l=0; lw++; } }
 fclose(rf); fclose(ft);
/* Codefile erzeugen */            
 wf(fa,"\0\0\x03\xf3\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02\0\0\xaa");
 putc(lw>>8,fa); putc(lw&255,fa);
 wf(fa,"\0\0\0\0\0\0\0\x01\0\0\x03\xe9\0\0\xaa");
 putc(lw>>8,fa); putc(lw&255,fa);
 wf(fa,"\x2c\x78\0\x04\x43\xfa\0\x28\x42\x81\x4e\xae\xfd\xd8\x2a\
\x40\x4e\xad\xff\xc4\x22\0\x24\x3c\0\0\0\x3a\x36\x3c\xaa");
 putc(le>>8,fa); putc(le&255,fa);
 wf(fa,"\x4e\xad\xff\xd0\x22\x4d\x4e\xae\xfe\x62\x42\x80\x4e\x75\x64\x6f\
\x73\x2e\x6c\x69\x62\x72\x61\x72\x79\0\xaa");
 rf=fopen(tf,"r");
 while ((c=getc(rf))!=EOF) putc(c,fa);
 fclose(rf); unlink(tf);
 while (l++!=4) putc(0,fa);
 wf(fa,"\0\0\x03\xec\0\0\0\x01\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\x03\xf2\
\0\0\x03\xea\0\0\0\0\0\0\x03\xf2\0\0\x03\xeb\0\0\0\x01\0\0\x03\xf2\xaa");
 fclose(fa);
}
