home *** CD-ROM | disk | FTP | other *** search
- '
- ' 2VDI: image convertor to VDI format (or others by modifying this source)
- ' Public domain : you can modify this as you want.
- '
- ' the important procedure is "sauvegarde" (commented): saving the image
- '
- ' important: USE PARX.SYS !!!!
- '
- ' I made this program to create an easy loadable and compatible image
- ' format ".VDI", specially for games for GEM and graphic cards.
- '
- ' The produced image contains the MFDB (adress is replace by a 4 string of
- ' ASCII naming the type of compression or your own type of saving),
- ' then:
- '
- ' if not TC: the VDI color palette (1 WORD of red, 1 WORD of green, 1 WORD of blue,
- ' each going from 1 to 1000). the number of colors and lenght is fixed by
- ' the MFDB (see the bitplanes)
- ' then the VDI image (standard mode, device independant ie not interlaced)
- '
- ' if TC: the image was transformed into a TC24bits image and the R, the V and B
- ' are separated: sort of speudo VDI standard.
- ' a red pixel has 8bits, same as the green pixel and the blue.
- ' you have finally three images, one red, one green, one blue.
- '
- RESERVE
- IF FRE()<256000
- ~FORM_ALERT(1,"[1][ Insufficient or fragmented | memory. ][ Quit ]")
- QUIT 0
- ELSE
- ' ON ERROR GOSUB gest_err
- init_1
- init_2
- init_parx
- init_3
- boucle_generale
- ENDIF
- '
- > PROCEDURE sortir2
- tout_fermer
- IF parx_adr_mem%
- parx_trm_exit
- FOR i&=0 TO PRED(parx_nb_slot&)
- parx_libere_blk(i&)
- NEXT i&
- ~C:parx_manag_free%()
- ~GEMDOS(73,L:parx_adr_mem%)
- ENDIF
- IF dd_mem%
- ~GEMDOS(73,L:dd_mem%)
- ENDIF
- IF aa_start%
- ~GEMDOS(73,L:aa_start%)
- ENDIF
- IF raster_image%
- ~GEMDOS(73,L:raster_image%)
- ENDIF
- IF m_adr%
- ~GEMDOS(73,L:m_adr%)
- ENDIF
- ~MENU_BAR(adtree%(0),0)
- ~RSRC_FREE()
- ~APPL_EXIT()
- QUIT 0
- RETURN
- '
- > PROCEDURE init_1
- ap_id&=APPL_INIT()
- vdi_handle&=V~H
- ~GRAF_MOUSE(0,0)
- '
- IF ap_id&=-1 OR vdi_handle&<0
- sortir2
- ENDIF
- '
- ~WIND_UPDATE(1)
- ~WIND_UPDATE(3)
- '
- ~WIND_GET(0,4,screenx&,screeny&,screenl&,screenh&)
- '
- @declare_1
- @declare_parx
- @declare_parx_mem
- @declare_parx_trm
- @declare_parx_rim
- RESERVE 32128
- '
- @declare_mem
- '
- ~RSRC_FREE()
- IF @s_exist(chemin$+tovdi_rsc$)=TRUE
- IF RSRC_LOAD(chemin$+tovdi_rsc$)=0
- ~FORM_ALERT(1,"[1][ 2VDI.RSC couldn't be loaded as | RSC file.][ Quit ]")
- sortir2
- ELSE
- FOR i&=0 TO nb_tree&
- ~RSRC_GADDR(0,i&,adtree%(i&))
- NEXT i&
- FOR i&=1 TO nb_tree&
- ~FORM_CENTER(adtree%(i&),xd&(i&),yd&(i&),ld&(i&),dummy&)
- hd&(i&)=OB_H(adtree%(i&),0)
- NEXT i&
- ENDIF
- ELSE
- ~FORM_ALERT(1,"[1][ 2VDI.RSC not found.| Put it beside 2VDI.PRG |][ Quit ]")
- sortir2
- ENDIF
- '
- del_affichage
- del_projet
- folder_image$=""
- '
- RETURN
- > PROCEDURE declare_1
- '
- c0$=CHR$(0)
- lect%=GEMDOS(25)
- chemin$=CHR$(ADD(lect%,65))+":"+DIR$(SUCC(lect%))+"\"
- masque$="*.*"+c0$
- ext_vdi$=".DGI"+c0$
- fi_path$=SPACE$(512)
- fi_name$=SPACE$(128)
- '
- tovdi_rsc$="2VDI.RSC"+c0$
- tovdi_inf$="2VDI.INF"+c0$
- '
- dummy$=SPACE$(128)
- nom_image$=SPACE$(128)
- folder_image$=SPACE$(256)
- nom_sav$=SPACE$(128)
- nom_courant$=SPACE$(128)
- '
- signature$="TONTHAT"
- CLR signature$
- '
- nb_tree&=7
- '
- 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&),aff!(nb_tree&)
- FOR i&=0 TO nb_tree&
- win!(i&)=FALSE
- aff!(i&)=FALSE
- NEXT i&
- '
- DIM cp_win%(nb_tree&)
- cp_win%(1)=&X1011
- cp_win%(2)=&X1011
- cp_win%(3)=&X1011
- '
- clear_m_v
- '
- DIM img_mfdb%(2)
- '
- DIM cadre&(3)
- cadre&(1)=4
- cadre&(2)=10
- cadre&(3)=14
- '
- DIM texte_aff$(13)
- FOR i&=1 TO 13
- texte_aff$(i&)=SPACE$(50)
- NEXT i&
- '
- DIM item_projet$(100)
- FOR i&=0 TO 100
- item_projet$(i&)=SPACE$(128)
- NEXT i&
- index_projet&=0
- select_projet&=-1
- nombre_projet&=0
- '
- dd_ok&=0
- dd_nak&=1
- dd_ext&=2
- dd_len&=3
- dd_trash&=4
- dd_printer&=5
- dd_clipboard&=6
- dd_path$="U:\PIPE\DRAGDROP."
- '
- RETURN
- > PROCEDURE declare_mem
- '
- m_adr%=GEMDOS(72,L:16)
- IF m_adr%=<0
- sortir2
- ENDIF
- '
- raster_image%=GEMDOS(72,L:128)
- IF raster_image%>0
- FOR i&=0 TO 2
- img_mfdb%(i&)=ADD(raster_image%,MUL(i&,20))
- make_zero_mfdb(img_mfdb%(i&))
- NEXT i&
- ELSE
- sortir2
- ENDIF
- '
- aa_start%=GEMDOS(72,L:2048)
- '
- RETURN
- > PROCEDURE declare_parx
- '
- parx_size_image%=0
- parx_hand_image&=0
- '
- parx_sys$=SPACE$(128)
- '
- parx_lire_rim!=TRUE
- parx_lire_mem!=TRUE
- parx_lire_trm!=TRUE
- '
- parx_choix_config_mem&=2
- parx_choix_taille_mem&=150
- '
- parx_trm$="PARX.TRM"+c0$
- parx_mem$="PARX.MEM"+c0$
- tovdi_trm$="2VDI.TRM"+c0$
- tovdi_mem$="2VDI.MEM"+c0$
- '
- parx_adr_mem%=0
- @declare_parx_mem
- parx_nb_slot&=10
- DIM parx_tab_adr%(PRED(parx_nb_slot&)),parx_size_tab%(PRED(parx_nb_slot&))
- '
- ptr_rim%=parx_tab_adr%(1)
- nombre_rim%=0
- @declare_parx_rim
- '
- RETURN
- > PROCEDURE declare_parx_mem
- parx_manag_malloc%=ADD(parx_adr_mem%,10)
- parx_manag_free%=ADD(parx_adr_mem%,14)
- parx_manag_shrink%=ADD(parx_adr_mem%,18)
- parx_manag_grow%=ADD(parx_adr_mem%,22)
- parx_manag_size%=ADD(parx_adr_mem%,26)
- parx_manag_version%=ADD(parx_adr_mem%,30)
- parx_blk_malloc%=ADD(parx_adr_mem%,50)
- parx_blk_free%=ADD(parx_adr_mem%,54)
- parx_blk_shrink%=ADD(parx_adr_mem%,58)
- parx_blk_grow%=ADD(parx_adr_mem%,62)
- RETURN
- > PROCEDURE declare_parx_trm
- parx_do_trm%=ADD(parx_tab_adr%(0),1960)
- RETURN
- > PROCEDURE declare_parx_rim
- parx_test_file%=ADD(ptr_rim%,56)
- parx_get_palette%=ADD(ptr_rim%,60)
- parx_do_file%=ADD(ptr_rim%,64)
- RETURN
- > PROCEDURE init_2
- '
- IF @s_exist(chemin$+tovdi_inf$)
- OPEN "i",#14,chemin$+tovdi_inf$
- INPUT #14,parx_sys$
- INPUT #14,parx_lire_rim!
- INPUT #14,parx_lire_mem!
- INPUT #14,parx_lire_trm!
- CLOSE #14
- ELSE
- parx_sys$="C:\PARX.SYS\"
- ENDIF
- '
- ~WIND_UPDATE(2)
- ~WIND_UPDATE(0)
- ~MENU_BAR(adtree%(0),1)
- '
- multi!=@test_cookie("MagX",dummy%)
- IF multi!=FALSE
- multi!=@test_cookie("MiNT",dummy%)
- ENDIF
- '
- IF multi!=FALSE
- ~FORM_DIAL(3,0,0,0,0,screenx&,screeny&,screenl&,screenh&)
- ENDIF
- '
- CHAR{{OB_SPEC(adtree%(4),4)}}=RIGHT$(parx_sys$,29)+c0$
- OB_STATE(adtree%(4),6)=OB_STATE(adtree%(4),6) OR ABS(parx_lire_rim!)
- OB_STATE(adtree%(4),8)=OB_STATE(adtree%(4),8) OR ABS(parx_lire_mem!)
- OB_STATE(adtree%(4),11)=OB_STATE(adtree%(4),11) OR ABS(parx_lire_trm!)
- nom_image$=c0$
- '
- RETURN
- > PROCEDURE init_parx
- '
- init_parx_mem
- IF dummy&=0
- gere_preference_parx
- init_parx_mem
- ENDIF
- init_parx_trm_rim
- '
- RETURN
- > PROCEDURE init_parx_mem
- '
- IF parx_adr_mem%>0
- ~C:parx_manag_free%()
- ~GEMDOS(73,L:parx_adr_mem%)
- parx_adr_mem%=0
- ENDIF
- '
- dummy&=0
- IF parx_lire_mem!
- IF @s_exist(parx_sys$+parx_mem$)=TRUE
- dummy&=1
- ELSE IF @s_exist(chemin$+tovdi_mem$)=TRUE
- dummy&=2
- ENDIF
- ELSE
- IF @s_exist(chemin$+tovdi_mem$)=TRUE
- dummy&=2
- ELSE IF @s_exist(parx_sys$+parx_mem$)=TRUE
- dummy&=1
- ENDIF
- ENDIF
- '
- IF dummy&=0
- ~@alerte(1,14)
- ELSE
- IF dummy&=1
- dummy$=parx_sys$+parx_mem$
- ELSE
- dummy$=chemin$+tovdi_mem$
- ENDIF
- OPEN "i",#49,dummy$
- lof_mem%=ADD(LOF(#49),ABS(ODD(LOF(#49))))
- parx_adr_mem%=GEMDOS(72,L:lof_mem%)
- IF parx_adr_mem%>0
- BGET #49,parx_adr_mem%,LOF(#49)
- @declare_parx_mem
- retour_mem%=C:parx_manag_version%()
- IF retour_mem%<500 OR MKL$(LONG{parx_adr_mem%})+MKL$(LONG{parx_adr_mem%+4})<>"PARX_MEM"
- ~@alerte(1,13)
- ~GEMDOS(73,L:parx_adr_mem%)
- parx_adr_mem%=0
- ELSE
- CHAR{{OB_SPEC(adtree%(4),10)}}=LEFT$(STR$(retour_mem%),3)
- ENDIF
- ENDIF
- CLOSE #49
- ENDIF
- '
- RETURN
- > PROCEDURE init_parx_trm_rim
- LOCAL retour_fs%,taille_rim%,taille_totale_rim%
- '
- IF parx_adr_mem%>0
- '
- @declare_parx_mem
- taille_parx_reserve%=C:parx_manag_malloc%(L:V:parx_tab_adr%(0),L:V:parx_size_tab%(0),W:0,W:parx_nb_slot&,L:SUB(GEMDOS(72,L:-1),51200))
- '
- IF taille_parx_reserve%>0
- dummy&=0
- IF parx_lire_trm!
- IF @s_exist(parx_sys$+parx_trm$)=TRUE
- dummy&=1
- ELSE IF @s_exist(chemin$+tovdi_trm$)=TRUE
- dummy&=2
- ENDIF
- ELSE
- IF @s_exist(chemin$+tovdi_trm$)=TRUE
- dummy&=2
- ELSE IF @s_exist(parx_sys$+parx_trm$)=TRUE
- dummy&=1
- ENDIF
- ENDIF
- '
- IF dummy&=0
- ~@alerte(1,16)
- ELSE
- IF dummy&=1
- dummy$=parx_sys$+parx_trm$
- ELSE
- dummy$=chemin$+tovdi_trm$
- ENDIF
- endroit%=50
- REPEAT
- err_choix&=1
- OPEN "i",#50,dummy$
- parx_libere_blk(0)
- parx_reserve_blk(0,SHL(SHR(ADD(LOF(#50),15),4),4))
- IF parx_tab_adr%(0)>0
- BGET #50,parx_tab_adr%(0),LOF(#50)
- @declare_parx_trm
- retour_trm%=WORD{ADD(parx_tab_adr%(0),8)}
- IF retour_trm%<200 OR retour_trm%>299 OR MKL$(LONG{parx_tab_adr%(0)})+MKL$(LONG{parx_tab_adr%(0)+4})<>"PARX_TRM"
- ~@alerte(1,15)
- parx_libere_blk(0)
- ELSE
- CHAR{{OB_SPEC(adtree%(4),13)}}=LEFT$(STR$(retour_trm%),3)
- parx_trm_init
- ENDIF
- ENDIF
- endroit50:
- CLOSE #50
- UNTIL err_choix&=1
- ENDIF
- '
- parx_reserve_blk(1,MAX(4096,SUB(C:parx_manag_size%(),32128)))
- exit!=FALSE
- IF parx_lire_rim!
- dummy$=parx_sys$
- ELSE
- dummy$=chemin$
- ENDIF
- '
- ptr_rim%=parx_tab_adr%(1)
- taille_totale_rim%=0
- nombre_rim&=0
- retour_fs%=FSFIRST(dummy$+"RIM\*.RIM"+c0$,1)
- DO
- EXIT IF retour_fs%<>0
- fichier_rim$=dummy$+"RIM\"+CHAR{FGETDTA()+30}+c0$
- OPEN "i",#51,fichier_rim$
- taille_rim%=ADD(LOF(#51),ABS(ODD(LOF(#51))))
- IF ADD(taille_totale_rim%,taille_rim%)=<parx_size_tab%(1)
- BGET #51,ptr_rim%,LOF(#51)
- IF MKL$(LONG{ptr_rim%})+MKL$(LONG{ADD(ptr_rim%,4)})="READ_IMG"
- SELECT WORD{ADD(ptr_rim%,12)}
- CASE 0,1
- LONG{ptr_rim%}=taille_rim%
- ADD taille_totale_rim%,taille_rim%
- ADD ptr_rim%,taille_rim%
- INC nombre_rim&
- ENDSELECT
- ENDIF
- ENDIF
- CLOSE #51
- retour_fs%=FSNEXT()
- LOOP
- parx_shrink_blk(1,ADD(taille_totale_rim%,ABS(ODD(taille_totale_rim%))))
- ENDIF
- ENDIF
- RETURN
- > PROCEDURE init_3
- '
- FOR i&=2 TO 3
- OB_Y(adtree%(2),cadre&(i&))=OB_Y(adtree%(2),cadre&(1))
- NEXT i&
- OB_H(adtree%(2),0)=OB_Y(adtree%(2),cadre&(1))+OB_H(adtree%(2),cadre&(1))+8
- hd&(2)=OB_H(adtree%(2),0)
- efface_cadre(1)
- '
- CHAR{{OB_SPEC(adtree%(2),cadre&(1)+2)}}=c0$
- CHAR{{OB_SPEC(adtree%(2),cadre&(1)+4)}}=c0$
- CHAR{{OB_SPEC(adtree%(2),cadre&(2)+2)}}=c0$
- FOR i&=2 TO 8
- CHAR{{OB_SPEC(adtree%(2),cadre&(3)+i&)}}=c0$
- NEXT i&
- '
- '
- RETURN
- '
- > PROCEDURE boucle_generale
- boucle_principale:
- endroit%=0
- DO
- evnt&=@ev_multi(&X110011,2,1,1,300,mo_x&,mo_y&,mo_k&,m_touche%,m_clavier%,mo_c&)
- IF BTST(evnt&,4)
- SELECT m_type&
- CASE 10
- boucle_menu
- CASE 20
- redraw
- CASE 21
- win_topped
- CASE 22
- win_closed
- CASE 28
- win_moved
- CASE 29,31
- win_ontop
- CASE 30
- win_untopped
- CASE 50
- shut_down
- CASE 63
- dd_message
- evnt&=0
- CASE 22360
- FOR i&=1 TO 2
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE
- aff!(i&)=FALSE
- ENDIF
- NEXT i&
- CASE 22361
- FOR i&=1 TO 2
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE
- aff!(i&)=TRUE
- ENDIF
- NEXT i&
- ENDSELECT
- ENDIF
- IF BTST(evnt&,5)=TRUE
- INC cpt_garbage%
- IF cpt_garbage%>20
- ~FRE(0)
- ~FRE()
- cpt_garbage%=0
- ENDIF
- ENDIF
- IF BTST(evnt&,0)
- boucle_clavier_generale
- ENDIF
- IF BTST(evnt&,1)
- boucle_souris_generale
- ENDIF
- clear_m_v
- LOOP
- RETURN
- '
- > PROCEDURE boucle_menu
- ~MENU_TNORMAL(adtree%(0),m_titre&,1)
- SELECT m_entree&
- CASE 7
- win(1)
- CASE 16 ! ouvrir
- win(2)
- CASE 17 ! log
- win(3)
- CASE 19 ! prefs
- gere_preference_parx
- CASE 21 ! edit
- sortir2
- ENDSELECT
- RETURN
- > PROCEDURE boucle_souris_generale
- IF mo_c&=1 AND mo_k&=1
- clic_win&=WIND_FIND(mo_x&,mo_y&)
- delai
- IF clic_win&=hand_win&(2) AND aff!(2)=TRUE
- gere_convertion
- ENDIF
- ENDIF
- RETURN
- > PROCEDURE boucle_clavier_generale
- m_clavier&=BYTE(m_clavier%)
- '
- SELECT m_clavier&
- CASE 3 ! ^C
- CASE 5 ! ^E
- CASE 7 ! ^G
- CASE 9 ! ^I
- win(1)
- CASE 12 ! ^L
- win(3)
- CASE 14 ! ^N
- CASE 15 ! ^O
- win(2)
- CASE 16 ! ^P
- gere_preference_parx
- CASE 17 ! ^Q
- sortir2
- CASE 19 ! ^S
- CASE 24 ! ^X
- DEFAULT
- '
- ENDSELECT
- RETURN
- '
- > PROCEDURE win_closed
- FOR i&=1 TO 3
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE
- ferme_win(i&)
- ENDIF
- NEXT i&
- win_untopped
- RETURN
- > PROCEDURE win_moved
- m_x&=MAX(SUCC(screenx&),m_x&)
- m_y&=MAX(SUCC(screeny&),m_y&)
- FOR i&=1 TO 3
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE
- ~WIND_SET(hand_win&(i&),5,m_x&,m_y&,m_l&,m_h&)
- move_win(i&,m_x&,m_y&,m_l&,m_h&)
- ENDIF
- NEXT i&
- RETURN
- > PROCEDURE win_topped
- win_untopped
- FOR i&=1 TO 3
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE
- ~WIND_SET(hand_win&(i&),10,0,0,0,0)
- ENDIF
- NEXT i&
- win_ontop
- RETURN
- > PROCEDURE win_untopped
- RETURN
- > PROCEDURE win_ontop
- RETURN
- > PROCEDURE shut_down
- ~APPL_EXIT()
- QUIT
- RETURN
- > PROCEDURE dd_message
- dd_receive(m_fenetre&,MKI$(m_h&),dd_data$,dd_mem%,dd_byte_len%)
- IF dd_mem%>0 AND dd_data$="ARGS"
- FOR i%=0 TO PRED(dd_byte_len%)
- IF BYTE{ADD(dd_mem%,i%)}=32
- BYTE{ADD(dd_mem%,i%)}=0
- ENDIF
- NEXT i%
- BYTE{ADD(dd_mem%,SUCC(dd_byte_len%))}=0
- BYTE{ADD(dd_mem%,ADD(dd_byte_len%,2))}=0
- dummy$=CHAR{dd_mem%}
- long_dummy%=SUCC(LEN(dummy$))
- IF RINSTR(dummy$,"\")=0
- dummy$=chemin$+dummy$
- ENDIF
- IF RIGHT$(dummy$)<>c0$
- dummy$=dummy$+c0$
- ENDIF
- SELECT dial_type&
- CASE 1
- IF LEN(dummy$)>0 AND dummy$<>c0$ AND @s_exist(dummy$)=TRUE
- nom_image$=dummy$
- CHAR{{OB_SPEC(adtree%(2),6)}}=RIGHT$(nom_image$,29)
- CHAR{{OB_SPEC(adtree%(2),8)}}=RIGHT$(@det_nom$(nom_image$)+".DGI"+c0$,29)
- ENDIF
- black_white(2,6,0)
- black_white(2,8,0)
- CASE 2
- IF LEN(dummy$)>0 AND dummy$<>c0$
- folder_image$=LEFT$(dummy$,RINSTR(dummy$,"\"))
- CHAR{{OB_SPEC(adtree%(2),12)}}=RIGHT$(folder_image$+c0$,29)
- ENDIF
- black_white(2,12,0)
- CASE 3
- del_projet
- dd_read%=dd_mem%
- DO
- IF LEN(dummy$)>0 AND dummy$<>c0$ AND @s_exist(dummy$)=TRUE
- INC nombre_projet&
- IF nombre_projet&>100
- nombre_projet&=100
- ENDIF
- item_projet$(nombre_projet&)=dummy$
- ENDIF
- ADD dd_read%,long_dummy%
- dummy$=CHAR{dd_read%}
- long_dummy%=SUCC(LEN(dummy$))
- IF RINSTR(dummy$,"\")=0
- dummy$=chemin$+dummy$
- ENDIF
- IF RIGHT$(dummy$)<>c0$
- dummy$=dummy$+c0$
- ENDIF
- LOOP UNTIL long_dummy%<2
- affichage_projet
- ENDSELECT
- ~GEMDOS(73,L:dd_mem%)
- ENDIF
- RETURN
- '
- > PROCEDURE win(dial&)
- IF win!(dial&)
- force_top(dial&)
- ELSE
- create_win(dial&)
- 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&),ld&(dial&),dummy&)
- ~WIND_CALC(0,cp_win%(dial&),xd&(dial&),yd&(dial&),ld&(dial&),hd&(dial&),wx&(dial&),wy&(dial&),wl&(dial&),wh&(dial&))
- ~WIND_SET(hand_win&(dial&),2,CARD(SWAP(OB_SPEC(adtree%(nb_tree&),dial&))),CARD(OB_SPEC(adtree%(nb_tree&),dial&)),0,0)
- 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&))
- aff!(dial&)=win!(dial&)
- ELSE
- ~@alerte(1,26)
- win!(dial&)=FALSE
- aff!(dial&)=FALSE
- ENDIF
- RETURN
- > PROCEDURE ferme_win(dial&)
- IF win!(dial&)
- ~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&) AND dial&>0
- ~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 force_update(bar&)
- IF aff!(bar&)=TRUE
- INT{m_adr%}=20
- INT{m_adr%+2}=ap_id&
- INT{m_adr%+4}=0
- INT{m_adr%+6}=hand_win&(bar&)
- INT{m_adr%+8}=screenx&
- INT{m_adr%+10}=screeny&
- INT{m_adr%+12}=screenl&
- INT{m_adr%+14}=screenh&
- force
- ENDIF
- RETURN
- > PROCEDURE force_top(bar&)
- ~WIND_GET(0,10,top_win&,dummy&,dummy&,dummy&)
- IF top_win&<>hand_win&(bar&) AND win!(bar&)
- clear_m
- INT{m_adr%}=21
- INT{m_adr%+2}=ap_id&
- INT{m_adr%+6}=hand_win&(bar&)
- force
- ENDIF
- RETURN
- > PROCEDURE force
- ~APPL_WRITE(ap_id&,16,m_adr%)
- RETURN
- > PROCEDURE clear_m
- FOR i&=0 TO 12 STEP 4
- LONG{ADD(m_adr%,i&)}=0
- NEXT i&
- RETURN
- > PROCEDURE clear_m_v
- m_type&=0
- m_ap_id&=0
- m_nothing&=0
- m_titre&=0
- m_fenetre&=0
- m_entree&=0
- m_x&=0
- m_y&=0
- m_l&=0
- m_h&=0
- RETURN
- '
- > PROCEDURE redraw
- '
- control
- '
- win_untopped
- '
- ~WIND_GET(m_fenetre&,11,rx&,ry&,rl&,rh&)
- WHILE rl&<>0 AND rh&<>0
- IF RC_INTERSECT(m_x&,m_y&,m_l&,m_h&,rx&,ry&,rl&,rh&)
- FOR i&=1 TO 3
- IF m_fenetre&=hand_win&(i&) AND win!(i&)=TRUE AND aff!(i&)=TRUE
- ob_draw(adtree%(i&),0,3,rx&,ry&,rl&,rh&)
- ENDIF
- NEXT i&
- ENDIF
- ~WIND_GET(m_fenetre&,12,rx&,ry&,rl&,rh&)
- WEND
- '
- win_ontop
- '
- uncontrol
- RETURN
- > PROCEDURE black_white(arbre&,fils&,etat&)
- IF fils&>0
- SELECT etat&
- CASE 0
- OB_STATE(adtree%(arbre&),fils&)=BCLR(OB_STATE(adtree%(arbre&),fils&),0)
- CASE 1
- OB_STATE(adtree%(arbre&),fils&)=BSET(OB_STATE(adtree%(arbre&),fils&),0)
- ENDSELECT
- ENDIF
- IF win!(arbre&)=TRUE AND aff!(arbre&)=TRUE
- ~WIND_GET(hand_win&(arbre&),4,xf&,yf&,lf&,hf&)
- ~WIND_GET(hand_win&(arbre&),11,rx&,ry&,rl&,rh&)
- control
- WHILE rl&<>0 AND rh&<>0
- IF RC_INTERSECT(xf&,yf&,lf&,hf&,rx&,ry&,rl&,rh&)
- ob_draw(adtree%(arbre&),fils&,1,rx&,ry&,rl&,rh&)
- ENDIF
- ~WIND_GET(hand_win&(arbre&),12,rx&,ry&,rl&,rh&)
- WEND
- uncontrol
- ENDIF
- RETURN
- '
- > PROCEDURE gere_convertion
- result%=OBJC_FIND(adtree%(2),0,3,mo_x&,mo_y&)
- SELECT result%
- CASE 1
- efface_cadre(1)
- force_update(2)
- CASE 2
- efface_cadre(2)
- force_update(2)
- CASE 3
- efface_cadre(3)
- force_update(2)
- CASE 6
- black_white(2,6,1)
- dummy$=@fileselector2$(chemin$+c0$,"IMAGE.PI1"+c0$)
- IF LEN(dummy$)>0 AND dummy$<>c0$ AND @s_exist(dummy$)=TRUE
- nom_image$=dummy$
- CHAR{{OB_SPEC(adtree%(2),6)}}=RIGHT$(nom_image$,29)
- CHAR{{OB_SPEC(adtree%(2),8)}}=RIGHT$(@det_nom$(nom_image$)+".DGI"+c0$,29)
- ENDIF
- black_white(2,6,0)
- black_white(2,8,0)
- CASE 8
- black_white(2,8,1)
- dummy$=@fileselector2$(chemin$+c0$,"IMAGE.DGI"+c0$)
- IF LEN(dummy$)>0 AND dummy$<>c0$
- CHAR{{OB_SPEC(adtree%(2),5)}}=RIGHT$(@det_nom$(dummy$)+".DGI"+c0$,29)
- ENDIF
- black_white(2,8,0)
- CASE 9
- black_white(2,9,1)
- IF @s_exist(nom_image$)=TRUE
- win(3)
- parx_ouvrir(nom_image$)
- ENDIF
- black_white(2,9,0)
- CASE 12
- black_white(2,12,1)
- dummy$=@fileselector2$(chemin$+c0$,masque$)
- IF LEN(dummy$)>0 AND dummy$<>c0$
- folder_image$=LEFT$(dummy$,RINSTR(dummy$,"\"))
- CHAR{{OB_SPEC(adtree%(2),12)}}=RIGHT$(folder_image$+c0$,29)
- ENDIF
- black_white(2,12,0)
- CASE 13
- black_white(2,13,1)
- win(3)
- retour_fs%=FSFIRST(folder_image$+masque$,1)
- key&=0
- DO
- EXIT IF retour_fs%<>0 OR key&>0 OR RIGHT$(CHAR{FGETDTA()+30},3)="DGI"
- ~GRAF_MKSTATE(dummy&,dummy&,dummy&,key&)
- parx_ouvrir(folder_image$+CHAR{FGETDTA()+30}+c0$)
- retour_fs%=FSNEXT()
- LOOP
- IF key&>0
- affichage_log(CHAR{OB_SPEC(adtree%(5),16)})
- ENDIF
- black_white(2,13,0)
- CASE 16 TO 22
- choisir_projet
- CASE 23
- black_white(2,23,1)
- dec_projet
- black_white(2,23,0)
- CASE 28
- black_white(2,28,1)
- inc_projet
- black_white(2,28,0)
- CASE 24
- black_white(2,24,1)
- ajouter_projet
- black_white(2,24,0)
- CASE 26
- black_white(2,26,1)
- enlever_projet
- black_white(2,26,0)
- CASE 25
- black_white(2,25,1)
- charger_projet
- black_white(2,25,0)
- CASE 27
- black_white(2,27,1)
- sauver_projet
- black_white(2,27,0)
- CASE 29
- black_white(2,29,1)
- win(3)
- FOR k&=1 TO nombre_projet&
- parx_ouvrir(item_projet$(k&))
- NEXT k&
- black_white(2,29,0)
- ENDSELECT
- RETURN
- > FUNCTION det_nom$(nom_recu$)
- nom_export$=MID$(nom_recu$,SUCC(RINSTR(nom_recu$,"\")))
- nom_recu$=LEFT$(nom_recu$,RINSTR(nom_recu$,"\"))
- nom_export$=LEFT$(nom_export$,MAX(0,PRED(INSTR(nom_export$,"."))))
- IF nom_export$=""
- nom_export$="DEFAULT"
- ENDIF
- nom_export$=nom_recu$+nom_export$
- RETURN nom_export$
- ENDFUNC
- > FUNCTION nom_seulement$(nom_recu$)
- dummy$=LEFT$(MID$(nom_recu$,SUCC(RINSTR(nom_recu$,"\"))),13)
- IF RIGHT$(dummy$)<>c0$
- dummy$=dummy$+c0$
- ENDIF
- RETURN dummy$
- ENDFUNC
- > PROCEDURE efface_cadre(cad&)
- FOR i&=1 TO 3
- OB_FLAGS(adtree%(2),cadre&(i&))=BSET(OB_FLAGS(adtree%(2),cadre&(i&)),7)
- OB_STATE(adtree%(2),i&)=BCLR(OB_STATE(adtree%(2),i&),0)
- NEXT i&
- OB_FLAGS(adtree%(2),cadre&(cad&))=BCLR(OB_FLAGS(adtree%(2),cadre&(cad&)),7)
- OB_STATE(adtree%(2),cad&)=BSET(OB_STATE(adtree%(2),cad&),0)
- dial_type&=cad&
- RETURN
- > PROCEDURE charger_projet
- dummy$=@fileselector2$(chemin$+c0$,"PROJECT.P2V"+c0$)
- IF LEN(dummy$)>0 AND dummy$<>c0$ AND @s_exist(dummy$)=TRUE
- del_projet
- OPEN "i",#23,dummy$
- INPUT #23,dummy$
- IF dummy$="2VDI.project"
- INPUT #23,nombre_projet&
- IF nombre_projet&>0
- FOR i&=1 TO nombre_projet&
- INPUT #23,item_projet$(i&)
- NEXT i&
- ENDIF
- ENDIF
- CLOSE #23
- affichage_projet
- ENDIF
- RETURN
- > PROCEDURE sauver_projet
- dummy$=@fileselector2$(chemin$+c0$,"PROJECT.P2V"+c0$)
- IF LEN(dummy$)>0 AND dummy$<>c0$
- IF @s_exist(dummy$)
- KILL dummy$
- ENDIF
- OPEN "o",#24,dummy$
- PRINT #24,"2VDI.project"
- PRINT #24,nombre_projet&
- IF nombre_projet&>0
- FOR i&=1 TO nombre_projet&
- PRINT #24,item_projet$(i&)
- NEXT i&
- ENDIF
- CLOSE #24
- ENDIF
- RETURN
- > PROCEDURE choisir_projet
- select_projet&=SUB(ADD(result%,index_projet&),16)
- affichage_projet
- RETURN
- > PROCEDURE ajouter_projet
- IF nombre_projet&<99
- dummy$=@fileselector2$(chemin$+c0$,"IMAGE.PI1"+c0$)
- IF LEN(dummy$)>0 AND dummy$<>c0$ AND @s_exist(dummy$)=TRUE
- INC nombre_projet&
- IF nombre_projet&>100
- nombre_projet&=100
- ENDIF
- item_projet$(nombre_projet&)=dummy$
- ENDIF
- affichage_projet
- ENDIF
- RETURN
- > PROCEDURE enlever_projet
- IF select_projet&>-1
- DELETE item_projet$(select_projet&)
- DEC nombre_projet&
- IF nombre_projet&=<0
- nombre_projet&=0
- ENDIF
- select_projet&=-1
- affichage_projet
- ENDIF
- RETURN
- > PROCEDURE inc_projet
- INC index_projet&
- affichage_projet
- RETURN
- > PROCEDURE dec_projet
- DEC index_projet&
- affichage_projet
- RETURN
- > PROCEDURE affichage_projet
- index_projet&=MAX(0,MIN(index_projet&,SUB(nombre_projet&,7)))
- FOR i&=1 TO 7
- OB_STATE(adtree%(2),ADD(15,i&))=0
- CHAR{{OB_SPEC(adtree%(2),ADD(15,i&))}}=@nom_seulement$(item_projet$(ADD(index_projet&,i&)))
- NEXT i&
- dummy&=SUB(select_projet&,index_projet&)
- IF dummy&>-1 AND dummy&<8 AND select_projet&>-1
- black_white(2,ADD(16,dummy&),1)
- ENDIF
- black_white(2,15,0)
- RETURN
- > PROCEDURE del_projet
- FOR i&=0 TO 100
- item_projet$(i&)=c0$
- NEXT i&
- index_projet&=0
- select_projet&=-1
- nombre_projet&=0
- RETURN
- '
- > PROCEDURE gere_preference_parx
- control_form(4)
- DO
- result%=FORM_DO(adtree%(4),0)
- IF BTST(OB_STATE(adtree%(4),6),0)
- parx_lire_rim!=TRUE
- ELSE
- parx_lire_rim!=FALSE
- ENDIF
- IF BTST(OB_STATE(adtree%(4),8),0)
- parx_lire_mem!=TRUE
- ELSE
- parx_lire_mem!=FALSE
- ENDIF
- IF BTST(OB_STATE(adtree%(4),11),0)
- parx_lire_trm!=TRUE
- ELSE
- parx_lire_trm!=FALSE
- ENDIF
- IF result%=4
- dummy$=@fileselector2$(chemin$+c0$,c0$)
- dummy$=LEFT$(dummy$,MAX(0,PRED(LEN(dummy$))))
- IF LEN(dummy$)>0 AND dummy$<>""
- parx_sys$=dummy$
- CHAR{{OB_SPEC(adtree%(4),4)}}=RIGHT$(parx_sys$,29)+c0$
- ENDIF
- ENDIF
- IF result%=4 OR result%=14
- OB_STATE(adtree%(4),result%)=BCLR(OB_STATE(adtree%(4),result%),0)
- ENDIF
- IF result%=4
- ~OBJC_DRAW(adtree%(4),0,3,screenx&,screeny&,screenl&,screenh&)
- ENDIF
- LOOP UNTIL result%=14
- uncontrol_form(4)
- '
- endroit%=14
- REPEAT
- err_choix&=1
- OPEN "o",#14,chemin$+tovdi_inf$
- PRINT #14,parx_sys$
- PRINT #14,parx_lire_rim!
- PRINT #14,parx_lire_mem!
- PRINT #14;parx_lire_trm!
- endroit14:
- CLOSE #14
- UNTIL err_choix&=1
- '
- RETURN
- > PROCEDURE parx_ouvrir(nom_fichier$)
- IF @s_exist(nom_fichier$)=TRUE
- IF parx_adr_mem%>0 AND parx_tab_adr%(0)>0
- ~WIND_UPDATE(1)
- ~WIND_UPDATE(3)
- FOR i&=2 TO 9
- parx_libere_blk(i&)
- NEXT i&
- affichage_log("")
- affichage_log("CONVERT: "+RIGHT$(nom_fichier$,39))
- parx_hand_image&=GEMDOS(61,L:V:nom_fichier$,W:0)
- IF parx_hand_image&>0
- IF @parx_load_reco=TRUE
- IF @parx_load_palette=TRUE
- IF @parx_load_image=TRUE
- IF @parx_tramage=TRUE
- sauvegarde
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),8)})
- ENDIF
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),11)})
- ENDIF
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),7)})
- ENDIF
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),6)})
- ENDIF
- ~GEMDOS(62,W:parx_hand_image&)
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),10)})
- ENDIF
- ~WIND_UPDATE(0)
- ~WIND_UPDATE(2)
- FOR i&=2 TO 9
- parx_libere_blk(i&)
- NEXT i&
- IF multi!=FALSE
- ~FORM_DIAL(3,0,0,0,0,screenx&,screeny&,screenl&,screenh&)
- ENDIF
- ELSE
- ~@alerte(1,18)
- gere_preference_parx
- ENDIF
- ~GRAF_MOUSE(0,0)
- ENDIF
- RETURN
- > FUNCTION parx_load_reco
- '
- exit!=FALSE
- parx_reserve_blk(2,2048)
- IF retour_mem%>=parx_size_tab%(2)
- '
- parx_size_image%=GEMDOS(66,L:0,W:parx_hand_image&,W:2)
- ~GEMDOS(66,L:0,W:parx_hand_image&,W:0)
- dummy%=GEMDOS(63,W:parx_hand_image&,L:MIN(parx_size_image%,parx_size_tab%(2)),L:parx_tab_adr%(2))
- '
- parx_ext%=CVL(LEFT$(RIGHT$(nom_fichier$,5),4))
- '
- affichage_log(CHAR{OB_SPEC(adtree%(5),1)})
- '
- ptr_rim%=parx_tab_adr%(1)
- i&=0
- DO
- INC i&
- '
- LONG{img_mfdb%(0)}=XBIOS(3)
- WORD{ADD(img_mfdb%(0),4)}=SUCC(WORK_OUT(0))
- WORD{ADD(img_mfdb%(0),6)}=SUCC(WORK_OUT(1))
- WORD{ADD(img_mfdb%(0),8)}=SUCC(WORK_OUT(0))/16
- WORD{ADD(img_mfdb%(0),10)}=0
- WORD{ADD(img_mfdb%(0),12)}=nb_plan&
- LONG{ADD(img_mfdb%(0),14)}=0
- WORD{ADD(img_mfdb%(0),18)}=parx_hand_image&
- '
- @declare_parx_rim
- retour_rim%=C:parx_test_file%(W:0,L:parx_tab_adr%(2),L:dummy%,L:parx_size_image%,L:parx_ext%,L:img_mfdb%(0))
- SELECT retour_rim%
- CASE 2
- exit!=TRUE
- parx_image_sans_palette!=FALSE
- CASE 3
- exit!=TRUE
- parx_image_sans_palette!=TRUE
- ENDSELECT
- EXIT IF exit!=TRUE
- '
- ADD ptr_rim%,LONG{ptr_rim%}
- '
- LOOP UNTIL i&=nombre_rim&
- ENDIF
- parx_libere_blk(2)
- '
- IF parx_image_sans_palette!=TRUE AND WORD{ADD(img_mfdb%(0),12)}<10
- affichage_log(CHAR{OB_SPEC(adtree%(5),12)})
- RETURN FALSE
- ELSE
- affichage_log(STR$(WORD{ADD(img_mfdb%(0),4)})+" * "+STR$(WORD{ADD(img_mfdb%(0),6)})+", "+STR$(WORD{ADD(img_mfdb%(0),12)})+" BITPLANE(S).")
- RETURN exit!
- ENDIF
- ENDFUNC
- > FUNCTION parx_load_palette
- '
- exit!=FALSE
- parx_seek_pal%=LONG{img_mfdb%(0)}
- parx_leng_pal%=LONG{ADD(img_mfdb%(0),14)}
- parx_nb_plan&=WORD{ADD(img_mfdb%(0),12)}
- parx_nb_coul%=2^MAX(1,parx_nb_plan&)
- '
- parx_reserve_blk(2,SHL(SHR(ADD(MUL(parx_nb_coul%,6),15),4),4))
- IF retour_mem%>=MUL(parx_nb_coul%,6)
- parx_reserve_blk(3,SHL(SHR(ADD(parx_leng_pal%,15),4),4))
- IF retour_mem%>=parx_leng_pal%
- '
- affichage_log(CHAR{OB_SPEC(adtree%(5),2)})
- '
- dummy%=0
- ~GEMDOS(66,L:parx_seek_pal%,W:parx_hand_image&,W:0)
- dummy%=GEMDOS(63,W:parx_hand_image&,L:parx_leng_pal%,L:parx_tab_adr%(3))
- '
- LONG{img_mfdb%(0)}=parx_size_image%
- WORD{ADD(img_mfdb%(0),18)}=parx_hand_image&
- '
- @declare_parx_rim
- retour_rim%=C:parx_get_palette%(W:0,L:parx_tab_adr%(3),L:dummy%,L:parx_tab_adr%(2),L:parx_nb_coul%,L:img_mfdb%(0))
- IF retour_rim%=2 OR retour_rim%=0
- exit!=TRUE
- ENDIF
- '
- ENDIF
- parx_libere_blk(3)
- ENDIF
- '
- RETURN exit!
- ENDFUNC
- > FUNCTION parx_load_image
- '
- exit!=FALSE
- parx_seek_data%=LONG{img_mfdb%(0)}
- parx_leng_data%=LONG{ADD(img_mfdb%(0),14)}
- parx_size_data%=2*WORD{ADD(img_mfdb%(0),8)}*WORD{ADD(img_mfdb%(0),6)}*WORD{ADD(img_mfdb%(0),12)}
- '
- parx_reserve_blk(3,SHL(SHR(ADD(parx_leng_data%,15),4),4))
- IF retour_mem%>=parx_leng_data%
- parx_reserve_blk(4,SHL(SHR(ADD(parx_size_data%,15),4),4))
- IF retour_mem%>=parx_size_data%
- '
- affichage_log(CHAR{OB_SPEC(adtree%(5),3)})
- '
- dummy%=0
- ~GEMDOS(66,L:parx_seek_data%,W:parx_hand_image&,W:0)
- dummy%=GEMDOS(63,W:parx_hand_image&,L:parx_leng_data%,L:parx_tab_adr%(3))
- '
- LONG{img_mfdb%(0)}=parx_tab_adr%(4)
- WORD{ADD(img_mfdb%(0),18)}=parx_hand_image&
- '
- @declare_parx_rim
- retour_rim%=C:parx_do_file%(W:0,L:parx_tab_adr%(3),L:dummy%,L:img_mfdb%(0))
- IF retour_rim%=3 OR retour_rim%>4
- exit!=TRUE
- ENDIF
- ENDIF
- ENDIF
- parx_libere_blk(3)
- '
- RETURN exit!
- ENDFUNC
- > FUNCTION parx_tramage
- '
- ~WIND_UPDATE(0)
- ~WIND_UPDATE(2)
- DO
- evnt&=@ev_multi(&X110000,2,1,1,200,mo_x&,mo_y&,mo_k&,m_touche%,m_clavier%,mo_c&)
- IF BTST(evnt&,4)=TRUE AND m_type&=20
- redraw
- ENDIF
- LOOP UNTIL evnt&=32
- ~WIND_UPDATE(1)
- ~WIND_UPDATE(3)
- '
- IF WORD{ADD(img_mfdb%(0),10)}<>1 OR parx_image_sans_palette!=TRUE
- IF parx_image_sans_palette!=FALSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),17)})
- ENDIF
- exit!=FALSE
- '
- IF parx_nb_coul%>0
- IF parx_size_tab%(3)>0
- parx_libere_blk(3)
- ENDIF
- parx_reserve_blk(3,SHL(SHR(ADD(MUL(parx_nb_coul%,6),15),4),4))
- ENDIF
- IF retour_mem%>=MUL(parx_nb_coul%,6) OR parx_image_sans_palette!=TRUE
- '
- IF parx_nb_coul%>0
- dummy%=parx_tab_adr%(0)
- SELECT MUL(parx_nb_coul%,6)
- CASE 1
- ADD dummy%,12
- CASE 2
- ADD dummy%,26
- CASE 4
- ADD dummy%,54
- CASE 8
- ADD dummy%,166
- ENDSELECT
- BMOVE dummy%,parx_tab_adr%(3),MUL(parx_nb_coul%,6)
- ENDIF
- '
- parx_options_trm&=&X100100
- '
- LONG{img_mfdb%(0)}=parx_tab_adr%(4)
- '
- LONG{img_mfdb%(1)}=0
- WORD{ADD(img_mfdb%(1),4)}=WORD{ADD(img_mfdb%(0),4)}
- WORD{ADD(img_mfdb%(1),6)}=WORD{ADD(img_mfdb%(0),6)}
- WORD{ADD(img_mfdb%(1),8)}=WORD{ADD(img_mfdb%(0),8)}
- WORD{ADD(img_mfdb%(1),10)}=1
- IF parx_image_sans_palette!
- WORD{ADD(img_mfdb%(1),12)}=24
- ELSE
- WORD{ADD(img_mfdb%(1),12)}=parx_nb_plan&
- ENDIF
- '
- @declare_parx_trm
- retour_trm%=C:parx_do_trm%(W:0,W:1,L:0,L:img_mfdb%(0),L:parx_tab_adr%(2),L:img_mfdb%(1),L:parx_tab_adr%(3),W:parx_options_trm&)
- parx_trm_error
- IF retour_trm%>0
- '
- parx_taille_trame%=2*WORD{ADD(img_mfdb%(1),8)}*WORD{ADD(img_mfdb%(1),6)}*WORD{ADD(img_mfdb%(1),12)}
- '
- IF retour_trm%=&H7FFFFFFF
- parx_reserve_blk(5,MAX(16,SUB(C:parx_manag_size%(),ADD(parx_taille_trame%,12800))))
- ELSE
- parx_reserve_blk(5,SHL(SHR(ADD(retour_trm%,15),4),4))
- ENDIF
- IF retour_mem%>=4
- LONG{parx_tab_adr%(5)}=retour_mem%
- ENDIF
- IF retour_mem%<retour_trm%
- exit!=TRUE
- retour_trm%=-2
- ENDIF
- ENDIF
- '
- parx_reserve_blk(6,SHL(SHR(ADD(parx_taille_trame%,15),4),4))
- IF retour_mem%>=parx_taille_trame%
- LONG{img_mfdb%(1)}=parx_tab_adr%(6)
- ELSE
- exit!=TRUE
- retour_trm%=-2
- ENDIF
- '
- LONG{img_mfdb%(0)}=parx_tab_adr%(4)
- LONG{img_mfdb%(1)}=parx_tab_adr%(6)
- '
- IF exit!=FALSE
- retour_trm%=C:parx_do_trm%(W:1,W:1,L:parx_tab_adr%(5),L:img_mfdb%(0),L:parx_tab_adr%(2),L:img_mfdb%(1),L:parx_tab_adr%(3),W:parx_options_trm&)
- ENDIF
- parx_trm_error
- IF retour_trm%=0 AND exit!=FALSE
- exit!=TRUE
- '
- IF parx_image_sans_palette!
- affichage_log(CHAR{OB_SPEC(adtree%(5),15)})
- parx_libere_blk(4)
- parx_reserve_blk(7,SHL(SHR(ADD(DIV(parx_size_tab%(6),3),15),4),4))
- parx_reserve_blk(8,SHL(SHR(ADD(DIV(parx_size_tab%(6),3),15),4),4))
- parx_reserve_blk(9,SHL(SHR(ADD(DIV(parx_size_tab%(6),3),15),4),4))
- IF parx_size_tab%(9)=DIV(parx_size_tab%(6),3)
- '
- ' !!!!!!!!!!!!!!!!!!!!!!!!!! RVB TC colors image separation
- '
- parx_image_width&=PRED(WORD{ADD(img_mfdb%(1),4)})
- parx_image_height&=PRED(WORD{ADD(img_mfdb%(1),6)})
- pc&=0
- FOR ph&=0 TO parx_image_height&
- FOR pw&=0 TO parx_image_width&
- pq&=ADD(MUL(ph&,SUCC(parx_image_width&)),pw&)
- BYTE{ADD(parx_tab_adr%(7),pq&)}=BYTE{ADD(parx_tab_adr%(6),pc&)}
- BYTE{ADD(parx_tab_adr%(8),pq&)}=BYTE{ADD(parx_tab_adr%(6),SUCC(pc&))}
- BYTE{ADD(parx_tab_adr%(9),pq&)}=BYTE{ADD(parx_tab_adr%(6),ADD(pc&,2))}
- ADD pc&,3
- NEXT pw&
- NEXT ph&
- '
- ELSE
- exit!=FALSE
- ENDIF
- ENDIF
- ELSE
- exit!=FALSE
- ENDIF
- ENDIF
- ELSE
- WORD{ADD(img_mfdb%(1),4)}=WORD{ADD(img_mfdb%(0),4)}
- WORD{ADD(img_mfdb%(1),6)}=WORD{ADD(img_mfdb%(0),6)}
- WORD{ADD(img_mfdb%(1),8)}=WORD{ADD(img_mfdb%(0),8)}
- WORD{ADD(img_mfdb%(1),10)}=1
- WORD{ADD(img_mfdb%(1),12)}=parx_nb_plan&
- parx_tab_adr%(6)=parx_tab_adr%(4)
- parx_size_tab%(6)=parx_size_tab%(4)
- parx_tab_adr%(3)=parx_tab_adr%(2)
- parx_size_tab%(3)=parx_size_tab%(2)
- exit!=TRUE
- ENDIF
- RETURN exit!
- ENDFUNC
- > PROCEDURE sauvegarde !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT
- '
- ' address of the MFDB: mfdb%(1) (size=20 bytes)
- ' address of the palette: parx_tab_adr%(3) (size=parx_size_tab%(3))
- ' if palette:
- ' address of the VDI format(=standard mode): parx_tab_adr%(6) (size=parx_size_tab%(6))
- ' if not:
- ' adress of the red part: parx_tab_adr%(7) (size=parx_size_tab%(7)
- ' adress of the green part: parx_tab_adr%(8) (size=parx_size_tab%(8)
- ' adress of the blue part: parx_tab_adr%(9) (size=parx_size_tab%(9)
- '
- nom_file$=@det_nom$(nom_fichier$)+".DGI"+c0$
- IF @s_exist(nom_file$)=TRUE
- affichage_log(CHAR{OB_SPEC(adtree%(5),14)})
- ~GEMDOS(65,L:V:nom_file$)
- ENDIF
- handle&=GEMDOS(60,L:V:nom_file$,W:0)
- IF handle&>0
- LONG{img_mfdb%(1)}=CVL("_DGI") ! modifying the MFDB instead of a pointer
- LONG{ADD(img_mfdb%(1),14)}=0 ! there's the name format (_UNC: uncompressed)
- WORD{ADD(img_mfdb%(1),18)}=0 !
- ~GEMDOS(64,W:handle&,L:20,L:img_mfdb%(1))
- IF parx_image_sans_palette!=FALSE ! if there's a palette
- ' affichage_log(CHAR{OB_SPEC(adtree%(5),4)})
- '
- ' saving the VDI palette (a WORD per mille for Red, one for green
- ' and one for blue) when a palette exists (2->256 colors)
- '
- ' IF GEMDOS(64,W:handle&,L:parx_size_tab%(3),L:parx_tab_adr%(3))<>parx_size_tab%(3)
- ' ~@alerte(1,7)
- ' ENDIF
- ENDIF
- '
- IF parx_image_sans_palette!
- affichage_log(CHAR{OB_SPEC(adtree%(5),13)})
- '
- ' if not palette (TC mode)
- ' saving the differents red, green and blue part of the image
- ' a red pixel has 1byte. So the entire image is in 24bits
- '
- ' the code to separate the rvb is in parx_tramage, AND WAS NOT TESTED
- '
- FOR i&=7 TO 9
- IF GEMDOS(64,W:handle&,L:parx_size_tab%(i&),L:parx_tab_adr%(i&))<>parx_size_tab%(i&)
- ~@alerte(1,7)
- ENDIF
- NEXT i&
- ELSE
- affichage_log(CHAR{OB_SPEC(adtree%(5),5)})
- '
- ' saving the image in standard mode (no interlaced image, see the MFDB)
- ' structure)
- ' first bitplane of the image, then the second...
- '
- IF GEMDOS(64,W:handle&,L:parx_size_tab%(6),L:parx_tab_adr%(6))<>parx_size_tab%(6)
- ~@alerte(1,7)
- ENDIF
- IF parx_tab_adr%(6)=parx_tab_adr%(4)
- parx_tab_adr%(6)=0
- parx_size_tab%(6)=0
- parx_tab_adr%(3)=0
- parx_size_tab%(3)=0
- ENDIF
- ENDIF
- '
- ~GEMDOS(62,W:handle&)
- ELSE
- ~@alerte(1,7)
- ENDIF
- '
- RETURN
- '
- > PROCEDURE parx_reserve_blk(parx_index%,parx_taille%)
- IF parx_tab_adr%(parx_index%)=0
- retour_mem%=C:parx_blk_malloc%(L:V:parx_tab_adr%(0),L:V:parx_size_tab%(0),W:parx_index%,W:parx_nb_slot&,L:parx_taille%,W:0)
- IF retour_mem%<parx_taille%
- ~@alerte(1,23)
- parx_libere_blk(parx_index%)
- ENDIF
- ENDIF
- RETURN
- > PROCEDURE parx_shrink_blk(parx_index%,parx_taille%)
- IF parx_tab_adr%(parx_index%)<>0 OR parx_size_tab%(parx_index%)<>0
- retour_mem%=C:parx_blk_shrink%(L:V:parx_tab_adr%(0),L:V:parx_size_tab%(0),W:parx_index%,W:parx_nb_slot&,L:parx_taille%,L:-1)
- ENDIF
- RETURN
- > PROCEDURE parx_agrand_blk(parx_index%,parx_taille%)
- IF parx_tab_adr%(parx_index%)<>0 OR parx_size_tab%(parx_index%)<>0
- retour_mem%=C:parx_blk_grow%(L:V:parx_tab_adr%(0),L:V:parx_size_tab%(0),W:parx_index%,W:parx_nb_slot&,L:parx_taille%,W:0,L:-1)
- ENDIF
- RETURN
- > PROCEDURE parx_libere_blk(parx_index%)
- IF parx_tab_adr%(parx_index%)>0
- ~C:parx_blk_free%(L:V:parx_tab_adr%(0),L:V:parx_size_tab%(0),W:parx_index%,W:parx_nb_slot&)
- ENDIF
- RETURN
- > PROCEDURE parx_trm_init
- IF parx_tab_adr%(0)>0
- @declare_parx_trm
- retour_trm%=C:parx_do_trm%(W:2,W:0,L:0,L:0,L:0,L:0,L:0,W:0)
- parx_trm_error
- ENDIF
- RETURN
- > PROCEDURE parx_trm_exit
- IF parx_tab_adr%(0)>0
- @declare_parx_trm
- ~C:parx_do_trm%(W:3,W:0,L:0,L:0,L:0,L:0,L:0,W:0)
- ENDIF
- RETURN
- > PROCEDURE parx_trm_error
- IF retour_trm%<>-2 AND retour_trm%<0
- ~FORM_ALERT(1,"[1][| TRM: "+STR$(retour_trm%)+" error.|][ Ok ]")
- ENDIF
- RETURN
- '
- > PROCEDURE affichage_log(message$)
- INSERT texte_aff$(1)=message$
- FOR i&=1 TO 13
- CHAR{{OB_SPEC(adtree%(3),SUB(14,i&))}}=LEFT$(texte_aff$(i&),49)+c0$
- NEXT i&
- black_white(3,0,0)
- RETURN
- > PROCEDURE del_affichage
- FOR i&=1 TO 13
- texte_aff$(i&)=""
- CHAR{{OB_SPEC(adtree%(3),i&)}}=c0$
- NEXT i&
- RETURN
- '
- > PROCEDURE tout_fermer
- FOR i&=1 TO 3
- ferme_win(i&)
- NEXT i&
- 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
- > PROCEDURE gest_err
- SELECT ERR
- CASE -33
- err_type&=0
- CASE -36
- err_type&=1
- CASE -46
- err_type&=2
- CASE 37
- err_type&=3
- CASE -13
- err_type&=4
- CASE -11
- err_type&=5
- CASE -10
- err_type&=6
- DEFAULT
- err_type&=7
- ENDSELECT
- uncontrol
- IF err_type&=7
- ~FORM_ALERT(1,ERR$(ERR))
- ENDIF
- err_choix&=@alerte(1,SUCC(err_type&))
- IF err_type&<7
- SELECT endroit%
- CASE 1
- RESUME endroit1
- CASE 2
- RESUME endroit2
- CASE 3
- RESUME endroit3
- CASE 14
- RESUME endroit14
- CASE 15
- RESUME endroit15
- CASE 16
- RESUME endroit16
- CASE 17
- RESUME endroit17
- CASE 18
- RESUME endroit18
- CASE 23
- RESUME endroit23
- ENDSELECT
- ENDIF
- RETURN
- > PROCEDURE control_form(dial&)
- ~WIND_UPDATE(1)
- ~WIND_UPDATE(3)
- ~FORM_CENTER(adtree%(dial&),xd&(dial&),yd&(dial&),ld&(dial&),hd&(dial&))
- DEC xd&(dial&)
- DEC yd&(dial&)
- ADD ld&(dial&),5
- ADD hd&(dial&),5
- ~FORM_DIAL(0,0,0,0,0,xd&(dial&),yd&(dial&),ld&(dial&),hd&(dial&))
- ~OBJC_DRAW(adtree%(dial&),0,3,screenx&,screeny&,screenl&,screenh&)
- RETURN
- > PROCEDURE uncontrol_form(dial&)
- ~WIND_UPDATE(2)
- ~WIND_UPDATE(0)
- ~FORM_DIAL(3,0,0,0,0,xd&(dial&),yd&(dial&),ld&(dial&),hd&(dial&))
- RETURN
- > FUNCTION alerte(mes_type&,mes&)
- RETURN FORM_ALERT(mes_type&,CHAR{OB_SPEC(adtree%(6),mes&)})
- 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
- > FUNCTION fileselector2$(path$,name$)
- LOCAL path1$,name1$,choix_file&,retour_file&
- LET path1$=path$
- LET name1$=name$
- retour_file&=@fi_input(path1$,name1$,choix_file&)
- IF retour_file&=0 OR choix_file&=0
- RETURN c0$
- ELSE
- RETURN LEFT$(path1$,RINSTR(path1$,"\"))+name1$
- ENDIF
- ENDFUNC
- > FUNCTION fi_input(VAR fi_path$,fi_name$,fi_choix&)
- '
- GCONTRL(0)=90
- GCONTRL(1)=0
- GCONTRL(2)=2
- GCONTRL(3)=2
- 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$
- '
- GEMSYS
- '
- fi_path$=CHAR{V:fi_path$}+c0$
- fi_name$=CHAR{V:fi_name$}+c0$
- fi_choix&=GINTOUT(1)
- '
- RETURN GINTOUT(0)
- 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
- > FUNCTION ev_multi(em_flags&,em_cl&,em_ma&,em_st&,em_ct%,VAR em_mx&,em_my&,em_mk&,em_kbd%,em_key%,em_click&)
- '
- GCONTRL(0)=25
- GCONTRL(1)=16
- GCONTRL(2)=7
- GCONTRL(3)=1
- GCONTRL(4)=0
- '
- GINTIN(0)=em_flags&
- GINTIN(1)=em_cl&
- GINTIN(2)=em_ma&
- GINTIN(3)=em_st&
- GINTIN(4)=0
- GINTIN(5)=0
- GINTIN(6)=0
- GINTIN(7)=0
- GINTIN(8)=0
- GINTIN(9)=0
- GINTIN(10)=0
- GINTIN(11)=0
- GINTIN(12)=0
- GINTIN(13)=0
- INT{ADD(GINTIN,28)}=WORD(em_ct%)
- INT{ADD(GINTIN,30)}=WORD(SWAP(em_ct%))
- '
- ADDRIN(0)=m_adr%
- '
- GEMSYS
- '
- em_mx&=GINTOUT(1)
- em_my&=GINTOUT(2)
- em_mk&=GINTOUT(3)
- em_kbd%=GINTOUT(4)
- em_key%=GINTOUT(5)
- em_click&=GINTOUT(6)
- '
- m_type&=INT{m_adr%}
- m_ap_id&=INT{ADD(m_adr%,2)}
- m_nothing&=INT{ADD(m_adr%,4)}
- m_titre&=INT{ADD(m_adr%,6)}
- m_fenetre&=m_titre&
- m_entree&=INT{ADD(m_adr%,8)}
- m_x&=m_entree&
- m_y&=INT{ADD(m_adr%,10)}
- m_l&=INT{ADD(m_adr%,12)}
- m_h&=INT{ADD(m_adr%,14)}
- '
- RETURN GINTOUT(0)
- ENDFUNC
- > PROCEDURE ob_draw(ob_adr%,ob_start&,ob_dept&,ob_xclip&,ob_yclip&,ob_lclip&,ob_hclip&)
- '
- GCONTRL(0)=42
- GCONTRL(1)=6
- GCONTRL(2)=1
- GCONTRL(3)=1
- GCONTRL(4)=0
- '
- GINTIN(0)=ob_start&
- GINTIN(1)=ob_dept&
- GINTIN(2)=ob_xclip&
- GINTIN(3)=ob_yclip&
- GINTIN(4)=ob_lclip&
- GINTIN(5)=ob_hclip&
- '
- ADDRIN(0)=ob_adr%
- '
- GEMSYS
- '
- RETURN
- > FUNCTION s_exist(exist_name$)
- LOCAL existe&
- IF LEN(exist_name$)=0 OR 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
- > PROCEDURE make_zero_mfdb(pmfdb%)
- LONG{pmfdb%}=0
- LONG{ADD(pmfdb%,4)}=0
- LONG{ADD(pmfdb%,8)}=0
- LONG{ADD(pmfdb%,12)}=0
- LONG{ADD(pmfdb%,16)}=0
- RETURN
- > PROCEDURE make_xyarray(xq0&,yq0&,xq1&,yq1&,xz0&,yz0&,xz1&,yz1&)
- WORD{pxyarray%}=xq0&
- WORD{ADD(pxyarray%,2)}=yq0&
- WORD{ADD(pxyarray%,4)}=xq1&
- WORD{ADD(pxyarray%,6)}=yq1&
- WORD{ADD(pxyarray%,8)}=xz0&
- WORD{ADD(pxyarray%,10)}=yz0&
- WORD{ADD(pxyarray%,12)}=xz1&
- WORD{ADD(pxyarray%,14)}=yz1&
- RETURN
- > PROCEDURE trns_form(pscr_mfdb%,pdes_mfdb%)
- CONTRL(1)=0
- CONTRL(3)=0
- CONTRL(6)=vdi_handle&
- LONG{ADD(CONTRL,14)}=pscr_mfdb%
- LONG{ADD(CONTRL,18)}=pdes_mfdb%
- VDISYS 110
- RETURN
- '
- > PROCEDURE dd_receive(m_fenetre&,dd_ext$,VAR dd_data$,dd_mem%,dd_byte_len%)
- '
- dd_open(dd_path$+dd_ext$+c0$,dd_f_hand&)
- IF dd_f_hand&>0
- '
- dd_reply(dd_f_hand&,dd_ok&)
- '
- dd_datatypes(dd_f_hand&)
- '
- dd_msg&=dd_ext&
- dd_cnt%=0
- dd_mem%=0
- dd_byte_len%=0
- REPEAT
- '
- fread(dd_f_hand&,aa_start%,2)
- IF retour_g%>0
- '
- dd_len%=MIN(CARD{aa_start%},1024)
- fread(dd_f_hand&,aa_start%,dd_len%)
- IF retour_g%>0
- '
- dd_data$=MKL$(LONG{aa_start%})
- dd_byte_len%=LONG{aa_start%+4}
- '
- IF dd_data$="ARGS"
- dd_msg&=dd_ok&
- ELSE
- dd_msg&=dd_ext&
- ENDIF
- '
- IF dd_msg&>=0
- IF dd_msg&=dd_ok&
- dd_mem%=GEMDOS(72,L:ADD(dd_byte_len%,16))
- IF dd_mem%<=0
- dd_msg&=dd_len&
- ENDIF
- ENDIF
- '
- dd_reply(dd_f_hand&,dd_msg&)
- '
- IF dd_msg&=dd_len&
- dd_datatypes(dd_f_hand&)
- ENDIF
- '
- INC dd_cnt%
- '
- ENDIF
- retour_g%=1
- ENDIF
- ENDIF
- UNTIL dd_msg&<=0 OR dd_cnt%>8 OR retour_g%<=0
- '
- IF retour_g%>0
- IF dd_cnt%>8 AND dd_msg&=dd_ok&
- dd_reply(dd_f_hand&,dd_nak&)
- ELSE IF dd_msg&=dd_ok& AND dd_cnt%<=8
- IF dd_mem%>0
- fread(dd_f_hand&,dd_mem%,dd_byte_len%)
- ENDIF
- ENDIF
- ENDIF
- '
- dd_close(dd_f_hand&)
- '
- ENDIF
- RETURN
- > PROCEDURE dd_open(dd_f$,VAR dd_f_hand&)
- fopen(dd_f$,2,dd_f_hand&)
- RETURN
- > PROCEDURE dd_close(dd_f_hand&)
- fclose(dd_f_hand&)
- RETURN
- > PROCEDURE dd_reply(dd_f_hand&,dd_flg&)
- BYTE{aa_start%}=dd_flg&
- fwrite(dd_f_hand&,aa_start%,1)
- RETURN
- > PROCEDURE dd_datatypes(dd_f_hand&)
- CHAR{aa_start%}="ARGS"
- FOR i%=4 TO 28 STEP 4
- CHAR{aa_start%+i%}=STRING$(4,0)
- NEXT i%
- fwrite(dd_f_hand&,aa_start%,32)
- RETURN
- '
- > PROCEDURE fcreate(dd_f$,flg%,VAR dd_f_hand&)
- dd_f_hand&=GEMDOS(60,L:V:dd_f$,W:flg%)
- RETURN
- > PROCEDURE fopen(dd_f$,flg%,VAR dd_f_hand&)
- dd_f_hand&=GEMDOS(61,L:V:dd_f$,W:flg%)
- RETURN
- > PROCEDURE fclose(dd_f_hand&)
- retour_g%=GEMDOS(62,W:dd_f_hand&)
- RETURN
- > PROCEDURE fread(dd_f_hand&,adr%,flg%)
- retour_g%=GEMDOS(63,W:dd_f_hand&,L:flg%,L:adr%)
- RETURN
- > PROCEDURE fwrite(dd_f_hand&,adr%,flg%)
- retour_g%=GEMDOS(64,W:dd_f_hand&,L:flg%,L:adr%)
- RETURN
-