home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / rgbtop16 / rgbtop16.c next >
Text File  |  1990-06-14  |  5KB  |  214 lines

  1. /* RGBTOP16.C  V1.0L10    1989.05.05        last update    1989.05.06            */
  2. /*         programmed by MSどす                                            */
  3. /*        PC98のZ'staff kidのベタファイルをTowns-PAINTのP16ファイルに変換します    */
  4. /*        コンパクト モデル で コンパイル しています                */
  5.  
  6. #define XBYTE 320
  7. #define YDOTPC 400
  8. #define YDOTFM 480 
  9. #define TRUE 1
  10. #define FALSE 0
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <dir.h>
  15. #include <dos.h>
  16. #include <ctype.h>
  17. #include "header.h"
  18.  
  19. char drive1[MAXDRIVE];
  20. char dir1[MAXDIR];
  21. char name1[MAXFILE];
  22. char ext1[MAXEXT];
  23. char drive2[MAXDRIVE];
  24. char dir2[MAXDIR];
  25. char name2[MAXFILE];
  26. char ext2[MAXEXT];
  27.  
  28. int fnleng;
  29. char fname1[MAXPATH]="";
  30. char fname2[MAXPATH]="";
  31. int cnt,fseq;
  32. FILE *fin,*fout;
  33. unsigned char *rbuf,*rptr,*gbuf,*gptr,*bbuf,*bptr;
  34. unsigned char tbuf[XBYTE+1],*tptr,temp[10];
  35.  
  36. struct dfree ds;
  37.  
  38. main(int argc,char *argv[])
  39. {
  40.     int i,j,k,xflg,n;
  41.     unsigned long freearea;
  42.     unsigned char w;
  43.  
  44.     if((argc==1)||(argc>4)){
  45.         puts("RGBTOP16 V1.0L10  PDS制作: WetWare Publishing ) MSどす");
  46.         puts("PC98のZ'staff kidのベタファイルをTowns-PAINTのP16ファイルに変換します\n");
  47.         puts("使用方法:RGBTOP16 [-X] 入力ファイル [ドライブ:][出力ファイル]");
  48.         puts("     -X 指定時には縦 400 -> 480 ドット に拡張します");
  49.         exit(1);
  50.     }
  51.  
  52.     xflg=FALSE;
  53.     for(i=1;i<argc;i++){
  54.         if((argv[i][0] == '-')&&((argv[i][1] == 'x')||(argv[i][1] == 'X'))){
  55.             xflg=TRUE;
  56.         }
  57.         else{
  58.             if(fname1[0]){
  59.                 strcpy(fname2,argv[i]);
  60.             }
  61.             else{
  62.                 strcpy(fname1,argv[i]);
  63.             }
  64.         }
  65.     }
  66.  
  67.     rbuf = (unsigned char *)malloc(80*400);    /*    入力バッファの確保 */
  68.     if (rbuf == NULL){
  69.         fprintf(stderr,"メモリが確保出来ませんでした\n");
  70.         exit(2);
  71.     }
  72.     gbuf = (unsigned char *)malloc(80*400);
  73.     if (gbuf == NULL){
  74.         fprintf(stderr,"メモリが確保出来ませんでした\n");
  75.         exit(2);
  76.     }
  77.     bbuf = (unsigned char *)malloc(80*400);
  78.     if (bbuf == NULL){
  79.         fprintf(stderr,"メモリが確保出来ませんでした\n");
  80.         exit(2);
  81.     }
  82.  
  83.     fnsplit(fname1,drive1,dir1,name1,ext1);        /* ファイル名の組み立て */
  84.     fnsplit(fname2,drive2,dir2,name2,ext2);
  85.     if(*drive2 == NULL)    {    strcpy(drive2,drive1);    }
  86.     if(*drive2 == NULL)    {
  87.         drive2[0]= 'A' + getdisk();
  88.         drive2[1]= ':';
  89.         drive2[2]= NULL;
  90.     }
  91. /*    if(*dir2 == NULL)    {    strcpy(dir2,dir1);    }*/
  92.     if(*name2 == NULL)    {    strcpy(name2,name1);    }
  93.     fnmerge(fname2,drive2,dir2,name2,".P16");
  94.  
  95.     w = toupper(drive2[0]) - 'A' +1;
  96.     getdfree(w,&ds);
  97.     freearea=((unsigned long)ds.df_avail
  98.             * (unsigned long)ds.df_bsec
  99.             * (unsigned long)ds.df_sclus);
  100.     if(freearea < 153734L){
  101.         printf("ディスクの空き容量が %ld バイトしかありません\n",freearea);
  102.         printf("153734 バイト以上の空きを確保して下さい\n");
  103.         exit(3);
  104.     }
  105.  
  106.     printf("ベタファイルを読んでいます。しばらくお待ち下さい。\n");
  107.     fnmerge(fname1,drive1,dir1,name1,".R1");    /* RED READ */
  108.     fin=fopen(fname1,"rb");
  109.     if(fin==NULL){
  110.         printf("入力ファイルがありません(%s)\n",fname1);
  111.         exit(4);
  112.     }
  113.     n = fread(rbuf,1,32000,fin);
  114.     if(n<=0){
  115.         printf("入力ファイルが異常です(%s)\n",fname1);
  116.         exit(5);
  117.     }
  118.     fclose(fin);
  119.     fnmerge(fname1,drive1,dir1,name1,".G1");    /* GREEN READ */
  120.     fin=fopen(fname1,"rb");
  121.     if(fin==NULL){
  122.         printf("入力ファイルがありません(%s)\n",fname1);
  123.         exit(4);
  124.     }
  125.     n = fread(gbuf,1,32000,fin);
  126.     if(n<=0){
  127.         printf("入力ファイルが異常です(%s)\n",fname1);
  128.         exit(5);
  129.     }
  130.     fclose(fin);
  131.     fnmerge(fname1,drive1,dir1,name1,".B1");    /* BLUE READ */
  132.     fin=fopen(fname1,"rb");
  133.     if(fin==NULL){
  134.         printf("入力ファイルがありません(%s)\n",fname1);
  135.         exit(4);
  136.     }
  137.     n = fread(bbuf,1,32000,fin);
  138.     if(n<=0){
  139.         printf("入力ファイルが異常です(%s)\n",fname1);
  140.         exit(5);
  141.     }
  142.     fclose(fin);
  143.  
  144.  
  145.     fout=fopen(fname2,"wb");                            /* P16 open */
  146.     if(fout==NULL){
  147.         printf("出力ファイルがOPEN出来ません(%s)\n",fname2);
  148.         exit(6);
  149.     }
  150.     printf("変換を開始します。\n");
  151.     if(xflg){
  152.         printf("縦400ドット->480ドットに自動的に拡張します。\n");
  153.     }
  154.  
  155.     n = fwrite(header,1,HLEN,fout);                    /* ヘッダ情報書き込み */
  156.     if(n < HLEN){
  157.         printf("ファイルの書き込みに失敗しました。\n");
  158.         exit(7);
  159.     }
  160.  
  161.     rptr=rbuf;
  162.     gptr=gbuf;
  163.     bptr=bbuf;
  164.     for(i=0;i<400;i++){                                /* 変換作業 */
  165.         for(j=0,tptr=tbuf;j<80;j++){
  166.             for(k=0;k<8;k++){
  167.                 temp[k] = ((*gptr & 128)/128);
  168.                 *gptr <<= 1;
  169.                 temp[k] <<= 1;
  170.                 temp[k] |= ((*rptr & 128)/128);
  171.                 *rptr <<= 1;
  172.                 temp[k] <<= 1;
  173.                 temp[k] |= ((*bptr & 128)/128);
  174.                 *bptr <<= 1;
  175.                 if(temp[k])    {    temp[k] |= 8;    }
  176.             }
  177.             rptr++;
  178.             gptr++;
  179.             bptr++;
  180.             *tptr++ = (temp[1] << 4) | temp[0];
  181.             *tptr++ = (temp[3] << 4) | temp[2];
  182.             *tptr++ = (temp[5] << 4) | temp[4];
  183.             *tptr++ = (temp[7] << 4) | temp[6];
  184.         }
  185.         n = fwrite(tbuf,1,XBYTE,fout);        /* 1ライン分のデータ書き込み */
  186.         if(xflg && (i%5 == 0)){
  187.             n = fwrite(tbuf,1,XBYTE,fout);    /* 縦400ドット->480ドット */
  188.         }
  189.         if(n < XBYTE){
  190.             printf("ファイルの書き込みに失敗しました。\n");
  191.             exit(7);
  192.         }
  193.         printf("☆");
  194.     }
  195.  
  196.     if(xflg == NULL){
  197.         memset(tbuf,0xff,XBYTE);            /* 400ドット時、空白の追加 */
  198.         for(i=0;i<80;i++){
  199.             n = fwrite(tbuf,1,XBYTE,fout);
  200.         }
  201.         if(n < XBYTE){
  202.             printf("ファイルの書き込みに失敗しました。\n");
  203.             exit(7);
  204.         }
  205.     }
  206.  
  207.     printf("\n変換作業終了。\n");
  208.     fclose(fout);
  209.     free(rbuf);
  210.     free(gbuf);
  211.     free(bbuf);
  212.     printf("正常終了しました。\n");
  213. }
  214.