Otoceni strany o 90 stupnu v psotscriptu

Petr Sojka sojka na daeron.fi.muni.cz
Čtvrtek Listopad 7 21:24:38 CET 1996


Jeste k otaceni v postscriptu pro ty, kdo jeste pamatuji
FORTRAN. POuziti je vsak patrne omezeno na vystup z dvips.

Petr Sojka



F77 source code:


      PROGRAM A4COL2
C
C     this program converts a PS-file to produce output
C     in twocolumn-landscape format
C
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      CHARACTER LINE*80,LCOL*(*),RCOL*(*),EOC*(*)
      LOGICAL EVEN,IMPORT
      PARAMETER(IINF=5,IOUT=6)
      PARAMETER(
     $ EOC='/eoc{SI restore userdict /eop-hook known{eop-hook}if}N',
     $ LCOL='90 rotate 0 -600 translate 0.707 0.707 scale',
     $ RCOL='550 0 translate')

   10 READ(IINF,'(A72)',END=999) LINE

      DO 20 LSPACE=72,1,-1
   20   IF (LINE(LSPACE:LSPACE).NE.' ') GOTO 30
   30 CONTINUE
        
      IF (LINE(1:8).EQ.'%%Pages:') THEN
        READ(LINE(9:),'(I)') NPAGES
        WRITE(IOUT,'(A,I)') '%%Pages: ',(NPAGES-1)/2+1
        WRITE(IOUT,'(A)') '%%Modified A4-> A5'
      ELSEIF(LINE(LSPACE-12:LSPACE).EQ.'restore}B end') THEN
        WRITE(IOUT,'(A)') LINE(1:LSPACE-4)
        WRITE(IOUT,'(A)') EOC//' end'
      ELSEIF (LINE(1:LSPACE).EQ.'%%EndSetup') THEN
        WRITE(IOUT,'(A)') LINE(1:LSPACE)
        WRITE(IOUT,'(A)') LCOL
        GOTO 31
      ELSE
        WRITE(IOUT,'(A)') LINE(1:LSPACE)
      ENDIF
      GOTO 10
   31 CONTINUE

      NPAGE=0
      EVEN=.FALSE.
      IMPORT=.FALSE.
   40 READ(IINF,'(A72)',END=999) LINE

      DO 50 LSPACE=72,1,-1
   50   IF (LINE(LSPACE:LSPACE).NE.' ') GOTO 60
   60 CONTINUE

c     skip modification of imported postscript-files
      IF (LINE(1:15).EQ.'%%BeginDocument') THEN
        IMPORT=.TRUE.
      ELSEIF (LINE(1:13).EQ.'%%EndDocument') THEN
        IMPORT=.FALSE.
      ENDIF

      IF (LINE(LSPACE-2:LSPACE).EQ.'eop'.AND..NOT.IMPORT) THEN
        IF(.NOT.EVEN.AND.NPAGE.NE.NPAGES) LINE(LSPACE-2:LSPACE)='eoc'
        WRITE(IOUT,'(A)') LINE(1:LSPACE)
        IF(NPAGE.EQ.NPAGES) GOTO 40
        IF(.NOT.EVEN) WRITE(IOUT,'(A)') RCOL
        IF(EVEN) WRITE(IOUT,'(A)') LCOL
      ELSEIF (LINE(1:7).EQ.'%%Page:'.AND..NOT.IMPORT) THEN
         NPAGE=NPAGE+1
         EVEN=.FALSE.
         IF ((NPAGE/2)*2.EQ.NPAGE) THEN
           EVEN=.TRUE.
         ELSE
           WRITE(IOUT,'(A,2I4,L)') LINE(1:7),NPAGE/2+1,NPAGE/2+1
         ENDIF
      ELSE
        WRITE(IOUT,'(A)') LINE(1:LSPACE)
      ENDIF

      GOTO 40

  999 CONTINUE
      END

--
A.C.Steenbrink na wbmt.tudelft.nl
Sander Steenbrink
Laboratory of Engineering Mechanics
Delft University of Technology
P.O. Box 5033, 2600 GA Delft
the Netherlands
phone + 31 15 2786506                 Personal Home Page:
fax   + 31 15 2782150                 http://www-tm.wbmt.tudelft.nl/~stbrink


Další informace o konferenci Linux