dos33fsprogs/appleiibot/convert_vmw.c

90 lines
2.3 KiB
C
Raw Normal View History

2020-12-07 13:52:43 +00:00
/* code by qkumba */
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
int i = 0;
int e = 0,filesize;
int val,pv;
unsigned char in[1024];
unsigned char enc[1024];
int third;
printf("1REM");
filesize=read(0,in,1024);
do {
third = ((in[i + 2] & 3) << 4) +
((in[i + 1] & 3) << 2) + (in[i + 0] & 3);
enc[e++]=third+32;
if (i<filesize) {
val=in[i+0];
pv=val;
val=val+0x100;
val-=third;
val&=0xff;
val=val>>2;
val=val+32;
fprintf(stderr,"%d: %x -> %x %x ==> %x\n",
i,pv,val,third,((val-32)<<2)+third);
if (val<0) fprintf(stderr,"error0, negative! in=%x e=%x val=%x\n",
in[i+0],third,val);
if (val<0x20) fprintf(stderr,"error0, unprintable! in=%x pv=%x e=%x val=%x\n",
in[i+0],pv,third,val);
if (val>0x7e) fprintf(stderr,"error0, too big! in=%x pv=%x e=%x val=%x\n",
in[i+0],pv,third,val);
printf("%c",val); //(in[i + 0] >> 2) + 32);
}
if (i + 1 < filesize) {
val=in[i+1];
pv=val;
val=val+0x100;
val-=(third>>2);
val&=0xff;
val=val>>2;
val=val+32;
fprintf(stderr,"%d: %x -> %x %x ==> %x\n",
i+1,pv,val,third>>2,((val-32)<<2)+(third>>2));
if (val<0) fprintf(stderr,"error1, negative! %x %x\n",
in[i+0]&0xfc,third);
if (val<0x20) fprintf(stderr,"error1, unprintable! %x %x\n",
in[i+0]&0xfc,third);
if (val>0x7e) fprintf(stderr,"error1, too big! in=%x pv=%x e=%x val=%x\n",
in[i+0],pv,third,val);
printf("%c",val); //(in[i + 1] >> 2) + 32);
}
if (i + 2 < filesize) {
val=in[i+2];
pv=val;
val=val+0x100;
val-=(third>>4);
val&=0xff;
val=val>>2;
val=val+32;
fprintf(stderr,"%d: %x -> %x %x ==> %x\n",
i+2,pv,val,third>>4,((val-32)<<2)+(third>>4));
if (val<0) fprintf(stderr,"error2, negative! %x %x\n",
in[i+0]&0xfc,third);
if (val<0x20) fprintf(stderr,"error2, unprintable! %x %x\n",
in[i+0]&0xfc,third);
if (val>0x7e) fprintf(stderr,"error2 too big! in=%x pv=%x e=%x val=%x\n",
in[i+0],pv,third,val);
printf("%c",val);//(in[i + 2] >> 2) + 32);
}
} while ((i += 3) < filesize);
enc[e]=0;
printf("%s\n",enc);
printf("2FORI=0TO%d:C=(PEEK(%d+I/3)-32)/4^(I-INT(I/3)*3):POKE768+I,C+4*(PEEK(2054+I)-32-INT(C/4)):NEXT:CALL768\n",
filesize,2054+filesize);
// note, peek/poke truncate?
//2FORI=1013TO1141:C=(PEEK(1843+I/3)-32)/4^(I-INT(I/3)*3):POKEI,C+4*(PEEK(1041+I)-32-INT(C/4)):NEXT:&
return 0;
}