home *** CD-ROM | disk | FTP | other *** search
File List | 1989-06-20 | 8.6 KB | 198 lines |
- '
- ' PRINTER.LST
- '
- ' Hier haben Sie ein Demo-Druck-Programm. Sie können es sowohl als
- ' Accessory oder als Programm starten. Rufen Sie das Programm auf, wird
- ' immer das erste der reservierten Bilder auf dem Monitor angezeigt
- ' und mit der 'normalen' ST-Hardcopy-Routine ausgedruckt.
- ' In der Procedure 'Printer' können Sie Ihre eigenen Druck-Routinen
- ' einbauen.
- ' An dieser Stelle wünsche Ich Ihnen viel Spaß und Erfolg beim Erstellen
- ' Ihrer eigenen Druckeranpassungen,
- '
- ' Ihr Alexander Stork
- ' (Autor)
- '
- '
- If @Menu_acc !Als ACC geladen?
- Reserve 5000 !Speicher reservieren
- @Menu_register(@Menu_ap.id," Hardcopy #1") !ACC eintragen
- Endif
- '
- Repeat
- If @Menu_acc !ACC?
- Repeat !Dann auf Message ...
- @Evnt_mesag !warten.
- Until @Evnt_mesag(0)=40 !Verlasse bei '40'
- Endif
- '
- @Memo_getadr(*Adresse%,*Anzahl%,*Ext%) !Bildadresse etc. ermitteln
- '
- If Adresse%>0 !Schon Bilder angemeldet?
- Get 0,0,639,18,Menu$ !Menüleiste 'merken'
- Bmove Adresse%,Xbios(3),32000 !Bild #1 anzeigen
- '
- Alert 2,"Hardcopy von diesem|Bild?",1," JA |NEIN",Erg% !Alert
- '
- If Erg%=1 !'JA'
- @Printer !Druckroutine aufrufen
- Endif
- @Redraw !Redraw-Message abschicken
- Else
- Alert 1,"Es sind momentan keine|Bilder im Speicher!",1," OK ",Erg%
- Endif
- Until @Menu_acc=0 !Kein ACC -> zum Desktop
- '
- Procedure Printer
- ' In diese Procedure können Sie eigene Druck-Routinen einbauen. Im
- ' Grunde genommen brauchen Sie dabei nur den Bildspeicher (Xbios(3))
- ' auszulesen und an Ihren Drucker zu senden, da das Bild bereits auf
- ' dem Bildschirm angezeigt wird.
- ' Hier habe ich rein provisorisch den 'Hardcopy'-Befehl eingesetzt,
- ' ersetzen Sie ihn ggf. durch eigene Druck-Routinen.
- '
- Hidem !Maus 'verstecken'
- Hardcopy !Hardcopy
- Showm !Maus wieder zeigen
- Return
- Procedure Redraw
- Deffill 1,2,4 !Graues Muster voreinstellen
- Graphmode 1 !Grafikmodus 'deckend'
- Pbox 0,0,639,399 !gefüllte Box zeichnen
- '
- Put 0,0,Menu$ !Menübalken setzen
- '
- Dpoke Gintin,3
- Dpoke Gintin+2,0
- Dpoke Gintin+4,0
- Dpoke Gintin+6,640
- Dpoke Gintin+8,400
- Dpoke Gintin+10,0
- Dpoke Gintin+12,0
- Dpoke Gintin+14,640
- Dpoke Gintin+16,400
- Gemsys 51 !Redraw-Messages abschicken
- Return
- '
- ' =============================================================================
- ' M E M O R Y 12.05.89
- ' =============================================================================
- '
- ' Wollen Sie mit eigenen Programmen an die reservierten Bilder herankommen,
- ' können Sie dies mit folgenden Routinen ganz einfach tun.
- ' Diese Routinen wurden in GFABASIC 2.0 geschrieben, sollten aber in der
- ' Version 3.0 ebenfalls laufen.
- '
- ' Hier werden zunächst die einzelnen Routinen kurz dargestellt. Anschließend
- ' folgt dann deren Programmtext.
- '
- ' Bsp.1: @Memo_getadr(*Adresse%,*Anzahl%,*Ext%)
- ' Man erhält die Startadresse und die Anzahl der Bilder sowie
- ' eine Zusatzinformation (Integer, 2 Byte).
- '
- ' Bsp.2: @Memo_putadr(Adresse%,5,0)
- ' Falls Bilder reserviert wurden, können diese hier angemeldet werden.
- ' In diesem Fall befinden sich 5 Bilder ab Adresse 'Adresse%'.
- ' Als Zusatzinformation wird eine '0' übergeben.
- '
- ' Bsp.3: @Memo_putadr(Adresse%,12,-1)
- ' Es werden neue Werte für Adresse und Anzahl der Bilder gesetzt.
- ' Die Zusatzinfo bleibt unverändert. Wenn negative Werte übergeben
- ' werden, bleibt der jeweilige Parameter unverändert.
- '
- ' Bsp.4: @Memo_clradr
- ' So werden die Informationen des Infospeichers gelöscht, d.h. es
- ' werden die ersten zwei Bytes der Kennung gelöscht, so daß die
- ' restlichen Informationen von der Procedure Memo_getadr() nicht
- ' mehr erkannt werden.
- '
- ' So sieht das Format des 16 Byte langen Informationsspeichers aus. Er liegt
- ' hinter dem (phys.) Bildspeicher, also ab Xbios(2)+32000.
- '
- ' PICTUREvaaaannee = 16Bytes
- ' | || | |
- ' | || | erweiterte Information (z.Zt.=0): Wort/14
- ' | || Anzahl der Bilder: Wort/12
- ' | |Adresse des 1. Bildes: Langwort/8
- ' | Format-Version (=0): Byte/7
- ' Kennung: 7 Byte String/0
- '
- ' Hier sind die Routinen zur Abfrage des Speichers:
- '
- Procedure Memo_getadr(Aptr.%,Nptr.%,Eptr.%)
- Local Adresse.%,Info$,Adr.%,Num.%,Ext.% !Lokale Variablen
- '
- Info$=Space$(7) !7-Byte-String vorbereiten
- Adresse.%=Xbios(2)+32000 !Adresse ermitteln
- Bmove Adresse.%,Varptr(Info$),7 !Kennung in String kopieren
- '
- If Info$="PICTURE" And Peek(Adresse.%+7)=0 !Kennung und Version abfragen
- Adr.%=Lpeek(Adresse.%+8) !Bildadresse ...
- Num.%=Dpeek(Adresse.%+12) !Anzahl der Bilder ...
- Ext.%=Dpeek(Adresse.%+14) !und Zusatzinformationen holen
- ' !(-> ist zur Zeit unbenutzt)
- Else
- Adr.%=-1 !Bei falscher Kennung ...
- Num.%=-1 !wird jeder Variable ...
- Ext.%=-1 !'-1' übergeben
- '
- Endif
- '
- *Aptr.%=Adr.% !Und nun alle ...
- *Nptr.%=Num.% !Werte über die Pointer ...
- *Eptr.%=Ext.% !zurückgeben
- Return
- Procedure Memo_putadr(Adr%,Num%,Ext%)
- Local Adresse%,Kennung$ !Lokale Variablen
- '
- Kennung$="PICTURE" !Kennungs-String definieren
- Adresse%=Xbios(2)+32000 !Adresse ermitteln
- '
- Bmove Varptr(Kennung$),Adresse%,7 !Kennung übertragen
- '
- If Adr%>=0
- Lpoke Adresse%+8,Adr% !Adresse, ...
- Endif
- If Num%>=0
- Dpoke Adresse%+12,Num% !Anzahl und ...
- Endif
- If Ext%>=0
- Dpoke Adresse%+14,Ext% !Zusatzinfo setzen
- Endif
- Return
- Procedure Memo_clradr
- Local Adresse% !Lokale Variable
- '
- Adresse%=Xbios(2)+32000 !Adresse ermitteln
- '
- Dpoke Adresse%,0 !Kennung löschen
- Return
- ' =============================================================================
- ' M E N Ü 12.05.89
- ' =============================================================================
- Deffn Menu_acc=(Lpeek(Basepage+&H24)=0) !Ist '-1' wenn als ACC geladen
- Deffn Menu_ap.id=Dpeek(Lpeek(Gb+4)+4) !Applikations-ID
- Procedure Menu_register(Ap.id%,Nam$) !Appl.-ID und ACC-Name übergeben
- Nam$=Nam$+Chr$(0) !Nullbyte anhängen
- Bmove Varptr(Nam$),Basepage+192,Len(Nam$) !String auf freien Speicher
- ' !der Basepage schieben
- '
- Dpoke Gintin,Ap.id% !Appl.-ID übergeben
- Lpoke Addrin,Basepage+192 !String-Adresse übergeben
- '
- Gemsys 35 !AES-Routine ausführen
- Return
- ' =============================================================================
- ' E V E N T 12.05.89
- ' =============================================================================
- Deffn Evnt_mesag(N%)=Dpeek(Evnt_buffer%+N%*2) !Liest Event-Message-Buffer
- Procedure Evnt_mesag !Wartet auf ein "Event"
- Erase Evnt_buffer%() !Eventbuffer ...
- Dim Evnt_buffer%(3) !initialisieren (16 Bytes)
- '
- Evnt_buffer%=Varptr(Evnt_buffer%(0)) !Buffer-Adresse ermitteln ...
- Lpoke Addrin,Evnt_buffer% !und an das AES übergeben
- '
- Gemsys 23 !AES-Routine ausführen
- Return
-