home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 35 / Flop_Magazin_35_1995_03_Raster_cs_Side_A.atr / hcc8zb1.c < prev    next >
Text File  |  2023-02-26  |  4KB  |  1 lines

  1. /*¢hardcopy obrázkû z ATARI XL/XE  - Zdenêk Burian¢  tato verze jiæ funguje, dal¿í roz¿í⌐ení: dvojitÿ tisk, levÿ okraj¢  rychlÿ buffer¢  v tomto stavu urçeno ke zverejnêní ve FLOPu¢  zlobí ale zejmê buffer klávesnice¢¢  Název tiskového zaízení:¢    ATARI ST  -  PRN:¢    AMIGA     -  PAR:    (pozor na Kameníky !)¢    IBM/PC    -  LPT1 nebo jiné¢*/¢¢#include <stdio.h>¢¢#define HEADER  "\n\n\tHardcopy obrázkû z 8-bitového ATARI. (320*192)\n\n"¢#define OPENERR "Nejde otev⌐ít '%s'!\n\n"¢#define TRANS1  "P⌐evod dat ...\n"¢#define TRANS2  "Data pro tiskárnu p⌐ipravena.\n\n"¢¢void hardcopy(void);¢void tisk(void);¢¢unsigned char inbuf[7680],¢              outbuf[7680];¢¢void tisk(void)¢{¢    FILE *outfile;¢   unsigned int a,z,y,b,c,d,e,f,g;¢       a=0;¢¢        if ((outfile= fopen("PRN:","wb"))==0)¢            {¢                printf(OPENERR,"PRN:");¢                return;¢            } ¢¢   printf("\n\tZadej parametr 'n' grafiky 'ESC * n m1 m2' : ");¢   scanf("%u",&b);¢¢   do {¢     printf("\n\tZadej kvalitu tisku (0 - 1) : ");¢     scanf("%u",&c);¢   } while(c>1);¢¢   putc(27,outfile);  /* rádkování 24/216" nebo 22/216 */¢   putc('3',outfile);¢   putc(24-c,outfile);¢¢¢   do {¢    printf("\n\tZadej poçet mezer z levé strany: ");¢    scanf("%u",&d);¢        if(d>40)¢           printf("\n\tPOZOR !  p⌐ekroçena ¿í⌐ka A4 !\n\n");¢   } while(d>150);¢¢¢    printf("\n\tPouæít nastavení levého okraje ESC l n ?  (A/N) : ");¢    scanf("%u",&f);¢    if(f=='a')¢      f='A';¢   if(f=='A')¢    {  putc(27,outfile);  /* levÿ okraj ESC l n */¢      putc('l',outfile);¢      putc(d,outfile);¢    }¢      ¢   for(z=0;z<24;z++)¢   { /* jeden rádek  */¢     for(g=0;g<=c;g++)¢      {  if(f!='A')       /*  levÿ okraj  skládanÿ z mezer*/¢           for(e=0;e<d;e++)¢               putc(32,outfile);¢   ¢         putc(27,outfile);  /*  grafickÿ povel ESC * m   */¢         putc('*',outfile);¢         putc(b,outfile);¢         putc(64,outfile);¢         putc(1,outfile);¢   ¢         for(y=0;y<320;y++,a++)¢            putc(outbuf[a],outfile);¢¢        if(g==0)¢         {¢            putc(27,outfile);  /* prímé LF */¢            putc('J',outfile);¢            putc(1,outfile);¢                a=a-(c*320);¢         }¢         putc(13,outfile);¢         }¢     putc(10,outfile);¢   }¢   if(f=='A')¢    {  putc(27,outfile);  /* levÿ okraj ESC l n */¢      putc('l',outfile);¢      putc(0,outfile);¢    }¢      ¢   fclose(outfile);¢   printf("\n\t  celkem posláno asi %u -1 bajtû",a);¢return;¢}  ¢¢void hardcopy(void)¢{¢   FILE *infile;¢   char v[80],name[32];¢   unsigned char bajt[8];¢   int  x,i,y,z,e;¢   e=0;¢¢   printf("\n\tZadej jméno souboru:\n");¢   gets (name);¢   infile = fopen(&name,"rb");¢   if (infile==NULL)¢            {¢                printf(OPENERR,name);¢                getchar();¢                return;¢            }¢printf("otevreno ...\n");¢¢/*  pomalÿ, ale univerzální zpûsob naçtení bloku dat */¢/*for (i=0;i<7680;i++)¢   inbuf[i]=getc(infile);*/¢¢ /* rychlé a prímé naçítání dat */¢ if (!( fread(inbuf,sizeof(char),7680,infile) ))¢¢printf("na uzavreni\n");¢fclose(infile);    ¢printf(TRANS1);¢¢for(z=0;z<7680;z+=320)¢   for(y=0;y<40;y++)¢   {¢      bajt[0] = inbuf[z+y];¢      bajt[1] = inbuf[z+y+40];¢      bajt[2] = inbuf[z+y+80];¢      bajt[3] = inbuf[z+y+120];¢      bajt[4] = inbuf[z+y+160];¢      bajt[5] = inbuf[z+y+200];¢      bajt[6] = inbuf[z+y+240];¢      bajt[7] = inbuf[z+y+280];¢¢      for(i=0,x=128;i<8;i++,x/=2)¢      {¢         if(e>7680)¢              {printf("preteçení");¢               return;¢              }¢         else¢  outbuf[e] = ((bajt[0]&x)<<i)+(((bajt[1]&x)<<i)>>1)+(((bajt[2]&x)<<i)>>2)+¢         (((bajt[3]&x)<<i)>>3)+(((bajt[4]&x)<<i)>>4)+(((bajt[5]&x)<<i)>>5)+¢         (((bajt[6]&x)<<i)>>6)+(((bajt[7]&x)<<i)>>7);¢¢         e++;¢      }¢    }   ¢ ¢printf(TRANS2);¢¢ do {¢   printf("\n\n\tH - TISK");¢   printf("\n\tN - návrat do hlavního menu\n");¢   gets(v);¢   if (v[0]=='h' || v[0]=='H')¢      tisk();¢ } while(v[0] != 'N');¢return;¢}¢¢void main(void)¢{¢char v[80];¢do {¢    printf(HEADER);¢   printf("\n\n\tP - pokraçování");¢   printf("\n\n\tQ - konec programu\n");¢   gets(v);¢   if (v[0]=='p' || v[0]=='P')¢      hardcopy();¢¢ } while(v[0] != 'Q');¢    printf("\KONEC ----------------\n");¢return;¢}