TSA@seivax.pnet ("Todd Aven") (04/22/87)
Here is the program I mentioned that will take Degas output on the Atari ST and format it appropriately for printing on a QMS laser printer. Note that QMS printers masquerade at times as Talaris laser printers. Anything that understands QUIC code should accept the output of this program, but no promises! I know nothing about Postscript, but I'm sure someone will modify it to output QUIC *or* Postscript as an option (hint, hint). Share and enjoy, Todd Aven the Softwear Sweatshop /* QMSDEGAS * * Convert a file from Degas format (32034 bytes) to * QMS QUIC 8-bit free format bitmap. * * Copyright 1987, Todd Aven * May be freely distributed provided no fee is charged * for its use or possession. Send modifications to * * Internet: todd@cincom.umd.edu * Bitnet: todd@umcincom * * MODIFICATIONS: * * This is brand new. If you look for 'MODIFY:' you'll * find suggestions for what to work on next. Please keep * a record of changes, use #ifdef's copiously. * * Version 0.1 runs on VAX/VMS. /tsa * * ORIGINAL AUTHOR: * * Todd Aven * the Softwear Sweatshop * 7833 Walker Drive, Suite 308 * Greenbelt, MD 20770 * */ #include <stdio.h> /* MODIFY: These 34 bytes represent at least the color palette, but exactly how is not known to me. */ #define SKIP_BYTES 34 /* Presently ignore first 34 bytes. */ #define USAGE "\n usage: qmsdegas <degas file> <qms file>\n\n" #define QMSHEADER "^PY^-\n" /* Turns on QUIC commands. */ #define QMSTRAILER "^PN^-\n" /* Turns 'em off again. */ #define QMSENDLINE "^X\n" /* Ignore the CRLF. */ #define QMSBEGINLINE "^A" /* Pay attention to data now. */ #define EIGHTFREE "\n^(^X\n" /* Go to 8-bit free format mode. */ #define NOEIGHTFREE "^A^)^-\n" /* No more free format. */ /* MODIFY: Add options for selecting magnification factors. */ #define QMSPLOTSTART "^IP0404^P0640" /* Begin plot mode, 4X expanded.*/ #define QMSPLOTEND "^G" /* End plot mode. */ main(argc,argv) int argc; char *argv[]; { FILE *infile,*outfile; /* infile = DEGAS, outfile = QMS */ char bitmap[400][80],throwaway; /* 400 rows, 640 columns (8 columns/char) */ register int i,row,column; /* i is temp, row and column are for bitmap */ if(argc != 3) { fprintf(stderr,USAGE); exit (); } /* Open the DEGAS picture for reading. */ if( !(infile = fopen (argv[1],"rb"))){ fprintf (stderr,"\nCouldn't open %s for reading.",argv[1]); exit (); } /* Open the QMS file for writing. */ if( !(outfile = fopen (argv[2],"wb","rfm=var"))){ fprintf (stderr,"\nCouldn't open %s for writing.",argv[2]); exit (); } /* Skip the first N bytes. */ for( i = 0; i < SKIP_BYTES; i++) throwaway = fgetc(infile); /* Read DEGAS picture into the bitmap for manipulation. */ for( row = 0; row < 400; row++){ for( column = 0; column < 80; column++){ bitmap[row][column] = fgetc(infile); } } /* Put the preliminary garbage into the QMS file. */ fprintf(outfile,QMSHEADER); /* Put the printer in 8-bit free format. */ fprintf(outfile,EIGHTFREE); /* Put the printer in plot mode. */ fprintf(outfile,QMSBEGINLINE); fprintf(outfile,QMSPLOTSTART); fprintf(outfile,QMSENDLINE); /* Put the bitmap into the output file. */ for( row = 0; row < 400; row++){ fprintf(outfile,QMSBEGINLINE); for( column = 0; column < 80; column++){ fputc(bitmap[row][column],outfile); if( bitmap[row][column] == '^' ) fputc(bitmap[row][column],outfile); /* '^' must be doubled. */ } fprintf(outfile,QMSENDLINE); } /* End plot mode. */ fprintf(outfile,QMSBEGINLINE); fprintf(outfile,QMSPLOTEND); fprintf(outfile,QMSENDLINE); /* Kill 8-bit free format */ fprintf(outfile,NOEIGHTFREE); /* Add trailer garbage for the QMS file. */ fprintf(outfile,QMSTRAILER); /* Close the files. */ fclose(infile); fclose(outfile); /* All done. */ }