DEFINT "a-z" GOSUB init GOSUB main GOSUB ende ' > PROCEDURE init DIM f(100),x(100),y(100),w(100),h(100),ic(100) ! 100 Fenster reichen... scx=WORK_OUT(0) scy=WORK_OUT(1) f_ic$=STRING$(100,CHR$(0)) CLIP OFF RETURN > PROCEDURE main GOSUB open_window REPEAT event=EVNT_MULTI(&X110011,2,1,1,0,0,0,0,0,0,0,0,0,0,0,100,x,y,k,shift,key,z) ' IF BTST(event,0) AND key=14624 GOSUB open_window ENDIF IF BTST(event,1) ! Mausklick handle=WIND_FIND(x,y) i=FN handle_2_index(handle) IF ic(i)<>0 IF shift AND 3 ! Shift gedrckt GOSUB uniconify_all_windows ELSE GOSUB uniconify_window_st(handle) ENDIF ENDIF ' ENDIF ' IF BTST(event,4) SELECT MENU(1) CASE 20 ! Redraw ' handle=MENU(4) BOUNDARY 0 DEFFILL 1,2,MENU(4) AND 7 ~GRAF_MOUSE(256,0) ~WIND_UPDATE(1) ~WIND_GET(0,4,xmin,ymin,wmax,hmax) ~WIND_GET(handle,11,x,y,w,h) WHILE w<>0 OR h<>0 IF RC_INTERSECT(xmin,ymin,wmax,hmax,x,y,w,h) IF RC_INTERSECT(MENU(5),MENU(6),MENU(5)+MENU(7),MENU(6)+MENU(8),x,y,w,h) PBOX x,y,x+w,y+h ENDIF ENDIF ~WIND_GET(handle,12,x,y,w,h) WEND ~WIND_UPDATE(0) ~GRAF_MOUSE(257,0) BOUNDARY 1 DEFFILL 1,1 ' CASE 22 ! Closer IF shift=0 GOSUB close_window(MENU(4)) ELSE IF shift AND 3 ! Shift gedrckt GOSUB iconify_all_windows ELSE IF shift AND 8 ! Alternate gedrckt GOSUB iconify_window_st(MENU(4)) ENDIF ' CASE 28 ! Moved ~WIND_SET(MENU(4),5,MENU(5),MENU(6),MENU(7),MENU(8)) ' CASE 21 ! Topped ~WIND_SET(MENU(4),10,x,y,w,h) ENDSELECT ENDIF UNTIL windows=0 RETURN ' > PROCEDURE ende LOCAL i FOR i=1 TO 100 IF f(i) GOSUB close_window(f(i)) ENDIF NEXT i RETURN ' > PROCEDURE open_window LOCAL handle,i,x,y,w,h IF windows<100 handle=WIND_CREATE(&X1010,0,0,scx,scy) IF handle>0 i=1 WHILE f(i)<>0 INC i WEND INC windows f(i)=handle w=scx/5 h=scy/5 x=(i AND 7)*(w/2) y=(i DIV 8 AND 7)*h/2.2+30 ic(i)=0 ~WIND_OPEN(handle,x,y,w,h) ELSE ALERT 1,"Kein Fenster verfgbar",1,"OK",ok ENDIF ELSE ALERT 1,"Schon 100 Fenster|offen",1,"Abbruch",ok ENDIF RETURN > PROCEDURE close_window(handle) LOCAL i i=FN handle_2_index(handle) IF f(i)=handle ~WIND_CLOSE(handle) ~WIND_DELETE(handle) DEC windows f(i)=0 ENDIF RETURN ' > FUNCTION handle_2_index(handle) LOCAL i i=1 WHILE i<100 AND f(i)<>handle INC i WEND RETURN i ENDFUNC ' > PROCEDURE test_cookie(kenn$,VAR flag,wert) REM REM REM Modul: test_cookie REM REM V1.0 vom 21.11.90 REM REM Testet, ob der angegebene Cookie im Cookie-Jar installiert ist. REM Rckgabe: flag = 0 - nicht installiert REM oder flag = -1 - installiert, wert = Parameter des Cookie REM LOCAL cookie,such_kennung,kennung such_kennung=CVL(kenn$) cookie=LPEEK(&H5A0) IF cookie<>0 REPEAT kennung=LPEEK(cookie) wert=LPEEK(cookie+4) ADD cookie,8 UNTIL kennung=such_kennung OR kennung=0 IF kennung=0 flag=0 wert=0 ELSE flag=-1 ENDIF ELSE flag=0 wert=0 ENDIF RETURN ' ' ' *************************************************************************** ' ' Iconify Demo V1.0 ' ' 7.3.94 ' ' by Reiner Rosin @ WI2 ' ' *************************************************************************** ' ' > PROCEDURE get_ic_pos(nr,VAR x,y,w,h) LOCAL flag,icfs,data INLINE data,8 GOSUB test_cookie("ICFS",flag,icfs) IF flag ic(nr)=C:icfs(1,L:data,L:data+2,L:data+4,L:data+6) ' x=CARD{data} y=CARD{data+2} w=CARD{data+4} h=CARD{data+6} ' ELSE w=72 h=72 x=INSTR(f_ic$,CHR$(0)) MID$(f_ic$,x,1)=CHR$(nr) zy=(x-1) DIV (scx DIV 72) x=(x-1-zy*(scx DIV 72))*72 y=scy-h*(zy+1) ic(nr)=-1 ENDIF RETURN > PROCEDURE free_ic(nr) LOCAL flag,icfs LOCAL z ' IF ic(nr)>0 GOSUB test_cookie("ICFS",flag,icfs) IF flag ' ~C:icfs(2,ic(nr)) ENDIF ELSE z=INSTR(f_ic$,CHR$(nr)) IF z MID$(f_ic$,z,1)=CHR$(0) ENDIF ENDIF ic(nr)=0 RETURN ' > PROCEDURE iconify_window_st(handle) LOCAL x,y,w,h,z$,datei$,zy,nr ' nr=FN handle_2_index(handle) ' ~WIND_GET(handle,5,x,y,w,h) ' x(nr)=x y(nr)=y w(nr)=w h(nr)=h ' ' GOSUB get_ic_pos(nr,x,y,w,h) ' ~WIND_CLOSE(f(nr)) ~WIND_DELETE(f(nr)) f(nr)=WIND_CREATE(&X1001,0,0,w,h) ' ~WIND_OPEN(f(nr),x,y,w,h) ' RETURN > PROCEDURE uniconify_window_st(handle) ' LOCAL z,i,x,y,w,h,z$,datei$,nr ' nr=FN handle_2_index(handle) ' GOSUB free_ic(nr) ' ~WIND_CLOSE(handle) ~WIND_DELETE(handle) f(nr)=WIND_CREATE(&X1010,0,0,scx,scy) ~WIND_OPEN(f(nr),x(nr),y(nr),w(nr),h(nr)) ' ' RETURN ' > PROCEDURE iconify_all_windows LOCAL i FOR i=1 TO 100 IF f(i)>0 AND ic(i)=0 GOSUB iconify_window_st(f(i)) ENDIF NEXT i RETURN > PROCEDURE uniconify_all_windows LOCAL i FOR i=1 TO 100 IF f(i)>0 AND ic(i)<>0 GOSUB uniconify_window_st(f(i)) ENDIF NEXT i RETURN