home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l292 / 1.ddi / SCREEN.FOR < prev    next >
Encoding:
Text File  |  1990-02-20  |  17.7 KB  |  600 lines

  1.  
  2.       INCLUDE 'FGRAPH.FI'
  3.       INCLUDE 'misciofi.for'
  4.  
  5.  
  6.  
  7.       INTEGER FUNCTION GetPrnmaxX (orient)
  8.       INTEGER result, getmaxX, getmaxY, orient
  9.  
  10.         CALL GetMaxCoords(getmaxX, getmaxY)
  11.         IF (orient .EQ. 1) THEN
  12.           result = getmaxY
  13.         ELSE
  14.           result = getmaxX
  15.         END IF
  16.         GetPrnmaxX = result
  17.       END !FUNCTION
  18.  
  19.       INTEGER FUNCTION GetPrnmaxY (orient)
  20.       INTEGER result, getmaxX, getmaxY, orient
  21.  
  22.         CALL GetMaxCoords(getmaxX, getmaxY)
  23.         IF (orient .EQ. 1) THEN
  24.           result = getmaxX
  25.         ELSE
  26.           result = getmaxY
  27.         END IF
  28.         GetPrnmaxY = result
  29.       END !FUNCTION
  30.  
  31.       FUNCTION GetPrnPixel (x, y, orient)
  32.       INCLUDE 'FGRAPH.FD'
  33.       INTEGER x,y,orient,result, getmaxX, getmaxY, xval
  34.  
  35.         result = 0
  36.         CALL GetMaxCoords(getmaxX, getmaxY)
  37.         IF (orient .EQ. 1) THEN
  38.           xval = getmaxX - y
  39.           IF (xval .GE. 0) THEN
  40.             result = getpixel(xval, x)
  41.           ELSE
  42.             result = 0
  43.           END IF
  44.         ELSE
  45.            result = getpixel(x, y)
  46.         END IF
  47.         GetPrnPixel = REAL(result)
  48.       END !FUNCTION
  49.  
  50.  
  51.  
  52.  
  53.       SUBROUTINE GetHorizByte (x, y, xm, ym, rv, orient, GHB)
  54.       CHARACTER GHB
  55.       INTEGER x,y,rv, orient
  56.       INTEGER i, result
  57.       REAL xm, ym
  58.       INTEGER yinc
  59.       REAL xminc, xinc
  60.       LOGICAL p
  61.       INCLUDE 'FGRAPH.FD'
  62.  
  63.       result = 0
  64.       yinc = INT(y/ym)
  65.       xinc = 1/xm
  66.       xminc = xinc * x
  67.       DO i = 0, 7
  68.         IF (GetPrnPixel(INT(xminc), yinc, orient) .GT. 0) THEN
  69.           p = .TRUE.
  70.         ELSE
  71.           p = .FALSE.
  72.         END IF
  73.         IF (rv .EQ. 1)  p = .NOT. (p)
  74.         IF (p) result = IBSet(result,7-i)
  75.         xminc = xminc + xinc
  76.       END DO
  77.       GHB = CHAR(result)
  78.       END !SUBROUTINE
  79.  
  80.       SUBROUTINE GetVertByte (x, y, numPix, xm, ym, rv, orient, GVB)
  81.       CHARACTER GVB
  82.       INTEGER x,y, numPix,  rv, orient
  83.       INTEGER n, i, e,bm, l
  84.       REAL xm, ym
  85.       INTEGER xinc
  86.       REAL yinc, yminc
  87.       LOGICAL p
  88.       INCLUDE 'FGRAPH.FD'
  89.  
  90.       e = y + numPix - 1
  91.       bm = 0
  92.       l = 0
  93.       n = numPix - 1
  94.       xinc = INT(x/xm)
  95.       yinc = 1/ym
  96.       yminc = y * yinc
  97.       DO i = y, e
  98.         IF (GetPrnPixel(xinc,INT(yminc), orient) .GT. 0) then
  99.           p = .TRUE.
  100.         ELSE
  101.           p = .FALSE.
  102.         END IF
  103.         IF (rv .EQ. 1)  p = .NOT. (p)
  104.         IF (p)    bm = IBSet(bm,n-l)
  105.         l = l + 1
  106.         yminc = yminc + yinc
  107.       END DO
  108.       GVB = CHAR(bm)
  109.       END ! SUBROUTINE
  110.  
  111.  
  112.       INTEGER FUNCTION PrinterErr (i)
  113.       INTEGER i, prnerr
  114.       IF ((i .EQ.32) .OR. (i .EQ. 8) .OR. (i .EQ. 1)) THEN
  115.          prnerr = 1
  116.        ELSE
  117.          prnerr = 0
  118.        END IF
  119.        PrinterErr = 0
  120.       END !FUNCTION
  121.  
  122.  
  123.  
  124.       SUBROUTINE OutPrnChar (Prnport, ch, prnerr)
  125.       INTEGER Prnport, prnerr
  126.       INTEGER * 2 err,port
  127.       CHARACTER ch
  128.  
  129.       prnerr = 0
  130.       port = Prnport
  131.       SELECT CASE (port)
  132.       CASE (0, 1)
  133.           CALL POC(port, ch, err)
  134.       CASE (2)
  135.          CALL Send_Com(ch,err)
  136.       CASE DEFAULT
  137.           CALL POC (port, ch, err)
  138.       END SELECT
  139.       prnerr = err
  140.       END !SUBROUTINE
  141.  
  142.  
  143.  
  144.  
  145.       SUBROUTINE OutPrnStr (Prnport, S , prnerr)
  146.       INTEGER Prnport, prnerr, L
  147.       CHARACTER * 80 S
  148.  
  149.       prnerr = 0
  150.       L = LEN_TRIM(S)
  151.       DO i = 1, L
  152.          CALL OutPrnChar(Prnport, S( i:i), prnerr)
  153.       END DO
  154.       END !SUBROUTINE
  155.  
  156.  
  157.  
  158.       SUBROUTINE EpsonFXSD (Prnport, res,xm,ym,rv, orient, ff, prnerr)
  159.       INTEGER PrnPort, res, rv, orient, ff, prnerr
  160.       CHARACTER * 80  ResArray,  linespace
  161.       CHARACTER * 80  CR,graphInit, endgraph
  162.       CHARACTER ch, ESC
  163.       INTEGER maxX, maxY, x, y, PrinterErr, GetPrnmaxX, GetPrnmaxY
  164.       REAL xm, ym
  165.  
  166.       ESC = CHAR(27)
  167.       CALL InitStr(lineSpace)
  168.       CALL InitStr(endGraph)
  169.       CALL InitStr(ResArray)
  170.       CALL InitStr(CR)
  171.       CALL InitStr(GraphInit)
  172.       ResArray(1:1) = CHAR(75)
  173.       ResArray(2:2) = CHAR(76)
  174.       ResArray(3:3) = CHAR(89)
  175.       ResArray(4:4) = CHAR(90)
  176.       CALL GetMaxCoords(maxX, maxY)
  177.  
  178.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  179.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  180.       prnerr = 0
  181.       res = res + 1
  182.       IF (res .GT. 4) res = 1
  183.       CR(1:1) = CHAR(13)
  184.       CR(2:2) = CHAR(10)         ! { carriage return line feed }
  185.       lineSpace(1:1) = ESC
  186.       lineSpace(2:2) = 'A'
  187.       lineSpace(3:3) = CHAR(8)  ! {set line spacing for 8/72}
  188.       endGraph(1:1) = ESC
  189.       endGraph(2:2) = 'A'
  190.       endGraph(3:3) = CHAR(12)  ! {set line spacing for 12/72}
  191.       y = 0
  192.       graphInit(1:1) = ESC
  193.       graphInit(2:2) = ResArray(res:res)
  194.       graphInit(3:3) = CHAR(IAND(maxX,255))
  195.       graphInit(4:4) = CHAR(maxX/256)
  196.       CALL OutPrnStr(Prnport, lineSpace, prnerr)
  197.       IF (PrinterErr(prnerr) .EQ. 0) THEN
  198.         DO WHILE (y .LT. maxY)
  199.           CALL OutPrnStr(Prnport, graphInit, prnerr)
  200.           IF (PrinterErr(prnerr) .EQ. 0) THEN
  201.             DO x = 0, maxX - 1
  202.               CALL GetVertByte(x, y, 8, xm, ym, rv, orient, ch)
  203.               CALL OutPrnChar(Prnport, ch, prnerr)
  204.             END DO
  205.             IF (PrinterErr(prnerr) .NE. 0 ) STOP
  206.             CALL OutPrnStr(Prnport, CR, prnerr)
  207.             y = y + 8
  208.           END IF
  209.         END DO
  210.         CALL OutPrnStr(Prnport, CR, prnerr)
  211.         CALL OutPrnStr(Prnport, endGraph, prnerr)
  212.     ! {Form feed if called for}
  213.         IF (ff .EQ. 0)
  214.      +    CALL OutPrnChar(Prnport, CHAR(12), prnerr)
  215.       END IF
  216.       END !SUBROUTINE
  217.  
  218.       SUBROUTINE EpsonLQSD(Prnport, res,xm,ym,rv, orient, ff,prnerr)
  219.       INTEGER PrnPort, res, rv, orient, ff, prnerr
  220.       CHARACTER * 80  ResArray, linespace
  221.       CHARACTER * 80 CR,graphInit, endgraph
  222.       CHARACTER ch, ESC
  223.       INTEGER maxX, maxY, x, y, PrinterErr, GetPrnmaxX, GetPrnmaxY
  224.       REAL xm, ym
  225.  
  226.       ESC = CHAR(27)
  227.       CALL InitStr(lineSpace)
  228.       CALL InitStr(endGraph)
  229.       CALL InitStr(ResArray)
  230.       CALL InitStr(CR)
  231.       CALL InitStr(GraphInit)
  232.       ResArray(1:1) = CHAR(32)
  233.       ResArray(2:2) = CHAR(29)
  234.       ResArray(3:3) = CHAR(38)
  235.       ResArray(4:4) = CHAR(39)
  236.       ResArray(5:5) = CHAR(40)
  237.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  238.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  239.       prnerr = 0
  240.       IF (res .GT. 8)  res = 1
  241.       IF (res .LT. 5) THEN
  242.          CALL EpsonFXSD(Prnport, res, xm, ym, rv, orient, ff, prnerr)
  243.       ELSE
  244.         res = res - 4
  245.         lineSpace(1:1) = ESC           ! {set line spacing for 8/60}
  246.         linespace(2:2) = 'A'
  247.         linespace(3:3) = CHAR(8)
  248.         endGraph(1:1) = ESC
  249.         endGraph(2:2) = '@'
  250.         CR(1:1) = CHAR(13)
  251.         CR(2:2) = CHAR(10)
  252.         y = 0
  253.         graphInit(1:1) = ESC
  254.         graphInit(2:2) = '*'
  255.         graphInit(3:3) = ResArray(res:res)
  256.         graphInit(4:4) = CHAR(IAND(maxX,255))
  257.         graphInit(5:5) = (maxX/256)
  258.         CALL OutPrnStr(Prnport, lineSpace, prnerr)
  259.         IF (PrinterErr(prnerr) .EQ. 0) THEN
  260.           DO WHILE (y .LT. maxY)
  261.             CALL OutPrnStr(Prnport, graphInit, prnerr)
  262.             IF ( PrinterErr(prnerr) .EQ. 0) THEN
  263.               DO x = 0 , maxX - 1
  264.                 DO l = 0 , 2
  265.                   CALL GetVertByte(x, y + l * 8, 8, xm, ym, rv,
  266.      +                             orient, ch)
  267.                   CALL OutPrnChar(Prnport, ch, prnerr)
  268.                 END DO
  269.               END DO
  270.               IF (PrinterErr(prnerr) .NE. 0) STOP
  271.               CALL OutPrnStr(Prnport, CR, prnerr)
  272.               y = y + 24
  273.             END IF
  274.           END DO
  275.           CALL OutPrnStr(Prnport, endGraph, prnerr)
  276.         END IF
  277.         IF (ff.EQ. 0)  ! {Form feed if called for}
  278.      +     CALL OutPrnChar(Prnport, CHAR(12), prnerr)
  279.       END IF
  280.       END !SUBROUTINE
  281.  
  282.  
  283.  
  284.  
  285.       SUBROUTINE EpsonMXSD (Prnport, res,xm,ym,rv, orient, ff,prnerr)
  286.       INTEGER PrnPort, res, rv, orient, ff, prnerr
  287.       CHARACTER * 80  ResArray,  linespace
  288.       CHARACTER * 80 CR,graphInit, endgraph
  289.       CHARACTER ch, ESC
  290.       INTEGER maxX, maxY, x,y, PrinterErr, GetPrnmaxX, GetPrnmaxY
  291.       REAL xm, ym
  292.  
  293.       ESC = CHAR(27)
  294.       CALL InitStr(lineSpace)
  295.       CALL InitStr(endGraph)
  296.       CALL InitStr(ResArray)
  297.       CALL InitStr(CR)
  298.       CALL InitStr(GraphInit)
  299.       ResArray(1:1) = CHAR(75)
  300.       ResArray(2:2) = CHAR(76)
  301.       ResArray(3:3) = CHAR(89)
  302.       ResArray(4:4) = CHAR(90)
  303.  
  304.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  305.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  306.       prnerr = 0
  307.       res = res + 1
  308.       IF (res .GT. 4)  res = 1
  309.       ! { carriage return line feed }
  310.       CR(1:1) = CHAR(13)
  311.       CR(2:2) = CHAR(10)
  312.  
  313.       lineSpace(1:1) = ESC
  314.       lineSpace(2:2) = 'A'
  315.       lineSpace(3:3) = CHAR(8)
  316.       lineSpace(4:4) = ESC
  317.       lineSpace(5:5) = CHAR(50)  ! {set line spacing for 8/72}
  318.       endGraph(1:1) = ESC
  319.       endgraph(2:2) = 'A'
  320.       endgraph(3:3) = CHAR(12)
  321.       endgraph(4:4) = ESC
  322.       endgraph(5:5) =  CHAR(50)  ! {set line spacing for 12/72}
  323.       y = 0
  324.       graphInit(1:1) = ESC
  325.       graphInit(2:2) = ResArray(res:res)
  326.       graphInit(3:3) = CHAR(IAND(maxX,255))
  327.       graphInit(4:4) = CHAR(maxX/256)
  328.       CALL OutPrnStr(Prnport, lineSpace, prnerr)
  329.       IF (PrinterErr(prnerr) .EQ. 0) THEN
  330.         DO WHILE (y .LT. maxY)
  331.           CALL OutPrnStr(Prnport, graphInit, prnerr)
  332.           IF (PrinterErr(prnerr) .EQ. 0) THEN
  333.             DO x = 0, maxX - 1
  334.               CALL GetVertByte(x, y, 8, xm, ym, rv, orient, ch)
  335.               CALL OutPrnChar(Prnport, ch, prnerr)
  336.             END DO
  337.             IF (PrinterErr(prnerr) .NE. 0) STOP
  338.             CALL OutPrnStr(Prnport, CR, prnerr)
  339.             y = y + 8
  340.           END IF
  341.         END DO
  342.         CALL OutPrnStr(Prnport, CR, prnerr)
  343.         CALL OutPrnStr(Prnport, endGraph, prnerr)
  344.         IF (ff .EQ. 0)         ! {Form feed if called for}
  345.      +    CALL OutPrnChar(Prnport, CHAR(12), prnerr )
  346.       END IF
  347.       END !SUBROUTINE
  348.  
  349.  
  350.  
  351.       SUBROUTINE HPLaserPlusSD(Prnport,res,xm,ym,rv,orient,ff, prnerr)
  352.       INTEGER PrnPort, res, rv, orient, ff, prnerr
  353.       CHARACTER * 80  wstring,ResString,outString
  354.       CHARACTER * 80  endgraph
  355.       CHARACTER ch,ESC
  356.       INTEGER l,maxX, maxY, x, y, GetPrnmaxX, GetPrnmaxY
  357.       REAL length, xm, ym
  358.  
  359.       ESC = CHAR(27)
  360.       CALL InitStr(wString)
  361.       CALL InitStr(endGraph)
  362.       CALL InitStr(ResString)
  363.       CALL InitStr(OutString)
  364.  
  365.         SELECT CASE (res)
  366.           CASE (0)
  367.              resString = '100'
  368.           CASE (1)
  369.              resString = '100'
  370.           CASE (2)
  371.              resString = '150'
  372.           CASE (3)
  373.              resString = '300'
  374.           CASE DEFAULT
  375.             CALL resString = '100'
  376.         END SELECT
  377.  
  378.       endGraph(1:1) = ESC
  379.       endgraph(2:2) = '*'
  380.       endgraph(3:3) = 'r'
  381.       endgraph(4:4) = 'B'
  382.  
  383.       prnerr = 0
  384.       outString(1:1) = ESC
  385.       outString(2:2) = '*'
  386.       outString(3:3) = 't'
  387.       CALL Concat(outString,resString)
  388.       CALL AddChar(outString,'R')
  389.       CALL OutPrnStr(Prnport, outString, prnerr)
  390.       CALL InitStr(OutString)
  391.       outString(1:1) = ESC
  392.       outString(2:2) = '*'
  393.       outString(3:3) = 'r'
  394.       outString(4:4) = '0'
  395.       outString(5:5) = 'A'
  396.  
  397.       CALL OutPrnStr(Prnport, outString, prnerr)
  398.  
  399.       CALL InitStr(OutString)
  400.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  401.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  402.       l = maxX / 8
  403.       length = INT(l)
  404.       CALL RealToString(length,0,1,wstring)
  405.       outString(1:1) = ESC
  406.       outString(2:2) = '*'
  407.       outString(3:3) = 'b'
  408.       CALL Concat(outstring,wstring)
  409.       CALL AddChar(outstring,'W')
  410.       DO y = 0 , maxY - 1
  411.         ! {Transfer raster graphics}
  412.         CALL OutPrnStr(Prnport, outString, prnerr)
  413.         DO x = 0 , (maxX - 1) / 8
  414.           CALL GetHorizByte(x * 8, y, xm, ym, rv, orient, ch)
  415.           CALL OutPrnChar(Prnport, ch, prnerr)
  416.         END DO
  417.       END DO
  418.       CALL OutPrnStr(Prnport, endGraph, prnerr)     ! {End raster graphics}
  419.       IF (ff .EQ. 0)  ! {Form feed if called for}
  420.      +   CALL OutPrnChar(Prnport, CHAR(12), prnerr)
  421.       END !SUBROUTINE
  422.  
  423.  
  424.  
  425.       SUBROUTINE HPThinkJetSD (Prnport,res,xm,ym,rv,orient,ff,prnerr)
  426.       INTEGER PrnPort, res, rv, orient, ff, prnerr
  427.       CHARACTER * 80  outString, wstring,resString
  428.       CHARACTER * 80 graphInit, endgraph
  429.       CHARACTER ch, ESC
  430.       INTEGER maxX, maxY, x, y, GetPrnmaxX, GetPrnmaxY
  431.       REAL length, xm, ym
  432.  
  433.       ESC = CHAR(27)
  434.  
  435.       CALL InitStr(wString)
  436.       CALL InitStr(endGraph)
  437.       CALL InitStr(ResString)
  438.       CALL InitStr(OutString)
  439.       CALL InitStr(graphInit)
  440.  
  441.       IF (res .EQ. 0) THEN
  442.         ResString = '640'
  443.       ELSE
  444.         ResString = '1280'
  445.       END IF
  446.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  447.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  448.       endGraph(1:1) = ESC
  449.       endgraph(2:2) = '*'
  450.       endgraph(3:3) = 'r'
  451.       endgraph(4:4) = 'B'
  452.       prnerr = 0
  453.       outString(1:1) = ESC
  454.       outString(2:2) = '*'
  455.       outString(3:3) = 'r'
  456.       CALL concat(outString, ResString )
  457.       CALL AddChar(outString,'S')
  458.       CALL OutPrnStr(Prnport, outString, prnerr)
  459.  
  460.       outString(1:1) = ESC
  461.       outString(2:2) = '*'
  462.       outString(3:3) = 'r'
  463.       outString(4:4) = 'A'
  464.       CALL OutPrnStr(Prnport, outString, prnerr)
  465.       l = maxX / 8
  466.       length = INT(l)
  467.       CALL RealToString(length,0,1,wstring)
  468.       graphInit(1:1) = ESC
  469.       graphInit(2:2) = '*'
  470.       graphInit(3:3) = 'b'
  471.       CALL Concat(graphInit,wString)
  472.       CALL AddChar(graphInit,'W')
  473.       DO y = 0 , maxY - 1
  474.         CALL OutPrnStr(Prnport, graphInit, prnerr)    ! {Transfer raster graphics}
  475.         DO x = 0 , (maxX - 1) / 8
  476.           CALL GetHorizByte(x * 8, y, xm, ym, rv, orient, ch)
  477.           CALL OutPrnChar(Prnport, ch, prnerr)
  478.         END DO
  479.       END DO
  480.       CALL OutPrnStr(Prnport, endGraph, prnerr)     ! {End raster graphics}
  481.       IF (ff .EQ. 0) CALL OutPrnChar(Prnport, CHAR(12), prnerr)
  482.       END !SUBROUTINE
  483.  
  484.  
  485.  
  486.  
  487.       SUBROUTINE ToshibaPSD (Prnport, res,xm,ym,rv,orient,ff,prnerr)
  488.       INTEGER PrnPort, res,  rv, orient, ff, prnerr
  489.       CHARACTER * 80  ResArray, linespace
  490.       CHARACTER * 80 graphInit, endgraph, ncol,  CR
  491.       CHARACTER  ESC
  492.       CHARACTER ch
  493.       INTEGER maxX, maxY, x, y, PrinterErr, GetPrnmaxX, GetPrnmaxY
  494.       REAL length, xm, ym
  495.  
  496.       CALL InitStr(lineSpace)
  497.       CALL InitStr(endGraph)
  498.       CALL InitStr(ResArray)
  499.       CALL InitStr(CR)
  500.       CALL InitStr(ncol)
  501.       CALL InitStr(GraphInit)
  502.  
  503.       ESC = CHAR(27)
  504.       res = res + 1
  505.       ResArray(1:1) = ';'
  506.       ResArray(2:2) = CHAR(29)
  507.       ResArray(3:3) = ';'
  508.       ResArray(4:4) = ';'
  509.       prnerr = 0
  510.       maxX = INT((GetPrnmaxX(orient) + 1) * xm)
  511.       maxY = INT((GetPrnmaxY(orient) + 1) * ym)
  512.  
  513.       IF (res .GT. 2) res = 1
  514.         lineSpace(1:1) = ESC
  515.         lineSpace(2:2) = 'L'
  516.         lineSpace(3:3) = '0'
  517.         lineSpace(4:4) = '7'
  518.         endGraph(1:1) = ESC
  519.         endGraph(2:2) = CHAR(26)
  520.         endGraph(3:3) = 'I'
  521.         CR(1:1) = CHAR(13)
  522.         CR(2:2)= CHAR(10)
  523.         y = 0
  524.         length = REAL(maxX)
  525.         CALL RealToString(length,0,4,nCol)
  526.         IF (ncol(1:1) .EQ. ' ' )  ncol(1:1) = '0'
  527.         graphInit(1:1) = ESC
  528.         graphInit(2:2) = ResArray(res:res)
  529.         CALL Concat(graphInit,nCol)
  530.         CALL OutPrnStr(Prnport, lineSpace, prnerr)
  531.         IF (PrinterErr(prnerr) .EQ. 0) THEN
  532.           DO WHILE (y .LT. maxY)
  533.             CALL OutPrnStr(Prnport, graphInit, prnerr)
  534.             IF (PrinterErr(prnerr) .EQ. 0) THEN
  535.               DO x = 0 , maxX - 1
  536.                 DO l = 0 , 3
  537.                   CALL GetVertByte(x,y+l*6,6,xm,ym,rv,orient,ch)
  538.                   CALL OutPrnChar(Prnport, ch, prnerr)
  539.                 END DO
  540.               END DO
  541.               IF (PrinterErr(prnerr) .NE. 0) STOP
  542.               CALL OutPrnStr(Prnport, CR, prnerr)
  543.               y = y + 24
  544.             END IF
  545.           END DO
  546.           CALL OutPrnStr(Prnport, endGraph, prnerr)
  547.         END IF
  548.         IF (ff .EQ. 0 )
  549.      +    CALL OutPrnChar(Prnport, CHAR(12), prnerr)
  550.         ! {Form feed if called for}
  551.  
  552.       END !SUBROUTINE
  553.  
  554.  
  555.  
  556.  
  557.  
  558.       SUBROUTINE ScreenDump (printer,Prnport,res,xm,ym,
  559.      +    rv, orient, ff,prnerr)
  560.       INCLUDE 'GrafType.FOR'
  561.       INTEGER printer, PrnPort, res, rv, orient, ff, prnerr, gmx, gmy
  562.       CHARACTER * 3 ESC
  563.       REAL xm, ym
  564.       COMMON /ESCCHAR/ ESC
  565.       LOGICAL CRTGraphOnF, PlotterOnF
  566.       COMMON /OnOff/ CRTGraphOnF, PlotterOnF
  567.  
  568.       IF (CRTGraphOnF) THEN
  569.         ESC = CHAR(27)
  570.         prnerr = 0
  571.         CALL GetMaxCoords( gmx, gmy )
  572.         CALL SetGraphViewport( 0, 0, gmx, gmy )
  573.  
  574.         SELECT CASE (printer)
  575.           CASE (0)
  576.              CALL EpsonMXSD(Prnport,res,xm, ym, rv, orient, ff, prnerr)
  577.           CASE (1)
  578.              CALL EpsonLQSD(Prnport,res,xm, ym, rv, orient, ff, prnerr)
  579.           CASE (2)
  580.              CALL ToshibaPSD(Prnport,res,xm, ym,rv, orient, ff, prnerr)
  581.           CASE (3)
  582.              CALL HPLaserPlusSD(Prnport,res,xm,ym,rv, orient, ff,prnerr)
  583.           CASE (4)
  584.              CALL HPThinkJetSD(Prnport,res,xm,ym,rv, orient, ff, prnerr)
  585.           CASE (5)
  586.              CALL EpsonFXSD(Prnport,res,xm, ym, rv, orient, ff, prnerr)
  587.           CASE DEFAULT
  588.             CALL EpsonMXSD(Prnport,res,xm, ym, rv, orient, ff, prnerr)
  589.         END SELECT
  590.       END IF
  591.  
  592.  
  593.       END !SUBROUTINE
  594.  
  595. ! Enhancement
  596. ! 1/23/90 All screen dumps now display in landscape mode
  597. !         xm and ym multipliers now are Real type
  598. ! 2/21/90 The screen dump routines were sped up by eliminating redundant
  599. !         multiplies and divides in the GetHorizByte and GetVertByte
  600. !         routines.