CONST L_SCREEN=0, /* Type of the list (screens or windows )*/
L_WINDOW=1
RAISE ER_MEM IF New()=NIL
RAISE ER_MEM IF String()=NIL
DEF scr=NIL:PTR TO screen, /* Ptr sur l'écran */
visual=NIL, /* Ptr sur visual */
wnd=NIL:PTR TO window, /* Ptr sur fenêtre */
glist=NIL,offy,g,g1,gwb, /* liste des Gadget and listview (g1) WB (gwb)*/
type,infos /* type et infos pour IDCMP */
DEF new_liste:PTR TO lh /* Ma liste */
DEF add_node[1000]:ARRAY OF LONG /* Adresse de noeud */
DEF add_texte[1000]:ARRAY OF LONG /* Texte des noeuds */
DEF add_scr[1000]:ARRAY OF LONG /* Adresse d'écran */
DEF type_liste=L_SCREEN /* initialise liste d'écran */
DEF max_node=1 /* initialise le nombre de noeud */
DEF ac_win,wb_add,check=FALSE /* Adress e de la première windowAnd WB */
/* vérifie CloseScreen quand selectionné */
/* dans le listview */
DEF tattr
PROC main() HANDLE /*"main()"*/
/* Initialise my list */
DEF sig
new_liste:=[0,0,0,0]
IF (sig:=AllocSignal(-1))=NIL THEN checkerror(ER_SIG)
checkerror(initinterface())
checkerror(openinterface())
REPEAT
wait4message()
UNTIL type=IDCMP_CLOSEWINDOW
OpenWorkBench()
Raise(NONE)
EXCEPT
IF sig THEN FreeSignal(sig)
closeinterface()
SELECT exception
CASE NONE; NOP
CASE ER_MEM; WriteF('Mémoire insufisante.\n')
DEFAULT; NOP
ENDSELECT
ENDPROC
PROC initinterface() /*"initinterface()"*/
/* Open library - Remember the address of firstwindow and wb */
IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN RETURN ER_OPENLIB
IF (reqtoolsbase:=OpenLibrary('reqtools.library',37))=NIL THEN RETURN ER_OPENLIB
IF (scr:=LockPubScreen('Workbench'))=NIL THEN RETURN ER_WB
wb_add:=scr
/*IF scr THEN UnlockPubScreen(NIL,scr)*/
ac_win:=wnd
ENDPROC
PROC openinterface() /*"openinterface()"*/
/* Ouvre l\ainterface */
tattr:=['topaz.font',8,0,0]:textattr
IF (visual:=GetVisualInfoA(scr,NIL))=NIL THEN RETURN ER_VISUAL
offy:=scr.wbortop+Int(scr.rastport+58)+1
IF (g:=CreateContext({glist}))=NIL THEN RETURN ER_CONTEXT
new_liste:=[0,0,0,0]
displayscreens()
/* Gadget pour fermeture (close) et ouverture (open) WB */
IF (gwb:=CreateGadgetA(CYCLE_KIND,g,[scr.wborleft+92,12,80,12,'',tattr,1,0,visual,0]:newgadget,[GTCY_LABELS,['CloseWB','OpenWB',0],0]))=NIL THEN RETURN ER_GADGET
/* Gadget pour écran et fenêtre */
IF (g:=CreateGadgetA(CYCLE_KIND,gwb,[scr.wborleft+2,12,80,12,'',tattr,2,0,visual,0]:newgadget,[GTCY_LABELS,['Screens','Windows',0],0]))=NIL THEN RETURN ER_GADGET
/* Boite à cocher (Checkbox) pour CloseScreen */
IF (g:=CreateGadgetA(CHECKBOX_KIND,g,[scr.wborleft+176,13,80,12,'CloseScreen',tattr,4,PLACETEXT_RIGHT,visual,0]:newgadget,NIL))=NIL THEN RETURN ER_GADGET
/* Gadget du ViewList */
IF (g1:=CreateGadgetA(LISTVIEW_KIND,g,[scr.wborleft+2,25,315,50,NIL,NIL,3,0,visual,new_liste]:newgadget,
[GTLV_TOP,0,GTLV_SCROLLWIDTH,15,
GTLV_LABELS,new_liste,0]))=NIL THEN RETURN ER_GADGET
/* Ouvre la fenetre */
IF (wnd:=OpenW(0,0,325,76,$304 OR LISTVIEWIDCMP,2+4+8+WFLG_HASZOOM,'SelectS v0.0a (c) 1993 NasGûl',scr,15,glist))=NIL THEN RETURN ER_WINDOW
errors:=['','ouvrir la"gadtools.library" v37','locker le workbench','prendre le visual infos','créer le contexte','créer les gadgets','ouvrir la fenêtre','allouer menus','Erreur mémoire','Erreur signal']
RtEZRequestA('Ne peut pas \s\n','Ok',0,[errors[er]],[RTEZ_REQTITLE,'SelectS v0.0a',TAG_DONE]:tagitem)
CleanUp(10)
ENDIF
ENDPROC
PROC wait4message() /*"wait4message()"*/
DEF mes:PTR TO intuimessage,g:PTR TO gadget
DEF change_scr=FALSE,test_wb
REPEAT
type:=0
IF mes:=Gt_GetIMsg(wnd.userport)
type:=mes.class
IF (type=IDCMP_GADGETDOWN) OR (type=IDCMP_GADGETUP)