home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d2xx / d267 / diglib.lha / Diglib / diglib.zoo / diglib / SKELTN.FTN < prev    next >
Encoding:
Text File  |  1989-06-20  |  8.4 KB  |  316 lines

  1.  
  2.  
  3.     SUBROUTINE GD????(IFXN,XA,YA)
  4.     DIMENSION XA(8), YA(3)
  5. C
  6. C    SKELETON DIGLIB GRAPHICS DEVICE DRIVER
  7. C
  8. C-----------------------------------------------------------------------
  9. C
  10. C ARGUMENTS:
  11. C
  12.    INPUT
  13.  
  14.     IFXN        * TYPE: INTEGER CONSTANT OR VARIABLE.
  15.             * THE GRAPHICS FUNCTION TO PERFORM:
  16.                 1 ==> INITIALIZE THE GRAPHICS DEVICE TO PREPARE IT
  17.                    FOR GRAPHICS (AND ON MULTI-USER SYSTEMS, TAKE
  18.  
  19.                    EXCLUSIVE CONTROL OF THE DEVICE.)
  20.                 2 ==> OBTAIN A FRESH PLOTTING SURFACE ON THE
  21.                    GRAPHICS DEVICE.
  22.                 3 ==> MOVE TO A NEW POSITION (X,Y), WHERE THE UNITS
  23.                    OF BOTH X AND Y ARE IN CENTIMETERS.
  24.                 4 ==> DRAW A LINE TO THE POSITION (X,Y), WHERE THE
  25.                    UNITS OF X AND Y ARE IN CENTIMETERS.
  26.                 5 ==> TRANSMIT ANY BUFFERED GRAPHICS COMMANDS THAT
  27.                    HAVE NOT YET BEEN TRANSMITTED TO THE
  28.                    GRAPHICS DEVICE.
  29.                 6 ==> RELEASE CONTROL OF THE GRAPHICS DEVICE.
  30.                 7 ==> RETURN TO THE CALLER THE DEVICE
  31.                    CHARACTERISTICS OF THIS DEVICE.
  32.                 8 ==> SET THE CURRENT DRAWING COLOR.
  33.                 9 ==> PERFORM A GRAPHICS INPUT WITH PICK CHARACTER
  34.                    OPERATION, RETURNING THE USER SELECTED
  35.                    LOCATION (X,Y) WITH X AND Y SPECIFIED IN
  36.                    CENTIMETERS.
  37.                10 ==> SET THE VISUAL COLOR ASSOCIATED WITH A
  38.                    SPECIFIED COLOR NUMBER TO THE RGB VALUE
  39.                    PROVIDED.
  40.                11 ==> SET THE VISUAL COLOR ASSOCIATED WITH A
  41.                    SPECIFIED COLOR NUMBER TO THE HLS VALUE
  42.                    PROVIDED.
  43.             1024+N==> DRAW FILLED POLYGON HAVING N SIDES.
  44.  
  45.     XA        * TYPE: REAL ARRAY.
  46.             * DEPENDANT OF THE GRAPHICS FUNCTION GIVEN BY "IFXN".
  47.                 1 ==> XA(1) IS RT-11 CHANNAL NUMBER ON WHICH
  48.                    TO PERFORM I/O, OR RSX-11M LOGICAL UNIT
  49.                    NUMBER ON WHICH TO PERFORM I/O.
  50.                   XA(2) --> XA(7) UNUSED.
  51.                 2 ==> XA(1) --> XA(7) UNUSED.
  52.                 3 ==> XA(1) IS THE X COORDINATE IN CM. FOR THE
  53.                    MOVE OPERATION.
  54.                   XA(2) --> XA(7) UNUSED.
  55.                 4 ==> XA(1) IS THE X COORDINATE IN CM. FOR THE
  56.                    DRAW OPERATION.
  57.                   XA(2) --> XA(7) UNUSED.
  58.                 5 ==> XA(1) --> XA(7) UNUSED.
  59.                 6 ==> XA(1) --> XA(7) UNUSED.
  60.                 7 ==> XA(1) --> XA(7) UNUSED.
  61.                 8 ==> XA(1) IS COLOR FOR SUBSEQUENT LINES.
  62.                   XA(2) --> XA(7) UNUSED.
  63.                 9 ==> XA(1) --> XA(7) UNUSED.
  64.                10 ==> XA(1) IS THE COLOR TO DEFINE.
  65.                11 ==> XA(1) IS THE COLOR TO DEFINE.
  66.                12 ==> XA(1) --> XA(7) UNUSED.
  67.                1024+N ==> XA(1) --> XA(N) X VERTICES OF POLYGON.
  68.  
  69.     YA        * TYPE: REAL ARRAY
  70.             * DEPENDANT OF THE GRAPHICS FUNCTION GIVEN BY "IFXN".
  71.                 1 ==> YA(1) IS THE ERROR FLAG FOR DEVICE SELECTION:
  72.                      0 ==> NO ERRORS
  73.                     >0 ==> ERROR (DEVICE SPECIFIC)
  74.                   YA(2) --> YA(3) UNUSED.
  75.                 2 ==> YA(1) --> YA(3) UNUSED.
  76.                 3 ==> YA(1) IS THE Y COORDINATE IN CM. FOR THE
  77.                    MOVE OPERATION.
  78.                   YA(2) --> YA(3) UNUSED.
  79.                 4 ==> YA(1) IS THE Y COORDINATE IN CM. FOR THE
  80.                    DRAW OPERATION.
  81.                   YA(2) --> YA(3) UNUSED.
  82.                 5 ==> YA(1) --> YA(3) UNUSED.
  83.                 6 ==> YA(1) --> YA(3) UNUSED.
  84.                 7 ==> YA(1) --> YA(3) UNUSED.
  85.                 8 ==> YA(1) --> YA(3) UNUSED.
  86.                 9 ==> YA(1) --> YA(3) UNUSED.
  87.                10 ==> YA(1) IS % RED COMPONENT OF COLOR.
  88.                   YA(2) IS % GREEN COMPONENT OF COLOR.
  89.                   YA(3) IS % BLUE COMPONENT OF COLOR.
  90.                11 ==> YA(1) IS THE HUE (0-360).
  91.                   YA(2) IS THE LIGHTNESS (0-100).
  92.                   YA(3) IS THE SATURATION (0-100).
  93.                12 ==> YA(1) --> YA(3) UNUSED.
  94.                1024+N ==> YA(1) --> YA(N) Y VERTICES OF POLYGON.
  95.  
  96.    OUTPUT
  97.  
  98.     XA        * TYPE: REAL ARRAY.
  99.             * DEPENDANT OF THE GRAPHICS FUNCTION GIVEN BY "IFXN".
  100.                 1 ==> XA(1) --> XA(7) UNUSED.
  101.                 2 ==> XA(1) --> XA(7) UNUSED.
  102.                 3 ==> XA(1) --> XA(7) UNUSED.
  103.                 4 ==> XA(1) --> XA(7) UNUSED.
  104.                 5 ==> XA(1) --> XA(7) UNUSED.
  105.                 6 ==> XA(1) --> XA(7) UNUSED.
  106.                 7 ==> XA(1) --> XA(7) ARE SET TO THIS DEVICES
  107.                    CHARACTERISTIC WORDS:
  108.                    XA(1) = DEVICE ID. (A UNIQUE DEVICE NUMBER
  109.                        OBTAINED FROM HAL BRAND X26312.
  110.                    XA(2) = X AXIS LENGTH OF THIS DEVICE IN CM.
  111.                    XA(3) = Y AXIS LENGTH IN CM.
  112.                    XA(4) = X AXIS RESOLUTION IN GRAPHICS UNITS
  113.                        (GU) PER CENTIMETER.
  114.                    XA(5) = Y AXIS RESOLUTION IN GU/CM.
  115.                    XA(6) = NUMBER OF AVAILABLE FOREGROUND
  116.                        COLORS ON THIS DEVICE.
  117.                    XA(7) = DEVICE CHARACTERISTICS BITS.
  118.                        THE SUM OF:
  119.                           0 IF STROKE (PLOTTER) DEVICE.
  120.                           1 IF RASTER DEVICE.
  121.                           2 IF DVST (STORAGE TUBE)
  122.                           3 PRINTER/PLOTTER
  123.                           4 IF DRAWING IN THE BACKGROUND
  124.                          COLOR (COLOR 0) IS AVAILABLE.
  125.                           8    IF DEVICE IS A HARDCOPY DEVICE.
  126.                          16    IF DEVICE IS A SHAREABLE
  127.                          DEVICE.
  128.                          32    DEVICE'S COLORS ARE HLS
  129.                          SELECTABLE.
  130.                          64    DEVICE'S COLORS ARE RGB
  131.                          SELECTABLE.
  132.                         128    GRAPHICS INPUT WITH "PICK
  133.                          CHARACTER" IS AVAILABLE.
  134.                         256 DEVICE DRAWS FILLED POLYGONS.
  135.                         512 DEVICE REQUIRES CONVEX
  136.                          POLYGONS.
  137.                        1024    GRAPHICS INPUT WITH BUTTONS
  138.                          IS AVAILABLE.
  139.                   XA(8) = 1 + THE NUMBER OF SCAN LINES TO SKIP
  140.                        WHILE DOING A SOFTWARE POLYGON FILL.
  141.                        THIS VALUE IS USED TO TAKE ACCOUNT
  142.                        OF THE FACT THAT PLOTTERS HAVE PENS
  143.                        THAT ARE TYPICALLY MANY TIMES
  144.                        THICKER THAN THE PLOTTER STEP SIZE.
  145.                        THIS PARAMETER SHOULD BE ONE FOR
  146.                        ALL RASTER DEVICES.   NOTE: FOR
  147.                        BACKWARDS COMPATIBILITY,  THIS
  148.                        VALUE IS DEFAULTED TO ONE, SO ANY
  149.                        DRIVER THAT RETURNS ON THE FIRST 7
  150.                        ARRAY ELEMENTS WILL GET THIS VALUE
  151.                        SET TO 1.
  152.                 8 ==> XA(1) = PICK CHARACTER FROM GRAPHICS DEVICE
  153.                        OR FROM TERMINAL.
  154.                   XA(2) = X COORDINATE SELECTED IN CM.
  155.                   XA(3) = Y COORDINATE SELECTED IN CM.
  156.                   XA(4) --> XA(7) UNUSED.
  157.                 9 ==> XA(1) --> XA(7) UNUSED.
  158.                10 ==> XA(1) --> XA(7) UNUSED.
  159.                11 ==> XA(1) --> XA(7) UNUSED.
  160.                12 ==> XA(1) = BUTTON BITS FROM GRAPHICS DEVICE
  161.                   XA(2) = X COORDINATE SELECTED IN CM.
  162.                   XA(3) = Y COORDINATE SELECTED IN CM.
  163.                   XA(4) --> XA(7) UNUSED.
  164.                1024+N ==> XA(1) --> XA(N) UNUSED.
  165. .END LITERAL
  166.  
  167. C---------------------------------------------------------------------------
  168. C
  169.     DIMENSION DCHAR(8)
  170. C
  171. C    MAKE NICE NAMES FOR THE DEVICES RESOLUTION IN X AND Y
  172. C     ("XGUPCM" IS X GRAPHICS UNITS PER CENTIMETER)
  173. C
  174.     EQUIVALENCE (DCHAR(4),XGUPCM), (DCHAR(5),YGUPCM)
  175.     DATA DCHAR /?,?,?,?,?,?,?,?/
  176. C
  177. C    FIRST VERIFY WE GOT A GRAPHICS FUNCTION WE CAN HANDLE
  178. C
  179.     IF (IFXN .LE. 0 .OR. IFXN .GT. 11) RETURN
  180. C
  181. C    NOW DISPATCH TO THE PROPER CODE TO HANDLE THAT FUNCTION
  182. C
  183.     GO TO (100,200,300,400,500,600,700,800,900,1000,1100) IFXN
  184. C
  185. C    *********************
  186. C    INITIALIZE THE DEVICE
  187. C    *********************
  188. C
  189. 100    CONTINUE
  190.     LUN = XA(1)    !RSX-11M
  191.     ICHAN = XA(1)    !RT-11 USING RT-11 DRIVER
  192.     .
  193.     .
  194.     .
  195.     RETURN
  196. C
  197. C    **************************
  198. C    GET FRESH PLOTTING SURFACE
  199. C    **************************
  200. C
  201. 200    CONTINUE
  202.     .
  203.     .
  204.     .
  205.     RETURN
  206. C
  207. C    ****
  208. C    MOVE
  209. C    ****
  210. C
  211. 300    CONTINUE
  212.     IX = XGUPCM*XA(1)+0.5    !CONVERT CM. TO GRAPHICS UNITS ROUNDED
  213.     IY = YGUPCM*YA(1)+0.5
  214.     .
  215.     .
  216.     .
  217.     RETURN
  218. C
  219. C    ****
  220. C    DRAW
  221. C    ****
  222. C
  223. 400    CONTINUE
  224.     IX = XGUPCM*XA(1)+0.5    !CONVERT CM. TO GRAPHICS UNITS ROUNDED
  225.     IY = YGUPCM*YA(1)+0.5
  226.     .
  227.     .
  228.     .
  229.     RETURN
  230. C
  231. C    *****************************
  232. C    FLUSH GRAPHICS COMMAND BUFFER
  233. C    *****************************
  234. C
  235. 500    CONTINUE
  236.     .
  237.     .
  238.     .
  239.     RETURN
  240. C
  241. C    ******************
  242. C    RELEASE THE DEVICE
  243. C    ******************
  244. C
  245. 600    CONTINUE
  246.     .
  247.     .
  248.     .
  249.     RETURN
  250. C
  251. C    *****************************
  252. C    RETURN DEVICE CHARACTERISTICS
  253. C    *****************************
  254. C
  255. 700    CONTINUE
  256.     DO 720 I=1,8
  257.     XA(I) = DCHAR(I)
  258. 720    CONTINUE
  259.     RETURN
  260. C
  261. C    ****************************
  262. C    SELECT CURRENT DRAWING COLOR
  263. C    ****************************
  264. C
  265. 800    CONTINUE
  266.     ICOLOR = XA(1)
  267.     .
  268.     .
  269.     .
  270.     RETURN
  271. C
  272. C    **********************
  273. C    PERFORM GRAPHICS INPUT
  274. C    **********************
  275. C
  276. 900    CONTINUE
  277.     .
  278.     .
  279.     .
  280.     XA(1) = ICHAR    !PICK CHARACTER
  281.     XA(2) = FLOAT(IX)/XGUPCM    !X IN CENTIMETERS.
  282.     XA(3) = FLOAT(IY)/YGUPCM    !Y IN CM.
  283.     RETURN
  284. C
  285. C    **********************
  286. C    DEFINE COLOR USING RGB
  287. C    **********************
  288. C
  289. 1000    CONTINUE
  290.     ICOLOR = XA(1)
  291. C
  292. C    ASSUME 8 BIT DACS ON ALL THREE COLOR GUNS WHERE:
  293. C       0 ==> NO INTENSITY
  294. C     255 ==> FULL INTENSITY
  295. C
  296.     IRED = 2.55*YA(1) + 0.5
  297.     IGREEN = 2.55*YA(2) + 0.5
  298.     IBLUE = 2.55*YA(3) + 0.5
  299.     .
  300.     .
  301.     .
  302.     RETURN
  303. C
  304. C    ************************
  305. C    DEFINE A COLOR USING HLS
  306. C    ************************
  307. C
  308. 1100    CONTINUE
  309.     ICOLOR = XA(1)
  310.     IHUE = YA(1)
  311.     ILIGHT = YA(2)
  312.     ISATR = YA(3)
  313.     .
  314.     .
  315.     .
  316.     RETURN
  317.     END
  318.  
  319. NESD2$