mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-26 17:49:18 +00:00
307 lines
20 KiB
Plaintext
307 lines
20 KiB
Plaintext
Screen 0 not modified
|
||
0 \\ *** EDWINDOW.SCR *** 14sep86we
|
||
1
|
||
2 Dieses File enth„lt das Editorfenster. Es kann als Beispiel f<>r
|
||
3 die Programmierung eines eigenen Fensters benutzt werden.
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 1 not modified
|
||
0 \ Window-Handling Loadscreen 30oct86we
|
||
1
|
||
2 Onlyforth Gem also definitions
|
||
3
|
||
4 1 7 +thru
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 2 not modified
|
||
0 \ VDI-Functions for window 24aug86we
|
||
1
|
||
2 : bar ( x1 y1 x2 y2 -- )
|
||
3 ptsin 4 array! 1 function ! &11 2 0 VDI ;
|
||
4
|
||
5 : swr_mode ( mode -- ) intin ! &32 0 1 VDI ;
|
||
6
|
||
7 : sf_interior ( style -- ) intin ! &23 0 1 VDI ;
|
||
8 : sf_style ( styleindex -- ) intin ! &24 0 1 VDI ;
|
||
9 : sf_color ( color -- ) intin ! &25 0 1 VDI ;
|
||
10 : sf_perimeter ( pervis -- ) intin ! &104 0 1 VDI ;
|
||
11
|
||
12 : fbox ( x1 y1 x2 y2 -- )
|
||
13 1 swr_mode 1 sf_interior 0 sf_color 0 sf_perimeter bar ;
|
||
14
|
||
15
|
||
Screen 3 not modified
|
||
0 \ save and restore the screen 10sep86we
|
||
1
|
||
2 ?head @ 1 ?head !
|
||
3
|
||
4 Create memMFDB2 7 , 0 , &640 , &400 , &40 , 0 , 1 ,
|
||
5 0 , 0 , 0 ,
|
||
6
|
||
7 memMFDB2 scr>mem scr>mem2 ( Xleft Ytop Width Heigth -- )
|
||
8 memMFDB2 mem>scr mem2>scr ( Xleft Ytop Width Heigth -- )
|
||
9
|
||
10 : save_screen 0 0 cwidth &80 * cheight &25 *
|
||
11 scr>mem2 ;
|
||
12 : restore_screen 0 0 cwidth &80 * cheight &25 *
|
||
13 mem2>scr ;
|
||
14
|
||
15
|
||
Screen 4 not modified
|
||
0 \ Windowcomponents and Windowsize 30aug86we
|
||
1
|
||
2 :name :move + :info + :uparrow + :dnarrow + :vslide +
|
||
3 Constant wi_components
|
||
4
|
||
5 : wi_x ( -- n ) dx cwidth * ;
|
||
6 : wi_y ( -- n ) dy cheight * ;
|
||
7 : wi_width ( -- n ) c/l cwidth * ;
|
||
8 : wi_height ( -- n ) l/s cheight * ;
|
||
9
|
||
10 : wi_size ( -- wx wy wwidth wheight )
|
||
11 0 wi_components
|
||
12 wi_x 1- wi_y 1- wi_width 2+ wi_height 2+ wind_calc
|
||
13 intout 2+ 4@ ;
|
||
14
|
||
15
|
||
Screen 5 not modified
|
||
0 \ Window's title and sliders 25sep86we
|
||
1
|
||
2 Variable wi_handle
|
||
3
|
||
4 : wi_string ( 0string function# -- ) swap >r
|
||
5 wi_handle @ swap r> >absaddr swap 0 0 wind_set ;
|
||
6
|
||
7 : wi_title ( 0string -- ) :wf_name wi_string ;
|
||
8 : wi_status ( 0string -- ) :wf_info wi_string ;
|
||
9
|
||
10 : vslide_size
|
||
11 wi_handle @ :wf_vslize &1000 capacity / 0 0 0 wind_set ;
|
||
12
|
||
13 : vslide ( scr# -- ) wi_handle @ :wf_vslide
|
||
14 rot &1000 capacity dup 1- IF 1- THEN */
|
||
15 0 0 0 wind_set ;
|
||
Screen 6 not modified
|
||
0 \ Draw window on screen 30aug86we
|
||
1
|
||
2 : small_big ( -- sx sy sw sh bx by bw bh )
|
||
3 little 4@ wi_size ;
|
||
4
|
||
5 : growbox small_big graf_growbox ;
|
||
6 : shrinkbox small_big graf_shrinkbox ;
|
||
7
|
||
8 : wi_clear wi_x 1- wi_y 1-
|
||
9 over wi_width 1+ + over wi_height 1+ + fbox ;
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 7 not modified
|
||
0 \ Open and close window 30aug86we
|
||
1
|
||
2 : wi_open ( -- ) save_screen growbox
|
||
3 wi_components wi_size wind_create dup wi_handle !
|
||
4 pad dup off dup wi_title wi_status
|
||
5 wi_size wind_open wi_clear ;
|
||
6
|
||
7 : wi_close ( -- )
|
||
8 wi_handle @ dup wind_close wind_delete
|
||
9 shrinkbox restore_screen ;
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 8 not modified
|
||
0 \ redrawing the rest of screen 10sep86we
|
||
1
|
||
2 : restore_rect ( x y w h -- ) 1- >r 1- r> mem2>scr ;
|
||
3
|
||
4 : rect_update ( function# -- x y w h )
|
||
5 0 swap wind_get intout 2+ 4@ ;
|
||
6
|
||
7 : redraw_screen :wf_firstxywh rect_update
|
||
8 BEGIN 2dup or
|
||
9 WHILE restore_rect :wf_nextxywh rect_update REPEAT
|
||
10 2drop 2drop ;
|
||
11
|
||
12 ?head !
|
||
13
|
||
14
|
||
15
|
||
Screen 9 not modified
|
||
0 14sep86we
|
||
1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 10 not modified
|
||
0 \ Window-Handling Loadscreen 14sep86we
|
||
1
|
||
2 Suchreihenfolge: Zuerst GEM, dann FORTH
|
||
3
|
||
4 Gebraucht werden die Definitionen aus GEMDEFS.SCR
|
||
5
|
||
6 Dieses Vokabular wird als erstes durchsucht.
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 11 not modified
|
||
0 \ VDI-Functions for window 14sep86we
|
||
1
|
||
2 F<>r das Fenster werden einige Funktionen aus VDI gebraucht,
|
||
3 die auf diesem Screen zusammengestellt sind. Beschreibung siehe
|
||
4 Beschreibung VDI (hoffentlich haben wir die schon!)
|
||
5
|
||
6 Im Grunde wird nur eine Routine benutzt, mit der man ein weižes
|
||
7 Rechteck zum L”schen des Fensterinhaltes erzeugen kann. Dies
|
||
8 erledigt fbox
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 12 not modified
|
||
0 \ save and restore the screen 14sep86we
|
||
1
|
||
2 alle folgenden Funktionen sollen headerless kompiliert werden.
|
||
3
|
||
4 Ein zweiter Speicherbereich wird gebraucht, um den Bildschirm
|
||
5 beim Verlassen des Editors zu restaurieren. Dieses Verfahren
|
||
6 ren ist erheblich schneller als die Neuausgabe des Bildschirms,
|
||
7 braucht aber Speicherplatz (Wir hams ja!)
|
||
8
|
||
9
|
||
10 Der gesamte Bildschirm wird in den daf<61>r vorgesehenen Speicher-
|
||
11 bereich gerettet (aužerhalb des FORTH-Systems, versteht sich)
|
||
12 Das Ganze umgekehrt stellt den Bildschirm wieder her. Diese
|
||
13 Funktionen sind recht n<>tzlich, weil man Werte noch sehen kann,
|
||
14 die z.B. bei LIST weggescrollt w<>rden.
|
||
15
|
||
Screen 13 not modified
|
||
0 \ Windowcomponents and Windowsize 14sep86we
|
||
1
|
||
2 Die Bestandteile des Fensters werden einfach aufaddiert und
|
||
3 als Konstante zur Verf<72>gung gestellt.
|
||
4
|
||
5 linke obere Ecke des Fensters in Bildschirmkoordinaten
|
||
6
|
||
7 Breite des Fensters in Bildschirmkoordinaten
|
||
8 H”he des Fensters in Bildschirmkoordinaten
|
||
9
|
||
10 berechnet die Ausmaže des Fensters f<>r alle weiteren Funktionen
|
||
11 unter Zuhilfenahme von WIND-CALC. Leider liefert diese Funktion
|
||
12 bei Breite und H”he ein Pixel zu wenig. Digital Research allein
|
||
13 mag wissen, warum ...
|
||
14
|
||
15
|
||
Screen 14 not modified
|
||
0 \ Window's title and sliders 14sep86we
|
||
1
|
||
2 Window-Handle des Fensters
|
||
3
|
||
4 zur Ausgabe eines Textes in Titel- oder Infozeile
|
||
5 Der String muž mit einer Null abgeschlossen sein.
|
||
6
|
||
7 gibt 0string in der Titelzeile aus.
|
||
8 gibt 0string in der Infozeile aus.
|
||
9
|
||
10 Die Gr”že des vertikalen Sliders wird aus der Gesamtgr”že des
|
||
11 Files, das editiert wird, berechnet.
|
||
12
|
||
13 Die Position des vertikalen Sliders wird relativ zur Gesamtgr”že
|
||
14 des Files eingestellt.
|
||
15
|
||
Screen 15 not modified
|
||
0 \ Draw window on screen 14sep86we
|
||
1
|
||
2 gibt die Gr”že eines kleinen Rechtecks sowie des ganzen Fensters
|
||
3
|
||
4
|
||
5 zeichnet ein wachsendes Rechteck (nur f<>rs Auge ...)
|
||
6 zeichnet ein schrumpfendes Rechteck ( s.o.)
|
||
7
|
||
8 l”scht den Innenraum des Fenster durch šberschreiben mit einem
|
||
9 weižen Rechteck.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 16 not modified
|
||
0 \ Open and close window 14sep86we
|
||
1
|
||
2 ”ffnet das Editorfenster: Bildschirminhalt merken
|
||
3 Fenster erzeugen mit entsprechender Gr”že und Attributen
|
||
4 Titel- und Infozeile l”schen
|
||
5 Fenster auf dem Bildschirm ausgeben und Inhalt l”schen
|
||
6
|
||
7 schliežt das Editorfenster:
|
||
8 Fenster vom Bildschirm und <20>berhaupt entfernen
|
||
9 Bildschirm restaurieren.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 17 not modified
|
||
0 \ redrawing the rest of screen 14sep86we
|
||
1
|
||
2 Rechteck per Pixelmove restaurieren
|
||
3
|
||
4 liefert die Koordinaten eines neu zu zeichnenden Rechtecks.
|
||
5
|
||
6 Der Screenmanager stellt eine Liste von Rechtecken zurVerf<72>gung,
|
||
7 die nach einer Aktion ge„ndert worden sind.
|
||
8 Durch diese Liste hangelt sich die Routine hindurch und
|
||
9 erzeugt die Rechtecke per Pixelmove (schnell) neu.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|