home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 10_11 / amiga / fload.c next >
C/C++ Source or Header  |  1988-06-30  |  3KB  |  88 lines

  1. /* FastLoad - Utility f. Drucker-Fonts */
  2. /* (C) 1988 by G.Glendown & TOOLBOX    */
  3.  
  4. /* Folgende Druckercodes werden verwendet:
  5. ESC"x"[0/1]             Umschalten Draft/LQ
  6. ESC"!"0                 Print Style zurücksetzen
  7. ESC":"0 0 0             Zeichensatz kopieren
  8. ESC"%"1                 auf User-CS umschalten
  9. ESC"&"0 a e l m r Daten
  10. a       erster Buchstabe
  11. e       letzter Buchstabe
  12. l       Pixels links vomáChar
  13. m       Pixels des Chars
  14. r       Pixels rechts vom Char
  15. Daten:    jeweils 3 Byte pro Spalte, von oben nach unten.*/
  16.  
  17. /* Filehandler für Zeichensatz und Drucker */
  18. struct FileHandle *fh,*pr,*Open();
  19. /* Filename */
  20. char fname[100];
  21. long puf,z,len,klen;
  22. int cnt=0;
  23. UBYTE width;
  24. /* Druckpuffer */
  25. UBYTE dr[100];
  26. UWORD *pw;            /* pw als Word-Zeiger auf dr[] */
  27.  
  28. main(argc,argv)
  29. int argc;
  30. char *argv[];
  31. {   z=0x50435345; /* File-Id 'PCSE' */;
  32.     /* zweiten Zeiger auf Druckpuffer initialisieren: */
  33.     pw=(UWORD *)dr;
  34.     if (argv[1][0]=='?')
  35.         printf("Syntax  : %s <Filename> [S]\n",argv[0]),ex(0);
  36.     if (argc==1) {
  37.     /* Kein Parameter: Filenamen abfragen */
  38.         printf(" Printer Character Set Fast Loader\n");
  39.         printf(" (C)  1988 by G. Glendown & TOOLBOX \n\n");
  40.         printf(" Bitte geben sie den Filenamen ein:");
  41.         scanf("%s",fname);
  42.         argv[1]=fname;
  43.     }
  44.     /* File öffnen */
  45.     if (!(fh=Open(argv[1],MODE_OLDFILE)))
  46.         printf("File nicht gefunden!\n"),ex(0);
  47.     Read(fh,&puf,4L);    /* Id einlesen */
  48.     if (puf!=z)          /* und vergleichen */
  49.         printf("Kein PCSE - File\n"),ex(1);
  50.     Read(fh,&width,1L);  /* Zeichenbreite holen */
  51.     if ((width!=9)&&(width!=29))
  52.         printf("Struktur-Fehler !\g"),ex(1);
  53.     /* Druckerfilehandle holen */
  54.     if (!(pr=Open("PAR:",MODE_NEWFILE)))
  55.         printf("Konnte Drucker nicht ÷ffnen\n"),ex(1);
  56.     /* Anzahl Bytes pro Zeichen ausrechnen */
  57.     klen=(long)(width*3+5);
  58.     dr[0]=27;  dr[1]='x';
  59.     dr[2]=(width==9)?0:1;      /* Auf Draft/LQ umschalten */
  60.     dr[3]=27; pw[4>>1]=0x2100; /* keine Attribute         */
  61.     pw[6>>1]=27<<8|':'; pw[8>>1]=0;
  62.     pw[10>>1]=27;            /* Zeichensatz kopieren */
  63.     pw[12>>1]='%'<<8|1;      /* und umschalten */
  64.     Write(pr,dr,14L); pw[0]=27<<8|0x26;  dr[2]=0;
  65.     /* Solange lesen bis Read weniger */
  66.     /* als klen Zeichen kriegt.       */
  67.     while (klen==Read(fh,&dr[3],klen)) {
  68.         if (dr[4]!=width) printf("Struktur-Fehler !\n"),ex(2);
  69.         /* Zeichennummer ausrechnen */
  70.         dr[4]=dr[3]+32; dr[3]=dr[4];
  71.         Write(pr,dr,klen+3); cnt++;
  72.     }
  73.     printf("Zeichensatz installiert!\n");
  74.     if ((argc==3) && (argv[2][0]=='S'))
  75.         printf("%d Zeichen kopiert\n",cnt);
  76.     ex(2);
  77. }
  78.  
  79.  
  80. ex(t)
  81. int t;
  82. {   switch (t) {
  83.       case 2: Close(pr);
  84.       case 1: Close(fh);
  85.     }
  86.     exit(0);
  87. }
  88.