home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
ms_dos
/
rgbtop16
/
rgbtop16.c
next >
Wrap
Text File
|
1990-06-14
|
5KB
|
214 lines
/* RGBTOP16.C V1.0L10 1989.05.05 last update 1989.05.06 */
/* programmed by MSどす */
/* PC98のZ'staff kidのベタファイルをTowns-PAINTのP16ファイルに変換します */
/* コンパクト モデル で コンパイル しています */
#define XBYTE 320
#define YDOTPC 400
#define YDOTFM 480
#define TRUE 1
#define FALSE 0
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include <dos.h>
#include <ctype.h>
#include "header.h"
char drive1[MAXDRIVE];
char dir1[MAXDIR];
char name1[MAXFILE];
char ext1[MAXEXT];
char drive2[MAXDRIVE];
char dir2[MAXDIR];
char name2[MAXFILE];
char ext2[MAXEXT];
int fnleng;
char fname1[MAXPATH]="";
char fname2[MAXPATH]="";
int cnt,fseq;
FILE *fin,*fout;
unsigned char *rbuf,*rptr,*gbuf,*gptr,*bbuf,*bptr;
unsigned char tbuf[XBYTE+1],*tptr,temp[10];
struct dfree ds;
main(int argc,char *argv[])
{
int i,j,k,xflg,n;
unsigned long freearea;
unsigned char w;
if((argc==1)||(argc>4)){
puts("RGBTOP16 V1.0L10 PDS制作: WetWare Publishing ) MSどす");
puts("PC98のZ'staff kidのベタファイルをTowns-PAINTのP16ファイルに変換します\n");
puts("使用方法:RGBTOP16 [-X] 入力ファイル [ドライブ:][出力ファイル]");
puts(" -X 指定時には縦 400 -> 480 ドット に拡張します");
exit(1);
}
xflg=FALSE;
for(i=1;i<argc;i++){
if((argv[i][0] == '-')&&((argv[i][1] == 'x')||(argv[i][1] == 'X'))){
xflg=TRUE;
}
else{
if(fname1[0]){
strcpy(fname2,argv[i]);
}
else{
strcpy(fname1,argv[i]);
}
}
}
rbuf = (unsigned char *)malloc(80*400); /* 入力バッファの確保 */
if (rbuf == NULL){
fprintf(stderr,"メモリが確保出来ませんでした\n");
exit(2);
}
gbuf = (unsigned char *)malloc(80*400);
if (gbuf == NULL){
fprintf(stderr,"メモリが確保出来ませんでした\n");
exit(2);
}
bbuf = (unsigned char *)malloc(80*400);
if (bbuf == NULL){
fprintf(stderr,"メモリが確保出来ませんでした\n");
exit(2);
}
fnsplit(fname1,drive1,dir1,name1,ext1); /* ファイル名の組み立て */
fnsplit(fname2,drive2,dir2,name2,ext2);
if(*drive2 == NULL) { strcpy(drive2,drive1); }
if(*drive2 == NULL) {
drive2[0]= 'A' + getdisk();
drive2[1]= ':';
drive2[2]= NULL;
}
/* if(*dir2 == NULL) { strcpy(dir2,dir1); }*/
if(*name2 == NULL) { strcpy(name2,name1); }
fnmerge(fname2,drive2,dir2,name2,".P16");
w = toupper(drive2[0]) - 'A' +1;
getdfree(w,&ds);
freearea=((unsigned long)ds.df_avail
* (unsigned long)ds.df_bsec
* (unsigned long)ds.df_sclus);
if(freearea < 153734L){
printf("ディスクの空き容量が %ld バイトしかありません\n",freearea);
printf("153734 バイト以上の空きを確保して下さい\n");
exit(3);
}
printf("ベタファイルを読んでいます。しばらくお待ち下さい。\n");
fnmerge(fname1,drive1,dir1,name1,".R1"); /* RED READ */
fin=fopen(fname1,"rb");
if(fin==NULL){
printf("入力ファイルがありません(%s)\n",fname1);
exit(4);
}
n = fread(rbuf,1,32000,fin);
if(n<=0){
printf("入力ファイルが異常です(%s)\n",fname1);
exit(5);
}
fclose(fin);
fnmerge(fname1,drive1,dir1,name1,".G1"); /* GREEN READ */
fin=fopen(fname1,"rb");
if(fin==NULL){
printf("入力ファイルがありません(%s)\n",fname1);
exit(4);
}
n = fread(gbuf,1,32000,fin);
if(n<=0){
printf("入力ファイルが異常です(%s)\n",fname1);
exit(5);
}
fclose(fin);
fnmerge(fname1,drive1,dir1,name1,".B1"); /* BLUE READ */
fin=fopen(fname1,"rb");
if(fin==NULL){
printf("入力ファイルがありません(%s)\n",fname1);
exit(4);
}
n = fread(bbuf,1,32000,fin);
if(n<=0){
printf("入力ファイルが異常です(%s)\n",fname1);
exit(5);
}
fclose(fin);
fout=fopen(fname2,"wb"); /* P16 open */
if(fout==NULL){
printf("出力ファイルがOPEN出来ません(%s)\n",fname2);
exit(6);
}
printf("変換を開始します。\n");
if(xflg){
printf("縦400ドット->480ドットに自動的に拡張します。\n");
}
n = fwrite(header,1,HLEN,fout); /* ヘッダ情報書き込み */
if(n < HLEN){
printf("ファイルの書き込みに失敗しました。\n");
exit(7);
}
rptr=rbuf;
gptr=gbuf;
bptr=bbuf;
for(i=0;i<400;i++){ /* 変換作業 */
for(j=0,tptr=tbuf;j<80;j++){
for(k=0;k<8;k++){
temp[k] = ((*gptr & 128)/128);
*gptr <<= 1;
temp[k] <<= 1;
temp[k] |= ((*rptr & 128)/128);
*rptr <<= 1;
temp[k] <<= 1;
temp[k] |= ((*bptr & 128)/128);
*bptr <<= 1;
if(temp[k]) { temp[k] |= 8; }
}
rptr++;
gptr++;
bptr++;
*tptr++ = (temp[1] << 4) | temp[0];
*tptr++ = (temp[3] << 4) | temp[2];
*tptr++ = (temp[5] << 4) | temp[4];
*tptr++ = (temp[7] << 4) | temp[6];
}
n = fwrite(tbuf,1,XBYTE,fout); /* 1ライン分のデータ書き込み */
if(xflg && (i%5 == 0)){
n = fwrite(tbuf,1,XBYTE,fout); /* 縦400ドット->480ドット */
}
if(n < XBYTE){
printf("ファイルの書き込みに失敗しました。\n");
exit(7);
}
printf("☆");
}
if(xflg == NULL){
memset(tbuf,0xff,XBYTE); /* 400ドット時、空白の追加 */
for(i=0;i<80;i++){
n = fwrite(tbuf,1,XBYTE,fout);
}
if(n < XBYTE){
printf("ファイルの書き込みに失敗しました。\n");
exit(7);
}
}
printf("\n変換作業終了。\n");
fclose(fout);
free(rbuf);
free(gbuf);
free(bbuf);
printf("正常終了しました。\n");
}