/* * This program is Copyright (C) 1987 by the Board of Trustees of the * University of Illinois, and by the author Dirk Grunwald. */ /* * Handle printing of marked pages */ #include #include #include #include #include #include #include "dvi-simple.h" #include "texx2.h" #include "texx2-mark.h" static Bool *markedPages = 0; void TeXMarkNewFile() { int page; if ( markedPages ) { XtFree( markedPages ); markedPages = 0; } if ( DviFile != 0 ) { markedPages = (Bool *) malloc( DviTotalPages * sizeof(Bool) ); for ( page = 0; page< DviTotalPages; page++ ) { markedPages[ page ] = False; } } } /* * toggle the mark for a given page */ Bool TeXMarkToggle(page) int page; { assert( page >=0 && page < DviTotalPages ); markedPages[ page ] = ~markedPages[ page ]; return( markedPages[ page ] ); } /* * Simply return the state */ Bool TeXMarkState(page) int page; { assert( page >=0 && page < DviTotalPages ); return( markedPages[ page ] ); } void TeXMarkAll() { int page; for (page = 0; page < DviTotalPages; page++) { markedPages[ page ] = True; } } void TeXMarkNone() { int page; for (page = 0; page < DviTotalPages; page++) { markedPages[ page ] = False; } } /* Print some pages. The Menu selection dictates what pages get printed */ void TeXMarkPrint(pd) PrintDirective pd; { char *dvips; int cnt; int i; char buf[20]; char printCommand[1024]; char *fileToPrint; int deletePrintedFile; if ( pd == printAll ) { fileToPrint = DviFileName; deletePrintedFile = 0; } else { int dviSelectBufferLength = 2048; char dviSelectBuffer[ 2048 ]; fileToPrint = (char *) tmpnam( 0 ); deletePrintedFile = 1; /* Now run dviselect to extract the pages */ sprintf(dviSelectBuffer, "dviselect -i %s -o %s ", DviFileName, fileToPrint); cnt = 0; for (i = 0; i < DviTotalPages; i++) { if ( (markedPages[ i ] && pd == printMarked ) || (!markedPages[ i ] && pd == printUnmarked )) { sprintf(buf, " =%d", i + 1); strcat(dviSelectBuffer, buf); cnt++; } } if (cnt != 0) { error(0,0, dviSelectBuffer); system(dviSelectBuffer); } else { /* nothing to print? */ unlink( fileToPrint ); return; } } /* Now print pages */ if (TeXxResources.printProgram == 0) { extern char *getenv(); dvips = getenv("DVIPRINT"); if (dvips == NULL) { dvips = "Dvi "; /* a good guess on BSD systems */ } } else { dvips = TeXxResources.printProgram; } error(0,0, "Using default ``%s'' to print\n", dvips); sprintf(printCommand, "%s %s ", dvips, fileToPrint); error(0,0,printCommand); system(printCommand); if ( deletePrintedFile ) { unlink( fileToPrint ); } }