home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 2002 January
/
STC_CD_01_2002.iso
/
GAMES
/
DGEM
/
DGEM_DEV
/
DGEMDEV
/
DTEXT
/
DTEXT.GFA
(
.txt
)
next >
Wrap
GFA-BASIC Atari
|
2002-01-04
|
16KB
|
892 lines
RESERVE
IF FRE()<204800
~FORM_ALERT(1,"[1][| Insufficient memory. |][ Quit ]")
EDIT
ELSE
ON BREAK GOSUB sortir
init1
init2
init3
boucle_generale
ENDIF
'
> PROCEDURE demande_sortie
IF text_changed! AND msg_nb&>0 AND msg_adr%>0
reponse&=@alerte(5)
ELSE
reponse&=1
ENDIF
IF reponse&=1
sortir
ELSE IF reponse&=2
@save_text_as
sortir
ENDIF
RETURN
> PROCEDURE sortir
~GRAF_MOUSE(0,0)
ferme_win(0)
v_clsvwk(vdi_handle&)
IF m_adr%>0
~GEMDOS(73,L:m_adr%) ! libération mémoire
ENDIF
IF msg_adr%>0
~GEMDOS(73,L:msg_adr%)
ENDIF
~RSRC_FREE()
~APPL_EXIT()
QUIT 0
RETURN
'
> PROCEDURE init1
ap_id&=APPL_INIT()
IF ap_id&<0
sortir
ENDIF
vdi_handle&=@v_opnvwk
'
dummy%=LPEEK(&H4F2)
dummy$=CHR$(ADD(48,PEEK(ADD(dummy%,2))))
dummy$=dummy$+CHR$(ADD(48,PEEK(ADD(dummy%,4))))+CHR$(ADD(48,PEEK(ADD(dummy%,3))))
tos_version%=VAL(dummy$)
'
~GRAF_MOUSE(0,0)
'
~WIND_UPDATE(1)
~WIND_UPDATE(3)
'
~WIND_GET(0,4,screenx&,screeny&,screenl&,screenh&)
'
magic!=@test_cookie("MagX",dummy%)
mint!=@test_cookie("MiNT",dummy%)
IF ap_id&>0 AND (magic! OR mint!)
multi!=TRUE
ELSE
multi!=FALSE
ENDIF
'
@declare
@declare_champs_editables
@declare_text
RESERVE 15360
@declare_mem
'
IF @s_exist(chemin$+exemple_rsc$)=TRUE
IF RSRC_LOAD(chemin$+exemple_rsc$)=0
~FORM_ALERT(1,"[1][DTEXT could not| be loaded as RSC file.][ Quit ]")
sortir
ELSE
FOR i&=0 TO nb_tree&
~RSRC_GADDR(0,i&,adtree%(i&))
hd&(i&)=OB_H(adtree%(i&),0)
ld&(i&)=OB_W(adtree%(i&),0)
NEXT i&
ENDIF
ELSE
~FORM_ALERT(1,"[1][|DTEXT.RSC not found.][ Quit ]")
sortir
ENDIF
'
RETURN
> PROCEDURE declare
lect&=GEMDOS(25)
chemin$=CHR$(ADD(lect&,65))+":"+DIR$(SUCC(lect&))+"\"
c0$=CHR$(0)
'
exemple_rsc$="DTEXT.RSC"+c0$
'
nb_tree&=1
'
DIM adtree%(nb_tree&),xd&(nb_tree&),yd&(nb_tree&),ld&(nb_tree&),hd&(nb_tree&)
DIM hand_win&(nb_tree&),wx&(nb_tree&),wy&(nb_tree&),wl&(nb_tree&),wh&(nb_tree&)
'
DIM win!(nb_tree&),cp_win&(nb_tree&),aff!(nb_tree&)
'
FOR i&=0 TO nb_tree&
win!(i&)=FALSE
aff!(i&)=FALSE
cp_win&(i&)=0
NEXT i&
'
cp_win&(0)=&X1010
'
RETURN
> PROCEDURE declare_mem
'
m_adr%=GEMDOS(72,L:16)
IF m_adr%<1
sortir
ENDIF
'
RETURN
> PROCEDURE declare_text
'
default_msg$="LABYRINT.MSG"+c0$
ext_msg$=".MSG"+c0$
text_changed!=FALSE
'
msg_adr%=0
msg_len%=0
msg_ptr%=0
msg_id&=0
msg_nb&=0
'
RETURN
> PROCEDURE declare_champs_editables
'
DIM edit_pos&(1,30)
'
RETURN
> PROCEDURE init2
'
CHAR{{OB_SPEC(adtree%(0),2)}}=""
CHAR{{OB_SPEC(adtree%(0),9)}}=""
CHAR{{OB_SPEC(adtree%(0),11)}}=""
'
CHAR{{OB_SPEC(adtree%(0),4)}}=""
CHAR{{OB_SPEC(adtree%(0),5)}}=""
CHAR{{OB_SPEC(adtree%(0),6)}}=""
CHAR{{OB_SPEC(adtree%(0),7)}}=""
'
RETURN
> PROCEDURE init3
'
~WIND_UPDATE(2)
~WIND_UPDATE(0)
'
IF multi!=FALSE
~FORM_DIAL(3,0,0,0,0,screenx&,screeny&,screenl&,screenh&)
ENDIF
win(0)
'
RETURN
'
> PROCEDURE boucle_generale
DO
evnt&=EVNT_MULTI(&X110011,2,1,1,0,0,0,0,0,0,0,0,0,0,m_adr%,500,mo_x&,mo_y&,mo_k&,m_touche&,m_clavier&,mo_c&)
'
IF BTST(evnt&,0)
boucle_clavier_generale
ENDIF
'
IF BTST(evnt&,1)
clic_win&=WIND_FIND(mo_x&,mo_y&)
~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
IF clic_win&=hand_win&(0) AND win!(0)=TRUE
boucle_generale_suite
ENDIF
ENDIF
'
IF BTST(evnt&,4)
'
m_type&=INT{m_adr%}
m_id&=INT{ADD(m_adr%,2)}
m_dummy&=INT{ADD(m_adr%,4)}
m_6&=INT{ADD(m_adr%,6)}
m_8&=INT{ADD(m_adr%,8)}
m_10&=INT{ADD(m_adr%,10)}
m_12&=INT{ADD(m_adr%,12)}
m_14&=INT{ADD(m_adr%,14)}
'
SELECT m_type&
CASE 10 ! MENU_SELECTED
CASE 20 ! WM_REDRAW
redraw
CASE 21 ! WM_TOPPED
win_topped
CASE 29,31 ! WM_NEWTOP, WM_ONTOP
win_ontop
CASE 30 ! WM_UNTOPPED
CASE 22 ! WM_CLOSED
win_closed
CASE 23 ! WM_FULLED
CASE 24 ! WM_ARROWED
CASE 26 ! WM_SLIDED
CASE 28 ! WM_MOVED
win_moved
CASE 27 ! WM_SIZED
CASE 34 ! WM_ICONIFY
CASE 35 ! WM_UNICONIFY
CASE 50 ! SHUT_DOWN
shut_down
CASE 63 ! DRAGDROP
CASE 18193 ! VA_START
CASE 22360 ! WM_SHADOWED ! propriété de MagiC
IF m_fenetre&=hand_win&(0) AND win!(0)=TRUE
aff!(0)=FALSE
ENDIF
CASE 22361 ! WM_UNSHADOWED ! son corrolaire
IF m_fenetre&=hand_win&(0) AND win!(0)=TRUE
aff!(0)=TRUE
ENDIF
ENDSELECT
'
ENDIF
'
IF BTST(evnt&,5)
INC forme&
IF forme&=30
~FRE()
~FRE(0)
forme&=0
ENDIF
ENDIF
'
FOR i&=0 TO 3
LONG{ADD(m_adr%,MUL(i&,4))}=0
NEXT i&
'
LOOP
RETURN
> PROCEDURE boucle_generale_suite
IF clic_win&=hand_win&(0) AND win!(0)=TRUE
gere_form
ENDIF
RETURN
> PROCEDURE boucle_clavier_generale
'
m_clavier|=BYTE(m_clavier&)
'
~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
'
SELECT m_clavier&
CASE 7181 ! enter
@valid_message
CASE 18432
IF m_touche&=4
@previous_message
ENDIF
CASE 20480
IF m_touche&=4
@next_message
ENDIF
CASE 18176
@first_message
CASE 18231
@last_message
CASE 15104 ! f1
CASE 15360 ! f2
CASE 15616 ! f3
CASE 15872 ! f4
CASE 16128 ! f5
CASE 16384 ! f6
CASE 16640 ! f7
CASE 16896 ! f8
CASE 17152 ! f9
CASE 17408 ! f10
CASE 23808 ! s+f10
CASE 24832 ! Undo
ENDSELECT
'
SELECT m_clavier|
CASE 17,21 ! ^Q = quitter ou ^U = fermer
demande_sortie
CASE 9 ! info
@info
CASE 15 ! open
@load_text_as
CASE 19 ! save
@save_text_as
DEFAULT
'
' test texte champs éditables
'
IF aff!(0)=TRUE
IF m_touche&<>4 AND m_touche&<>2 ! on évite les bizarries
boucle_mesag
ENDIF
ENDIF
'
ENDSELECT
RETURN
'
> PROCEDURE boucle_mesag
SELECT m_clavier&
CASE 18432 ! flèche haut
edit_efface
get_previous_ligne(0)
edit_pose
CASE 20480,3849 ! flèche bas et Tab
edit_efface
get_next_ligne(0)
edit_pose
DEFAULT
IF aff!(0)
~OBJC_EDIT(adtree%(0),edit_ligne&,m_clavier&,edit_pos&(0,edit_ligne&),2,edit_pos&(0,edit_ligne&))
ENDIF
ENDSELECT
RETURN
> PROCEDURE get_previous_ligne(tree&) ! recherche du champ éditable précédent
exit!=FALSE
old_edit_ligne&=edit_ligne&
dommy&=MAX(1,PRED(edit_ligne&))
FOR k&=dommy& TO 1 STEP -1
IF BTST(OB_FLAGS(adtree%(tree&),k&),3) AND k&>3 ! champ éditable ?
exit!=TRUE ! oui !
edit_ligne&=k& ! on on change bien l'index de l'objet
ENDIF
EXIT IF exit!
NEXT k&
RETURN
> PROCEDURE get_next_ligne(tree&) ! recherche du prochain champ éditable
exit!=FALSE
old_edit_ligne&=edit_ligne&
dommy&=OB_TAIL(adtree%(tree&),0)
FOR k&=MIN(SUCC(edit_ligne&),dommy&) TO dommy&
IF BTST(OB_FLAGS(adtree%(tree&),k&),3)
edit_ligne&=k&
exit!=TRUE
ENDIF
EXIT IF exit!
NEXT k&
IF edit_ligne&=old_edit_ligne& OR edit_ligne&>7
get_first_ligne(tree&) ! si c'était le dernier, on revient au 1er
ENDIF
RETURN
> PROCEDURE get_first_ligne(tree&)
edit_ligne&=4
RETURN
> PROCEDURE edit_efface ! on enlève le curseur
IF aff!(0)
~OBJC_EDIT(adtree%(0),edit_ligne&,0,edit_pos&(0,edit_ligne&),3,dummy&)
ENDIF
RETURN
> PROCEDURE edit_pose ! on met le curseur
IF aff!(0)
~OBJC_EDIT(adtree%(0),edit_ligne&,0,0,1,edit_pos&(0,edit_ligne&))
ENDIF
RETURN
'
> PROCEDURE win(dial&)
IF win!(dial&)
force_top(dial&)
ELSE
IF win!(dial&)=FALSE
win_untopped
create_win(dial&)
ENDIF
ENDIF
RETURN
> PROCEDURE create_win(dial&)
hand_win&(dial&)=@window_create(cp_win&(dial&))
IF hand_win&(dial&)>0
win!(dial&)=TRUE
~FORM_CENTER(adtree%(dial&),xd&(dial&),yd&(dial&),dummy%,dummy%)
~WIND_CALC(0,cp_win&(dial&),xd&(dial&),yd&(dial&),ld&(dial&),hd&(dial&),wx&(dial&),wy&(dial&),wl&(dial&),wh&(dial&))
wx&(dial&)=MAX(SUCC(screenx&),wx&(dial&))
wy&(dial&)=MAX(SUCC(screeny&),wy&(dial&))
move_win(dial&,wx&(dial&),wy&(dial&),wl&(dial&),wh&(dial&))
~WIND_SET(hand_win&(dial&),24,&X1,0,0,0)
dummy&=WIND_OPEN(hand_win&(dial&),wx&(dial&),wy&(dial&),wl&(dial&),wh&(dial&))
IF dummy&=0 ! échec
win!(dial&)=FALSE
ENDIF
aff!(dial&)=win!(dial&)
get_first_ligne(dial&)
ELSE
~@alerte(4)
sortir
ENDIF
RETURN
> PROCEDURE ferme_win(dial&)
IF win!(dial&)=TRUE
~WIND_CLOSE(hand_win&(dial&))
~WIND_DELETE(hand_win&(dial&))
win!(dial&)=FALSE
aff!(dial&)=FALSE
ENDIF
RETURN
> PROCEDURE move_win(dial&,x0&,y0&,l0&,h0&)
IF win!(dial&)=TRUE
~WIND_CALC(1,cp_win&(dial&),x0&,y0&,l0&,h0&,xd&(dial&),yd&(dial&),dummy&,dummy&)
OB_X(adtree%(dial&),0)=xd&(dial&)
OB_Y(adtree%(dial&),0)=yd&(dial&)
ENDIF
RETURN
> PROCEDURE black_white(fils&,etat&)
'
SELECT etat&
CASE 0
OB_STATE(adtree%(0),fils&)=BCLR(OB_STATE(adtree%(0),fils&),0)
CASE 1
OB_STATE(adtree%(0),fils&)=BSET(OB_STATE(adtree%(0),fils&),0)
ENDSELECT
'
~WIND_GET(hand_win&(0),4,xf&,yf&,lf&,hf&)
~WIND_GET(hand_win&(0),11,rx&,ry&,rl&,rh&)
'
IF win!(0)=TRUE AND aff!(0)=TRUE
control
WHILE rl&<>0 AND rh&<>0
IF RC_INTERSECT(xf&,yf&,lf&,hf&,rx&,ry&,rl&,rh&)
~OBJC_DRAW(adtree%(0),fils&,3,rx&,ry&,rl&,rh&)
ENDIF
~WIND_GET(hand_win&(0),12,rx&,ry&,rl&,rh&)
WEND
uncontrol
ENDIF
RETURN
'
> PROCEDURE force_top(bar&)
~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
IF top_win&<>hand_win&(bar&) AND win!(bar&)=TRUE
INT{m_adr%}=21
INT{m_adr%+2}=ap_id&
INT{m_adr%+4}=0
INT{m_adr%+6}=hand_win&(bar&)
INT{m_adr%+8}=0
INT{m_adr%+10}=0
INT{m_adr%+12}=0
INT{m_adr%+14}=0
~APPL_WRITE(ap_id&,16,m_adr%)
ENDIF
RETURN
'
> PROCEDURE shut_down
~APPL_EXIT()
QUIT 0
RETURN
> PROCEDURE win_moved
m_8&=MAX(SUCC(screenx&),m_8&)
m_10&=MAX(SUCC(screeny&),m_10&)
~WIND_SET(m_6&,5,m_8&,m_10&,m_12&,m_14&)
IF m_6&=hand_win&(0) AND win!(0)=TRUE
move_win(0,m_8&,m_10&,m_12&,m_14&)
ENDIF
RETURN
> PROCEDURE win_topped
win_untopped
IF m_6&=hand_win&(0) AND win!(0)=TRUE
~WIND_SET(hand_win&(0),10,0,0,0,0) ! on active la fenêtre
get_first_ligne(0)
edit_pose
ENDIF
RETURN
> PROCEDURE redraw
'
control
win_untopped
~WIND_GET(hand_win&(0),4,xf&,yf&,lf&,hf&)
~WIND_GET(hand_win&(0),11,rx&,ry&,rl&,rh&)
WHILE rl&<>0 AND rh&<>0
IF RC_INTERSECT(xf&,yf&,lf&,hf&,rx&,ry&,rl&,rh&)
~OBJC_DRAW(adtree%(0),0,3,rx&,ry&,rl&,rh&)
ENDIF
~WIND_GET(hand_win&(0),12,rx&,ry&,rl&,rh&)
WEND
win_ontop
uncontrol
'
RETURN
> PROCEDURE win_untopped
~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
IF top_win&=hand_win&(0) AND aff!(0)=TRUE
edit_efface
ENDIF
RETURN
> PROCEDURE win_ontop
~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
IF top_win&=hand_win&(0) AND m_6&=top_win& AND aff!(0)=TRUE
get_first_ligne(0)
edit_pose
ENDIF
RETURN
> PROCEDURE win_closed
IF hand_win&(0)=m_6& AND win!(0)=TRUE
demande_sortie
ENDIF
RETURN
'
> PROCEDURE gere_form
ihm_obj&=OBJC_FIND(adtree%(0),0,3,mo_x&,mo_y&)
SELECT ihm_obj&
CASE 13
@info
CASE 14
@load_text_as
CASE 15
@save_text_as
CASE 8
@previous_message
CASE 10
@next_message
CASE 12
@valid_message
CASE 4,5,6,7
edit_efface
edit_ligne&=ihm_obj&
edit_pose
DEFAULT
win(0)
ENDSELECT
RETURN
'
> PROCEDURE info
black_white(13,1)
~@alerte(1)
black_white(13,0)
RETURN
> PROCEDURE load_text_as
black_white(14,1)
IF LEN(text_file$)>0
chemin$=LEFT$(text_file$,RINSTR(text_file$,"\"))
ENDIF
dummy$=@fileselector2$(6,chemin$+"*"+ext_msg$,default_msg$)
IF LEN(dummy$)>1
IF INSTR(UPPER$(RIGHT$(dummy$,5)),"MSG")>0
text_file$=dummy$
@load_text
ENDIF
ENDIF
black_white(14,0)
RETURN
> PROCEDURE load_text
LOCAL msg_handle&
'
~FRE()
~FRE(0)
'
text_changed!=FALSE
IF @s_exist(text_file$)=TRUE
msg_handle&=GEMDOS(61,L:V:text_file$,W:0)
IF msg_handle&>0
msg_len%=GEMDOS(66,L:0,W:msg_handle&,W:2)
~GEMDOS(66,L:0,W:msg_handle&,W:0)
'
IF msg_adr%>0
~GEMDOS(73,L:msg_adr%)
msg_ptr%=0
ENDIF
'
msg_adr%=GEMDOS(72,L:SHL(SHR(ADD(msg_len%,15),4),4))
IF msg_adr%>0
IF GEMDOS(63,W:msg_handle&,L:msg_len%,L:msg_adr%)=msg_len%
IF MKL$(LONG{msg_adr%})="_MSG"
'
msg_ptr%=ADD(msg_adr%,4)
msg_nb&=DIV(SUB(msg_len%,4),64)
msg_id&=0
'
ELSE
~GEMDOS(73,L:msg_adr%)
msg_adr%=0
msg_nb&=0
~@alerte(2)
ENDIF
ENDIF
ENDIF
~GEMDOS(62,W:msg_handle&)
ENDIF
ENDIF
'
first_message
'
RETURN
> PROCEDURE save_text_as
IF LEN(text_file$)>0 AND msg_nb&>0
black_white(15,1)
dummy$=@fileselector2$(7,LEFT$(text_file$,RINSTR(text_file$,"\"))+"*"+ext_msg$,MID$(text_file$,SUCC(RINSTR(text_file$,"\"))))
IF LEN(dummy$)>1
IF INSTR(UPPER$(RIGHT$(dummy$,5)),"MSG")>0
text_file$=dummy$
@save_text
ENDIF
ENDIF
black_white(15,0)
ENDIF
RETURN
> PROCEDURE save_text
'
LOCAL sav_handle&
'
~FRE()
~FRE(0)
'
IF @s_exist(text_file$)
~GEMDOS(65,L:V:text_file$)
ENDIF
'
IF @s_exist(text_file$)=FALSE AND msg_adr%>0
sav_handle&=GEMDOS(60,L:V:text_file$,W:0)
IF sav_handle&>0
'
IF GEMDOS(64,W:sav_handle&,L:msg_len%,L:msg_adr%)=msg_len%
text_changed!=FALSE
ELSE
~@alerte(3)
ENDIF
'
~GEMDOS(62,W:sav_handle&)
ENDIF
ENDIF
'
RETURN
> PROCEDURE first_message
IF msg_nb&>0
black_white(8,1)
delai
msg_id&=0
display_message
black_white(8,0)
ELSE
init2
black_white(2,0)
black_white(9,0)
black_white(11,0)
edit_efface
black_white(3,0)
edit_pose
ENDIF
RETURN
> PROCEDURE last_message
IF msg_nb&>0
black_white(10,1)
delai
msg_id&=PRED(msg_nb&)
display_message
black_white(10,0)
ENDIF
RETURN
> PROCEDURE previous_message
IF msg_nb&>0
black_white(8,1)
delai
msg_id&=MAX(0,PRED(msg_id&))
display_message
black_white(8,0)
ENDIF
RETURN
> PROCEDURE next_message
IF msg_nb&>0
black_white(10,1)
delai
msg_id&=MIN(SUCC(msg_id&),PRED(msg_nb&))
display_message
black_white(10,0)
ENDIF
RETURN
> PROCEDURE display_message
'
msg_ptr%=ADD(ADD(msg_adr%,4),MUL(msg_id&,64))
'
CHAR{{OB_SPEC(adtree%(0),2)}}=LEFT$(STR$(INT{msg_ptr%}),3)
CHAR{{OB_SPEC(adtree%(0),9)}}=LEFT$(STR$(INT{ADD(msg_ptr%,2)}),3)
CHAR{{OB_SPEC(adtree%(0),11)}}=LEFT$(STR$(INT{ADD(msg_ptr%,4)}),3)
'
CHAR{{OB_SPEC(adtree%(0),4)}}=LEFT$(CHAR{ADD(msg_ptr%,6)},12)
CHAR{{OB_SPEC(adtree%(0),5)}}=LEFT$(CHAR{ADD(msg_ptr%,20)},12)
CHAR{{OB_SPEC(adtree%(0),6)}}=LEFT$(CHAR{ADD(msg_ptr%,34)},10)
CHAR{{OB_SPEC(adtree%(0),7)}}=LEFT$(CHAR{ADD(msg_ptr%,46)},10)
'
black_white(2,0)
black_white(9,0)
black_white(11,0)
edit_efface
black_white(3,0)
edit_pose
'
RETURN
> PROCEDURE valid_message
delai
IF msg_nb&>0
black_white(12,1)
delai
'
msg_ptr%=ADD(ADD(msg_adr%,4),MUL(msg_id&,64))
'
CHAR{ADD(msg_ptr%,6)}=LEFT$(CHAR{{OB_SPEC(adtree%(0),4)}},12)
CHAR{ADD(msg_ptr%,20)}=LEFT$(CHAR{{OB_SPEC(adtree%(0),5)}},12)
CHAR{ADD(msg_ptr%,34)}=LEFT$(CHAR{{OB_SPEC(adtree%(0),6)}},10)
CHAR{ADD(msg_ptr%,46)}=LEFT$(CHAR{{OB_SPEC(adtree%(0),7)}},10)
'
text_changed!=TRUE
black_white(12,0)
'
next_message
ENDIF
RETURN
'
> FUNCTION alerte(id&)
RETURN FORM_ALERT(1,CHAR{OB_SPEC(adtree%(1),id&)})
ENDFUNC
> FUNCTION s_exist(exist_name$)
exist_name$=exist_name$+c0$
LOCAL existe&
IF LEN(exist_name$)=0 OR LEFT$(exist_name$)=c0$
RETURN FALSE
ELSE
existe&=GEMDOS(61,L:V:exist_name$,W:0)
IF existe&>0
~GEMDOS(62,W:existe&)
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
ENDFUNC
> FUNCTION test_cookie(cookie_name$,VAR cookie_valeur%)
LOCAL read_cook%,nom_cook%,cookie%
'
nom_cook%=CVL(cookie_name$)
cookie%=LPEEK(&H5A0)
cookie_valeur%=0
'
IF cookie%<>0
REPEAT
read_cook%=LPEEK(cookie%)
cookie_valeur%=LPEEK(cookie%+4)
ADD cookie%,8
UNTIL read_cook%=0 OR read_cook%=nom_cook%
IF read_cook%=nom_cook%
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ELSE
RETURN FALSE
ENDIF
ENDFUNC
> FUNCTION window_create(cp_win_recu&)
'
GCONTRL(0)=100
GCONTRL(1)=5
GCONTRL(2)=1
GCONTRL(3)=0
GCONTRL(4)=0
'
GINTIN(0)=cp_win_recu&
GINTIN(1)=30
GINTIN(2)=30
GINTIN(3)=30
GINTIN(4)=30
'
GEMSYS
'
RETURN GINTOUT(0)
ENDFUNC
> PROCEDURE v_hide_c
'
CONTRL(0)=123
CONTRL(1)=0
CONTRL(3)=0
CONTRL(6)=vdi_handle&
VDISYS
'
RETURN
> PROCEDURE v_show_c
CONTRL(0)=122
CONTRL(1)=0
CONTRL(3)=1
CONTRL(6)=vdi_handle&
INTIN(0)=1
VDISYS
RETURN
> PROCEDURE control
~WIND_UPDATE(1)
~WIND_UPDATE(3)
v_hide_c
RETURN
> PROCEDURE uncontrol
~WIND_UPDATE(2)
~WIND_UPDATE(0)
v_show_c
RETURN
> PROCEDURE delai
~EVNT_TIMER(75)
RETURN
> FUNCTION v_opnvwk
$F&
'
INT{ADD(CONTRL,2)}=0
INT{ADD(CONTRL,6)}=11
INT{ADD(CONTRL,12)}=@graf_handle
'
INT{INTIN}=1 ! Numéro ID du périphérique physique (écran)
INT{ADD(INTIN,2)}=1 ! Type de ligne
INT{ADD(INTIN,4)}=1 ! Index de couleur Polyline
INT{ADD(INTIN,6)}=1 ! Type de marqueur
INT{ADD(INTIN,8)}=1 ! Index de couleur Polymarker
INT{ADD(INTIN,10)}=1 ! Fonte de caractères
INT{ADD(INTIN,12)}=1 ! Index couleur texte
INT{ADD(INTIN,14)}=1 ! Fill interior Style
INT{ADD(INTIN,16)}=1 ! Fill style index
INT{ADD(INTIN,18)}=1 ! Fill index couleur
INT{ADD(INTIN,20)}=2 ! Flag coordonnées NDC ou RC
'
VDISYS 100
'
RETURN INT{ADD(CONTRL,12)}
'
ENDFUNC
> PROCEDURE v_clsvwk(vdi_handle0&)
INT{ADD(CONTRL,12)}=vdi_handle0&
VDISYS 101,0,0
RETURN
> FUNCTION graf_handle
$F&
'
INT{ADD(GCONTRL,2)}=0
INT{ADD(GCONTRL,4)}=5
LONG{ADD(GCONTRL,6)}=0
'
GEMSYS 77
'
RETURN INT{GINTOUT}
'
ENDFUNC
> FUNCTION fileselector2$(type_msg&,path$,name$)
LOCAL path1$,name1$,choix_file&,retour_file&
LET path1$=path$
LET name1$=name$
retour_file&=@fi_input(type_msg&,path1$,name1$,choix_file&)
IF name1$=c0$ OR name1$=""
choix_file&=0
ENDIF
IF retour_file&=0 OR choix_file&=0
RETURN c0$
ELSE
RETURN LEFT$(path1$,RINSTR(path1$,"\"))+name1$
ENDIF
ENDFUNC
> FUNCTION fi_input(type_msg&,VAR fi_path$,fi_name$,fi_choix&)
$F&
'
~FRE()
~FRE(0)
'
IF tos_version%<104
type_msg&=0
ENDIF
'
IF type_msg&>0
GCONTRL(0)=91
ELSE
GCONTRL(0)=90
ENDIF
GCONTRL(1)=0
GCONTRL(2)=2
IF type_msg&>0
GCONTRL(3)=3
ELSE
GCONTRL(3)=2
ENDIF
GCONTRL(4)=0
'
fi_path$=fi_path$+SPACE$(300)
fi_name$=fi_name$+SPACE$(100)
'
ADDRIN(0)=V:fi_path$
ADDRIN(1)=V:fi_name$
IF type_msg&>0
ADDRIN(2)=OB_SPEC(adtree%(1),type_msg&)
ENDIF
'
GEMSYS
'
fi_path$=CHAR{V:fi_path$}+c0$
fi_name$=CHAR{V:fi_name$}+c0$
fi_choix&=GINTOUT(1)
'
RETURN GINTOUT(0)
ENDFUNC