&&
------------------------------------------------------------------------------
                  CURSUS ASSEMBLER  -  WERKEN MET WINDOWS 5
------------------------------------------------------------------------------

In het vijfde, en laatste, stuk wil ik tekenen in een window. Inmiddels wordt
de tekst zo lang dat ik de stukken die gelijk blijven aan het vorige programma
niet meer uitgebreid laat zien.

  ;
  ; VARIABELEN DEFINIEREN
  ;
  ExecBase=     4
  OpenLibrary=  -$228
  CloseLibrary= -$19E
  Open=         -$1E
  Close=        -$24
  Delay=        -$C6
  OpenWindow=   -$CC
  CloseWindow=  -$48
  WaitPort=     -$0180
  WritePixel=   -$0144            ; Een routine in de graphics.library.
  Move=         -$F0              ; Een routine in de graphics.library.
  Draw=         -$F6              ; Een routine in de graphics.library.
&&
  ;
  ; HET HOOFDPROGRAMMA. HIER ROEPEN WE ALLE ROUTINES AAN.
  ;
  MOVEM.L  D0-D7/A0-A6,-(A7)
  JSR      OpenDos
  CMP.L    #0,D0
  BEQ      Einde
  MOVE.L   D0,DosBase
  JSR      OpenIntuition
  CMP.L    #0,D0
  BEQ      CloseDos
  MOVE.L   D0,IntuiBase
  JSR      OpenGfx                ; Nu moet ook de graphics.library geopend
                                  ;   worden.
  CMP.L    #0,D0                  ; Is het gelukt ?
  BEQ      CloseIntui             ; Nee, stoppen.
  MOVE.L   D0,GFXBase             ; Opslaan van de pointer.
  JSR      OpenWin
  CMP.L    #0,D0
  BEQ      CloseGFX               ; Stoppen.
  MOVE.L   D0,WinHandle
  JSR      Tekenen                ; Hier roepen we de tekenroutine aan.
  JSR      Wachten
  JMP      CloseWin
&&
  ;
  ; OPENEN VAN DE DOS.LIBRARY
  ;

  ;
  ; OPENEN VAN DE INTUITION.LIBRARY
  ;

  ;
  ; OPENEN VAN DE GRAPHICS.LIBRARY
  ;
  OpenGfx:
  MOVE.L   ExecBase,A6            ; Het adres van de exec.library.
  MOVE.L   #GFXNaam,A1            ; De libraryNaam naar A1.
  MOVE.L   #0,D0                  ; Elke versie.
  JSR      OpenLibrary(A6)        ; Open de library.
  RTS

  ;
  ; OPEN VAN HET WINDOW
  ;

  ;
  ; SLUITEN VAN HET WINDOW
  ;
&&
  ;
  ; SLUITEN VAN DE GRAPHICS.LIBRARY
  ;
  CloseGFX:
  MOVE.L   ExecBase,A6            ; Het adres van de exec.library.
  MOVE.L   GFXBase,A1             ; Het adres van de graphics.library.
  JSR      CloseLibrary(A6)       ; Sluiten.

  ;
  ; SLUITEN VAN DE INTUITION.LIBRARY
  ;

  ;
  ; SLUITEN VAN DE DOS.LIBRARY
  ;

  ;
  ; HET EINDE VAN HET PROGRAMMA
  ;

  ;
  ; DE WACHTLUS
  ;
&&
Nu komt de nieuwe routine; de routine die een punt en een lijn tekent.

  ;
  ; PUNT EN LIJN TEKENEN
  ;
  Tekenen:
  MOVE.L   GFXBase,A6             ; Het adres van de graphics.library.
  MOVE.L   WinHandle,A0           ; Het adres van het window.
  MOVE.L   50(A0),A1              ; Het adres van de Rastport in A1.
  MOVE.L   #50,D1                 ; De Y-positie.
  MOVE.L   #50,D0                 ; De X-Positie.
  MOVE.L   WinHandle,A0           ; Het adres van het window.
  MOVE.L   50(A0),A1              ; Het adres van de Rastport in A1.
  JSR      WritePixel(A6)         ; Teken een punt.

  MOVE.L   WinHandle,A0           ; Het adres van het window.
  MOVE.L   50(A0),A1              ; Het adres van de Rastport in A1.
  MOVE.L   #10,D1                 ; De Y-positie.
  MOVE.L   #10,D0                 ; De X-Positie.
  JSR      Move(A6)               ; De pen op de juiste positie zetten.
  MOVE.L   WinHandle,A0           ; Het adres van het window.
  MOVE.L   50(A0),A1              ; Het adres van de Rastport in A1.
  MOVE.L   #150,D1                ; De Y-positie.
  MOVE.L   #400,D0                ; De X-Positie.
  JSR      Draw(A6)               ; De lijn tekenen.
  RTS                             ; Einde routine.
&&
De routine bestaat uit twee delen. Het eerste zet de tekenpen op een bepaalde
coordinaat en drukt dan op het papier, het window. Er komt een punt te staan
op coordinaat (50,50).

De tweede routine geeft ook een coordinaat op. Dan wordt met het commando
MOVE de pen naar die coordinaat bewogen zonder dat er iets getekend wordt.
Dan komt de volgende coordinaat. Met het commando DRAW wordt dan tussen de
twee coordinaten een lijn getrokken.

Getekend wordt overigens met de standaard kleur 1, wit. Wilt u deze veranderen
dan moet dat via een andere funktie van de graphics.library, namelijk SetAPen.
De offset van die routine is -$0156.

  ;
  ; GEHEUGENRESERVERING VOOR DE WINDOW-STRUKTUUR
  ;

  ;
  ; VARIABELEN
  ;
  GFXBase:
  DC.L     0

  GFXNaam:
  DC.B     'graphics.library',0,0
&&
Het programma staat op de diskette. U kunt het vanuit de CLI starten met het
volgende kommando :

Assembler/Window2

De source staat in de sub-directory Assembler.




















- EINDE ----------------------------------------------------------------------
&&
