home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / m2mdemopakdisk3.dms / m2mdemopakdisk3.adf / Text / Graphics.zoo / Views.def < prev    next >
Text File  |  1989-10-15  |  20KB  |  535 lines

  1. DEFINITION MODULE Views;
  2.  
  3.  
  4. (* M2Amiga Graphics Report Library Version 1.31  1-Sep-89 *)
  5.  
  6.  
  7.  
  8. FROM SYSTEM IMPORT
  9.        ADDRESS;
  10. FROM Exec IMPORT
  11.        Byte;       
  12. FROM Graphics IMPORT 
  13.        ViewPortPtr, ViewPtr, BitMapPtr, RastPortPtr;
  14.  
  15.  
  16. TYPE 
  17.  
  18.   ViewSafe;
  19.  
  20.   ViewType= (vt0,vtGenlockVideo,vtLace,vt3,vt4,vt5,vtPfba,vtExtraHalfbrite,
  21.             vtGenlocAudio,vt9,vtDualpf,vtHam,vt12,vtHide,vtSprite,vtHires);
  22.   ViewTypeSet = SET OF ViewType;             
  23.  
  24.        
  25.  
  26. PROCEDURE OpenView (vp : ViewPortPtr): ViewPtr;
  27. PROCEDURE CloseView (VAR v : ViewPtr);
  28. PROCEDURE InitView (vp : ViewPortPtr): ViewPtr;
  29. PROCEDURE SwapView (v: ViewPtr): ViewPtr;
  30. PROCEDURE CreateVPort (prev: ViewPortPtr; vWidth, vHeight : INTEGER;
  31.                        rWidth, rHeight, rDepth: INTEGER; 
  32.                        color: ADDRESS; type: ViewTypeSet): ViewPortPtr;
  33. PROCEDURE ModifyVPort (v: ViewPtr; vp: ViewPortPtr; width, height: INTEGER;
  34.                        type: ViewTypeSet);
  35. PROCEDURE DeleteVPort (vp: ViewPortPtr);
  36. PROCEDURE LinkDualPF (vp: ViewPortPtr; width, height: INTEGER; 
  37.                       equDepth: BOOLEAN; color: ADDRESS): BOOLEAN;
  38. PROCEDURE LinkDoublePF (v: ViewPtr; vp: ViewPortPtr): ViewSafe;
  39. PROCEDURE DeleteDoublePF (vs: ViewSafe);
  40. PROCEDURE SwapDoublePF (v: ViewPtr; vp: ViewPortPtr; vs: ViewSafe; 
  41.                         rp: RastPortPtr);
  42. PROCEDURE PFToFront(v: ViewPtr; vp: ViewPortPtr; twoToFront: BOOLEAN);
  43. PROCEDURE GetPlanePtr (vp: ViewPortPtr; plane: Byte): ADDRESS;
  44. PROCEDURE GetBitmapPtr (vp : ViewPortPtr; dual: BOOLEAN): BitMapPtr;
  45. PROCEDURE SetRasOffset (v: ViewPtr; vp: ViewPortPtr; rx,ry: INTEGER);
  46. PROCEDURE GetRasOffset (vp: ViewPortPtr; VAR rx,ry: INTEGER);
  47. PROCEDURE SetViewOffset(v: ViewPtr; vp: ViewPortPtr; dx,dy: INTEGER);
  48. PROCEDURE GetViewOffset(vp: ViewPortPtr; VAR dx,dy: INTEGER);
  49. PROCEDURE GetActView(): ViewPtr;
  50. PROCEDURE DisplayOn;
  51. PROCEDURE DisplayOff;
  52.  
  53.  
  54.  
  55. END Views.
  56.  
  57.  
  58.  
  59.  
  60.  
  61. @ OpenView (vp : ViewPortPtr): ViewPtr
  62.  
  63.   Funktion
  64.         OpenView() öffnet  einen  Graphic  Bildschirm  mit  den im ViewPort
  65.         Record 'vp' gewählten Optionen.
  66.   Eingabe
  67.         vp - Zeiger zu einem initialisierten ViewPort.
  68.   Resultat
  69.         Zeiger zum geöffneten View,  oder NIL,  wenn ein Fehler aufgetreten
  70.         ist.
  71.  
  72.         
  73.     
  74.     
  75. @ CloseView (VAR v : ViewPtr)
  76.  
  77.   Funktion
  78.         CloseView() schließt den bezeichneten Graphic Bidschirm.  Wenn  der
  79.         Bildschirm der zur Zeit aktive View ist,  wird  vor  dem  Schließen
  80.         des Views die Prozedur DisplayOff aufgerufen. 
  81.   Eingabe
  82.         v - Zeiger auf den Graphic Bildschirm, der geschlossen werden soll.
  83.   Ausgabe
  84.         v - Zeigt auf NIL, wenn der View geschlossen ist.
  85.     
  86.     
  87.     
  88.     
  89. @ InitView (vp : ViewPortPtr): ViewPtr
  90.  
  91.   Funktion
  92.         InitView() initialisiert einen View-Record und  liefert die Adresse
  93.         als Resultat. InitView() verhält sich,  wie  OpenView().  Der  neue 
  94.         Bildschirm wird aber noch nicht angezeigt.  Es muß anschließend die 
  95.         Prozedur SwapView() aufgerufen werden um den Bildschirm anzuzeigen.
  96.         OpenView()  kann  also  durch  InitView()  und  SwapView()  ersetzt
  97.         werden. Dieses kann erforderlich  sein,  wenn  nach  der  Initiali-
  98.         sierung,  bevor  der  View  angezeigt  wird, noch Änderungen an den 
  99.         Records vorgenommen werden sollen,  wie  zum  Beispiel  das Anfügen
  100.         einer UserCopperList. 
  101.   Eingabe
  102.         vp - Zeiger zum initialisierten ViewPort.
  103.   Resultat
  104.         Zeiger zum initialisierten View.
  105.     
  106.     
  107.     
  108.     
  109. @ SwapView (v: ViewPtr): ViewPtr
  110.  
  111.   Funktion
  112.         Die Prozedur SwapView ermöglicht  das Umschalten zwischen verschie-
  113.         denen Views.  Es  kann  zwischen  eigenen  Views oder auch zwischen 
  114.         einem eigenen und z. B.  dem  Workbench Screen umgeschaltet werden.
  115.   Eingabe
  116.         v - Zeigt auf den View der angezeigt werden soll.
  117.   Resultat
  118.         Liefert einen Zeiger auf den View,  der bisher angezeigt wurde.  Es 
  119.         wird so ermöglicht,  den  Zeiger zu verwahren um später wieder (z.B 
  120.         am Programm Ende) auf  den  ursprünglichen  View  zurückzuschalten.
  121.  
  122.  
  123.  
  124.  
  125. @ CreateVPort (prev: ViewPortPtr; vWidth, vHeight : INTEGER;
  126.                        rWidth, rHeight, rDepth: INTEGER; 
  127.                        color: ADDRESS; type: ViewTypeSet): ViewPortPtr
  128.  
  129.   Funktion
  130.         Die Prozedur CreateVPort() installiert alle Records  und  Bitplanes
  131.         die zur Erzeugung eines neuen  Viewports  erforderlich  sind.  Wenn 
  132.         mehrere Viewports eingerichtet werden sollen, können diese  mitein-
  133.         ander verkettet werden.    
  134.   Eingabe
  135.         prev - Zeiger zum vorigen ViewPort,  wenn  mehrere ViewPort mitein-
  136.             ander verkettet werden sollen.  prev => NIL bei einem einzelnen
  137.             ViewPort. 
  138.         vWidth - Breite des Displays in Pixel.
  139.         vHeight - Höhe des Displays in Pixel.
  140.         rWidth - Breite der BitPlanes.
  141.         rHeight - Höhe der BitPlanes.
  142.         rDepth - Anzahl der BitPlanes.
  143.         color - Zeiger zu einer Farbtabelle.  Wenn  color = NIL,  wird  die
  144.             Standart Farbtabelle geladen.
  145.         type - ViewPortType. Siehe unten.
  146.   Resultat
  147.         Zeiger auf den initialisierten ViewPort, oder NIL,  wenn ein Fehler
  148.         aufgetreten ist.
  149.       
  150.             
  151.     
  152.                                     
  153. @ ModifyVPort (v: ViewPtr; vp: ViewPortPtr;
  154.                width, height: INTEGER; type: ViewTypeSet)
  155.  
  156.   Funktion
  157.         Mit  ModifyVPort()  können  die  Parameter eines Viewports geändert
  158.         werden. 
  159.   Eingabe
  160.          v - Zeiger zum View,  wenn der Viewport  zur Zeit aktiv ist.  Wenn
  161.              der Viewport nicht aktiviert ist(vor dem Aufruf von OpenView() 
  162.              oder nach CloseView) wird der Wert NIL übergeben.
  163.         vp - Zeiger zum ViewPort,  dessen Parameter geändert werden sollen.
  164.         width - Neue Breite des ViewPorts. 
  165.         height - Neue Höhe des ViewPorts.
  166.         type - ViewType siehe unten.
  167.         
  168.         
  169.         
  170.         
  171. @ DeleteVPort (vp: ViewPortPtr)
  172.  
  173.   Funktion
  174.         DeleteVPort() löscht einen mit der Prozedur CreateVPort() erzeugten 
  175.         ViewPort,  einschließlich  aller  weiteren  Records  und  Bitplanes 
  176.         und gibt den reservierten  Speicher  wieder an das  System  zurück.
  177.   Eingabe 
  178.         vp - Zeiger zum ViewPort, der gelöscht werden soll.
  179.  
  180.  
  181.  
  182.  
  183. @ LinkDualPF (vp: ViewPortPtr; width, height: INTEGER; 
  184.               equDepth: BOOLEAN; color: ADDRESS): BOOLEAN
  185.  
  186.   Funktion
  187.         LinkDualPF initialisiert  eine zweite Bitmap für einen ViewPort zur
  188.         Erzeugung einer DualPlayField Graphik.
  189.   Eingabe
  190.         vp - Zeiger zum ViewPort.  
  191.         width - Breite der Bitplanes.
  192.         height - Höhe der BitPlanes.
  193.         equDepth -  TRUE => der zweite Bildschirm hat die gleiche Tiefe wie
  194.             der erste (Anzahl der BitPlanes).   FALSE => der  zweite  Bild-
  195.             schirm hat eine Bitplane weniger als der erste.
  196.         color - Zeiger zur Farbtabelle der zweiten Bitmap.
  197.   Resultat
  198.         TRUE => wenn die Initialisierung erfolgreich war.
  199.  
  200.  
  201.  
  202.  
  203. @ LinkDoublePF (v: ViewPtr; vp: ViewPortPtr): ViewSafe
  204.  
  205.   Funktion
  206.         LinkDoublePF() erzeugt  eine  zweite BitMap und führt die Initiali-
  207.         sierung zur Steuerung des Double-Buffered-Displays durch.  
  208.   Eingabe
  209.         v - Zeiger zum initialisierten View.
  210.         vp - Zeiger zum initialisierten ViewPort.
  211.   Ausgabe 
  212.         Zeiger zu einem intnen Datenfeld,  in dem die Parameter beschrieben
  213.         sind, die von der Prozedur SwitchView() zum Umschalten  der BitMaps
  214.         benötigt werden.  Wenn ein Fehler aufgetreten ist, wird NIL zurück-
  215.         gegeben.
  216.         
  217.         
  218.         
  219.         
  220. @ DeleteDoublePF (vs: ViewSafe)
  221.  
  222.   Funktion
  223.         DeleteDoublePF() löscht eine BitMap eines Double-Buffered-Displays.
  224.         Es wird die BitMap gelöscht,  die  zu  diesem Zeitpunkt nicht ange-
  225.         zeigt wird.  
  226.   Eingabe
  227.         vs - Resultat Wert von LinkDoublePF().
  228.  
  229.  
  230.  
  231.  
  232. @ SwapDoublePF (v: ViewPtr; vp: ViewPortPtr; vs: ViewSafe; rp: RastPortPtr)
  233.  
  234.   Funktion
  235.         SwapDoublePF()  schaltet  bei einem Double-Buffered-Display auf den
  236.         anderen Bilschirm um. 
  237.   Eingabe
  238.         v - Zeiger zum View.
  239.         vp - Zeiger zum ViewPort.
  240.         vs - ViewSafe => Resultatwert von LinkDoublePF.
  241.         rp - Kann den Zeiger zum RastPort enthalten.  Die Prozedur schaltet
  242.            dann auch die Bitmap des Rastports um.  Dem  RastPort wird immer
  243.            die BitMap zugewiesen, die bis zu diesem  Zeitpunkt dem ViewPort
  244.            zugewiesen war.  Es ist so möglich, daß mit einem RastPort immer
  245.            in der Bitmap geschrieben wird,  die  zur  Zeit  nicht angezeigt
  246.            wird.  Wenn diese Umschaltung nicht gewünscht wird, kann in rp =
  247.            NIL eingesetzt werden.
  248.  
  249.  
  250.  
  251.  
  252. @ PFToFront(v: ViewPtr; vp: ViewPortPtr; twoToFront: BOOLEAN)
  253.  
  254.   Funktion
  255.         PFToFront()  bestimmt  bei  einem  Dual-Playfield-Display,  welcher
  256.         Bildschirm vorn und welcher hinten liegt. 
  257.   Eingabe
  258.         v - Zeiger zum View.
  259.         vp - Zeiger zum ViewPort.
  260.         twoToFront - TRUE => Bildschirm 2 nach vorne.
  261.                      FALSE => Bildschirm 1 nach vorne.
  262.                      
  263.                     
  264.  
  265.  
  266. @ GetPlanePtr (vp: ViewPortPtr; plane: Byte): ADDRESS
  267.  
  268.   Funktion
  269.         Diese Prozedur ermittelt die Adresse einer Bitplane.
  270.   Eingabe
  271.         vp - Zeiger zum ViewPort:
  272.             plane - Die Nummer der gewünschten Bitplane. Wenn eine negative
  273.             Zahl übergeben wird,  liefert  die  Prozedur  die Adresse einer  
  274.             Bitmap des zweiten Bildschirms eines  Dual-Playfield Viewports.
  275.             Es  muß  beachtet  werden das man,  um  die  Adresse der ersten
  276.             Bitplane zu erhalten,  eine 1 oder (-1) übergeben muß und nicht
  277.             eine Null.
  278.   Resultat
  279.         Adresse der BitPlane.
  280.  
  281.  
  282.  
  283.  
  284. @ GetBitmapPtr (vp : ViewPortPtr; dual: BOOLEAN): BitMapPtr
  285.  
  286.   Funktion
  287.         Diese Prozedur ermittelt den Zeiger auf den BitMap Record eines
  288.         ViewPorts.
  289.   Eingabe
  290.         vp - Zeiger zum ViewPort.
  291.         dual - TRUE => nur bei Dual-Playfield-Displays, wenn der Zeiger auf
  292.             den Record von Bitmap  zwei  gesucht  wird.  In  allen  anderen
  293.             Fällen muß FALSE  eingesetzt werden.
  294.   Resultat
  295.         Zeiger zum BitMap Record.
  296.  
  297.  
  298.  
  299. @ SetRasOffset (v: ViewPtr; vp: ViewPortPtr; rx,ry: INTEGER)
  300.  
  301.   Funktion
  302.         SetRasOffset() bestimmt den Ausschnitt des  Rasters,  daß der View-
  303.         port anzeigt, wenn die Bitplanes größer als der Bildauschnitt sind.
  304.         Es ist eine Größe bis zu 1024 x 1024 Pixel möglich.  Diese Prozedur
  305.         kann auch vor OpenView() aufgerufen werden,  um den Anfangwert ein-
  306.         zustellen.  
  307.   Eingabe
  308.         v - Zeiger zum View, wenn der View bereits geöffnet wurde, oder NIL
  309.             vor dem Öffnen des Views.
  310.         vp - Zeiger zum ViewPort.
  311.         rx - Offset zum linken Rand  der BitPlanes.  Die  BitPlanes  werden
  312.             ab dieser horizontale  Position  von diesem ViewPort angezeigt.
  313.         ry - Offset zum oberer Rand  der  Bitplane.  Die  BitPlanes  werden
  314.             ab dieser vertikalen Position  von  diesem  ViewPort angezeigt. 
  315.  
  316.  
  317.  
  318.  
  319. @ GetRasOffset (vp: ViewPortPtr; VAR rx,ry: INTEGER)
  320.  
  321.   Funktion
  322.         Diese Prozedur ermittelt den  Offset  der  BitPlanes  im  ViewPort.
  323.         Weiter Informationen siehe oben unter SetRasOffset.
  324.   Eingabe
  325.         vp - Zeiger zum ViewPort.
  326.   Ausgabe
  327.         rx - Offset der Horizontal-Position.
  328.         ry - Offset der Vertikal-Position.
  329.         
  330.         
  331.         
  332.  
  333. @ SetViewOffset(v: ViewPtr; vp: ViewPortPtr; dx,dy: INTEGER)
  334.  
  335.   Funktion
  336.         SetViewOffset()  bestimmt die  Position des Viewports auf dem Bild-
  337.         schirm. Voreingestellt ist die Position 0,0.  Es ist eine Verschie-
  338.         bung bis -16 oder -32,  je nach horizontaler bzw. vertikaler Auflö-
  339.         sung  möglich. Oder in den positiven Bereich entsprechend der Größe
  340.         des Viewports.   SetViewOffset()  kann  vor  OpenView()  aufgerufen
  341.         werden, um den Anfangwerts  einzustellen.  
  342.   Eingabe
  343.         v - Zeiger zum View,  wenn  der View bereits  geöffnet wurde.  Wenn 
  344.             noch kein View geöffnet wurde, wird  v = NIL übergeben.
  345.         vp - Zeiger zum ViewPort.
  346.         dx - Horizontale Position des ViewPorts.
  347.         dy - Vertikale Position des ViewPorts.
  348.         
  349.         
  350.         
  351.         
  352. @ GetViewOffset(vp: ViewPortPtr; VAR dx,dy: INTEGER)
  353.  
  354.   Funktion
  355.         Diese Prozedur ermittelt  den eingestellten  Offset  des  ViewPort.
  356.         Weitere Informationen siehe oben unter SetViewOffset.
  357.   Eingabe
  358.         vp - Zeiger zum ViewPort.
  359.   Ausgabe
  360.         dx - Horizontale Position des ViewPorts.
  361.         dy - Vertikale Position des ViewPorts.
  362.         
  363.         
  364.         
  365.         
  366. @ GetActView(): ViewPtr
  367.  
  368.   Funktion
  369.         GetActView liefert die Adresse des aktivierten Views.
  370.   Resultat
  371.         Zeiger zum View Record des aktiven Views.
  372.  
  373.  
  374.  
  375. @ DisplayOff()
  376.  
  377.   Funktion
  378.         Mit dieser Prozedur kann der Bildschirm ausgeschaltet werden.
  379.  
  380.  
  381.  
  382.  
  383. @ DisplayOn()
  384.  
  385.   Funktion
  386.         Diese Prozedur schaltet den  Bildschirm nach DisplayOff wieder ein.
  387.  
  388.  
  389.  
  390. TYPE
  391.  
  392. @ ViewType (vt0, vtGenlockVideo,vtLace,vt3,vt4,vt5,vtPfba,vtExtraHalfbrite,
  393.               vt8,vt9,vtDualpf,vtHam,vt12,vtHide,vtSprite,vtHires);
  394.  
  395.   vtGenlockVideo - Der  Hintergrund  wird  durch  eine  externe Videoquelle
  396.         dargestellt (z.B. Video-Kamera oder Recorder).  Außerdem  wird  ein
  397.         Genlock-Interface benötigt.
  398.   vtLace - Interlace Modus. Maximal 512 Zeilen = PAL oder 400 Zeilen  NTSC.
  399.   vtPfba - Priorität  der beiden Ebenen im DualPlayfiel - Modus.  Wird  von 
  400.         diesem Modul automatisch bei Bedarf gesetzt.
  401.   vtExtraHalfbrite - Ermöglicht  die  Darstellung   bis   zu  64  Farbtöne. 
  402.   vtDualpf - DualPlayfield. Wird von  diesem  Modul  automatisch bei Bedarf 
  403.       gesetzt.
  404.   vtHam - Ham Modus ermöglich 4096 Farben. Weitere Informationen finden Sie
  405.       im Modul Ham.
  406.   vtHide - Wird vom System gesetzt,  wenn  sich  zwei ViewPorts überlappen.
  407.   vtSprite - Muß gesetzt werden,  wenn innerhalb des ViewPorts Sprites oder
  408.       VSprites angezeigt werden sollen.
  409.   vtHires - Schaltet den hochauflösenden  Modus  ein (640 Pixel pro Zeile).
  410.       Bei gelöschtem Bit  ist die Auflösung 320 Pixel pro Zeile.
  411.  
  412.                 
  413.         
  414. ---------------------------------------------------------------------------
  415.  
  416.  
  417. Information
  418.  
  419. Dieses Modul unterstützt  die  Programmierung  von Graphik-Displays auf der
  420. untersten  Ebene  des Betriebssystems.  Die Grundlage  des Displays ist der
  421. View.  Er ist die Verbindung zur Hardware des Amigas.  Ein View besteht aus
  422. einem oder  mehereren ViewPorts.  Der  ViewPort  beschreibt,  was  auf  dem
  423. Display zu  sehen  ist (z.B. die Größe und Auflösung des sichbaren Bildes).
  424. Ein ViewPort kann mit einem Intuition Screen verglichen werden. Tatsächlich
  425. ist ein Intuition.Screen nicht anderes als ein erweiterter ViewPort. So wie
  426. mehrere Screens gleichzeitig angezeigt werden können,  ist  es auch möglich
  427. mehrere  ViewPorts gleichzeitig darzustellen.  Es  besteht  dabei  die Ein-
  428. schränkung, daß ViewPorts nur untereinander (nicht nebeneinander) mit einem
  429. Zwischenraum von  einer  Zeile  angezeigt  werden  können.  Wenn  sich  die
  430. ViewPorts überlappen,  wird  der  obere  ViewPort in diesem Bereich von dem
  431. unteren verdeckt.
  432.  
  433. Halfbrite -
  434.   Der  Amiga  hat 32 Farbregister  und  kann  daher  normalerweise mit fünf
  435.   BitPlanes 32 Farben darstellen.  Im  Halfbrite  Modus  können  jedoch mit
  436.   sechs BitPlanes und einem Trick 64 Farben dargestellt  werden.  Zur  Dar-
  437.   stellung der Farben 32 bis 63 werden  ebenfalls die Farbregister 0 bis 31
  438.   verwendet.  Allerdings werden die Farben mit der halben Helligkeit darge-
  439.   stellt.
  440.   
  441. Hold-And-Modify (HAM) -
  442.   Im Ham Modus können bis zu 4096 Farben gleichzeitig  dargestellt  werden.
  443.   Da auch im Ham-Modus nur fünf oder sechs Bitplanes verwendet werden,  muß
  444.   hier ein besonderes Verfahren angewendet werden.  Zu diesem Zweck enthält
  445.   diese Bibliothek das Modul Ham,  mit dem das Zeichnen in diesem Modus un-
  446.   terstützt wird.  Im Modul Ham finden Sie auch eine ausführliche Beschrei-
  447.   bung dieses Verfahrens.
  448.   
  449. Double-Buffering -
  450.   Der Double-Buffering-Modus unterstützt das Arbeiten mit zwei Bildschirmen
  451.   im Bereich der Grafik.  Das  bedeutet,  daß  jeweils  in  dem  Bildschirm
  452.   gezeichnet wird, der gerade nicht sichtbar ist. Wenn das Bild fertig ist,
  453.   werden die Bildschirme umgeschaltet.  So  erscheint das neue Bild schlag-
  454.   artig. Jetzt kann das nächste Bild im Hintergrund gezeichnet werde.  Nach
  455.   der Fertigstellung wird wieder umgeschaltet. Mit dieser Methode kann eine
  456.   ruckelfreie Animation erzeugt werden.
  457.   
  458. Dual-Playfield -    
  459.   In diesem Modus arbeitet der Amiga  mit zwei Displayebenen die hinterein-
  460.   ander liegen. Der vordere Bildschirm ist im Bereich der Hintergrund-Farbe
  461.   transparent. In diesem Bereich ist also der  hintere Bildschirm  sichbar.
  462.   Dieser Modus wird  zum  Beispiel  in  Spielen  sehr  oft verwendet, um im
  463.   Vordergrund ein Cockpit abzubilden und im Hintergrund eine Landschaft die
  464.   unabhängig vom Vordergrund gescrollt werden kann.
  465.   
  466.   
  467.  
  468. ---------------------------------------------------------------------------  
  469.  
  470. Handhabung
  471.  
  472. Ein eigener Graphic Bildschirm kann  mit  der  Prozedur OpenView() geöffnet
  473. werden. Den erforderlichen Parameter 'vp'(ViewPortPtr) liefert die Prozedur 
  474. CreateVPort().  Zum  Schließen  des  Graphic  Bildschirms  wird CloseView()
  475. aufgerufen. Anschließend kann der ViewPort mit DeleteVPort() wieder freige-
  476. geben werden. Nach dem Schließen des Views bleibt der Bildschirm dunkel. Es
  477. wird nicht automatisch zum Workbench  Screen  zurückgeschaltet.  Zu  diesem
  478. Zweck  stellt das Modul die  Prozedur  SwapView() zur Verfügung. Sie ermög-
  479. licht das Umschalten zwischen verschiedenen  Graphic Bildschirmen  oder dem
  480. Workbench Screen. Um am Programmende zum Workbench Screen zurückschalten zu
  481. können muß nach dem Start der  Zeiger  zum  Workbench Screen(View)  mit der 
  482. Procedur GetActView() gesichert werden. 
  483.  
  484.  
  485. Das folgende Beispiel zeigt das Schema einer Display Verwaltung:.
  486.  
  487. (* aktiven View sichern *)
  488.   activView := GetActView();
  489.  
  490. (* Display einrichten *)
  491.   viewPort := CreateVPort(NIL,vpWi,vpHe,rastWi,rastHi,rastDe,color,type);
  492.   view := OpenView(vp);
  493.  
  494. (* Programm ausführen *)
  495.   Haupt Programm....
  496.   ...
  497.   ...Ende
  498.  
  499. (* Display scließen *)
  500.   CloseView(view);
  501.   DeleteVPort(vp);
  502.  
  503. (* auf den alten View zurückschalten *)
  504.   SwapView(activView);
  505.   DisplayOn();
  506.  
  507.  
  508. Das  Beispiel  zeigte  den  Normalfall  eines Graphic Screens. Wenn darüber
  509. hinaus mehrere ViewPorts auf einem View dargestellt werden sollen, wird die
  510. Prozedur CreateVPort()  mehrfach  aufgerufen.  Als  erster  Parameter  wird
  511. jeweils der vorige ViewPort eingesetzt.  Die  ViewPorts werden dann automa-
  512. tisch in einer Liste verkettet.  Der Prozedur OpenView() wird  die  Adresse
  513. des ersten ViewPorts übergeben.  Wenn der View nur initialisiert, aber noch
  514. nicht angezeigt werden soll,  kann statt OpenView() die Prozedur InitView()
  515. aufgerufen werden.  Dem erfahrenen Programmierer ist es  so  möglich,  noch
  516. Änderungen an dem initialisierten  View  durchzuführen (z.B das Anfügen von
  517. CopperLists),  bevor  der View aktiviert wird.  Mit der Prozedur SwapView()
  518. kann der View dann eingeschaltet werden. Die Prozedur OpenView() setzt sich
  519. also aus InitView() und SwapView() zusammen.
  520.  
  521. Ein Dual-Playfield wird  in der gleichen Weise erzeugt,  wie es oben in dem 
  522. Beispiel gezeigt wurde.  Zusätzlich  wird  nach  CreatVPort()  die Prozedur
  523. LinkDualPf() aufgerufen um die zweite Bitplane  zu  erzeugen.  Die Prozedur
  524. DeleteVPort() löscht beide Bitplanes eines Dual-Playfields. 
  525.  
  526. Zur Erzeugung eines Double-Buffering-Displays wird  nach  CreateVPort() die
  527. Prozedur LinkDoublePF() aufgerufen.  Zum  Umschalten  der  Bildschirme wird
  528. die Prozedur SwapDoublePF() zur Verfügung gestellt.  Die zweite  Bitmap des
  529. Displays muß vor dem verlassen des Programms mit der Procedur DeleteDouble-
  530. PF() wieder freigegeben werden. 
  531.  
  532.  
  533.  
  534.  
  535.