#!/usr/bin/awk -f # # pm3dCompress.awk - (c) Petr Mikulik; 1996/1997/1999/2002 # # This awk script tries to compress a postscript file created by pm3d or # gnuplot with pm3d splotting mode (limits: compresses only the first pm3d # splot map there if in multiplot mode). # # # Installation: # Copy this file into a directory listed in your AWKPATH # Running: # awk -f pm3dCompress.awk _original_.ps >reduced.ps # # Hint: make a script file/abbreviation/alias, e.g. under VMS # pm3dcompress:=="$disk:[dir]gawk.exe -f disk:[dir]pm3dCompress.awk" # # Note: use GNU awk whenever possible (HP awk does not have /dev/stderr, for # instance). # # # Strategy: this program browses the given .ps file and makes a list of all # frequently used chains of postscript commands. If this list is not too large, # then it replaces these chains by abbreviated commands. # This may reduce the size of the postscript file about 50 %, which is not # so bad if you want to store these files for a later use (and with the same # functionality, of course). # # # (c) Petr Mikulik, mikulik@physics.muni.cz, http://www.sci.muni.cz/~mikulik/ # # Distribution policy: this file must be distributed together with the # whole stuff of pm3d or gnuplot program. # # This is version: 2. 3. 2002 # 2. 3. 2002 - updated because of stroke in /g definition # 15. 1. 1999 - new staff in pm3d and gnuplot/pm3d # 9. 7. 1997 - update # 16. 3. 1997 - first (?) version # BEGIN { err = "/dev/stderr" if (ARGC!=2) { print "pm3dCompress.awk --- (c) Petr Mikulik, Brno. Version 2. 3. 2002" >err print "Compression of pm3d .ps files. See the header of this file for more info." >err print "Usage: awk -f pm3dCompress.awk inp_file.ps >out_file.ps" >err exit(1) } getline print "Please wait, it may take a while (input file "ARGV[1]" is read twice)." >err while ($1!="%pm3d_map_begin") if (getline<=0) { print "No pm3d piece found in the input file, exiting." >err exit(7) } PrintMapping=$0 nList=0 while ($1!="%pm3d_map_end") { if (getline<=0) { print "Corrupted pm3d block---end not found, exiting." >err exit(8) } i=index($0,"N"); if (i>0) { S=substr($0,i,length($0)) # M including # is this string defined? for (i=0; i300) { print "Defining more than 300 strings makes no sense, I think. Exiting, sorry." >err exit(2) } } } # for all NR } print "List of frequent strings contains "nList" elements." >err # now read the same file again the 3d part: getline 0) { S=substr($0,i,length($0)) # M including # find the definition in the list for (m=0; m0) { print; flag = (getline