home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Original C Code written by Stefan Stuntz
- **
- ** Translation into E by Jan Hendrik Schulz
- **
- ** To compile this source you need the files muimaster.m,
- ** mui.m and mui.e that came with this source and Mac2E.
- ** (And of course the E Compiler "EC".)
- */
-
-
- /*
- ** Loading the needed MODULEs
- */
-
- MODULE 'muimaster', 'libraries/mui'
- MODULE 'utility/tagitem', 'utility/hooks'
- MODULE 'intuition/classes', 'intuition/classusr'
- MODULE 'libraries/asl'
-
-
- /*
- ** defining some CONSTs
- */
-
- ENUM ER_NON, ER_MUILIB, ER_APP
-
-
- /*
- ** DEFining the global vars
- */
-
- DEF setAttrsA=0 /* for the SetAttrsA()-problem */
-
-
- /*
- ** Now the two hook-functions
- */
-
- PROC hook_StrObjFunc(pop,str)
-
- DEF x,s,i
-
- GetAttr(MUIA_String_Contents,str,{s})
-
- i:=0
- LOOP
- doMethod(pop,[MUIM_List_GetEntry,i,{x}])
-
- IF x=NIL
-
- SetAttrsA(pop,[setAttrsA+(MUIA_List_Active),MUIV_List_Active_Off,TAG_DONE])
- RETURN MUI_TRUE
-
- ELSEIF StrCmp(x,s,ALL)
-
- SetAttrsA(pop,[setAttrsA+(MUIA_List_Active),i,TAG_DONE])
- RETURN MUI_TRUE
-
- ENDIF
- INC i
- ENDLOOP
- ENDPROC
-
-
- PROC hook_ObjStrFunc(pop,str)
-
- DEF x
-
- doMethod(pop,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{x}])
- SetAttrsA(str,[setAttrsA+(MUIA_String_Contents),x,TAG_DONE])
-
- ENDPROC
-
-
- /*
- ** main PROC with exception handling
- */
-
- PROC main() HANDLE
-
- DEF popNames
- DEF hookStrObj:hook, hookObjStr:hook
- DEF app,window,pop1,pop2,pop3,pop4,pop5,plist
- DEF signals, result, active, running=TRUE
-
- /*
- ** creating the hooks
- */
-
- installhook(hookStrObj, {hook_StrObjFunc})
- installhook(hookObjStr, {hook_ObjStrFunc})
-
- /*
- ** creating array for PopUp
- */
-
- popNames := [ 'Stefan Becker',
- 'Martin Berndt',
- 'Georg Heßmann',
- 'Martin Horneffer',
- 'Martin Huttenloher',
- 'Kai Iske',
- 'Oliver Kilian',
- 'Franke Mariak',
- 'Klaus Melchior',
- 'Armin Sander',
- 'Matthias Scheler',
- 'Andreas Schildbach',
- 'Wolfgang Schildbach',
- 'Christian Scholz',
- 'Markus Stipp',
- 'Ibrahim Solmaz',
- 'Henri Veistera',
- 'Alber Weinert',
- NIL ]
-
- /*
- ** open muimaster.library
- */
-
- IF (muimasterbase := OpenLibrary('muimaster.library',MUIMASTER_VMIN))=NIL THEN Raise(ER_MUILIB)
-
- /*
- ** creating the application
- */
-
- app := MuI_NewObjectA('Application.mui',[TAG_IGNORE,0,
- MUIA_Application_Title , 'Popup-Demo',
- MUIA_Application_Version , '$VER: Popup-Demo 8.37 (03.07.94)',
- MUIA_Application_Copyright , '©1993, Stefan Stuntz',
- MUIA_Application_Author , 'Stefan Stuntz',
- MUIA_Application_Description, 'Demostrate popup objects.',
- MUIA_Application_Base , 'POPUP',
-
- MUIA_Application_Window, window := MuI_NewObjectA('Window.mui',[TAG_IGNORE,0,
- MUIA_Window_Title, 'Popup Objects',
- MUIA_Window_ID , "POPP",
- MUIA_Window_RootObject, MuI_NewObjectA('Group.mui',[TAG_IGNORE,0,
-
- MUIA_Group_Child, MuI_NewObjectA('Group.mui',[MUIA_Group_Columns,(2),
-
- MUIA_Group_Child, MuI_MakeObjectA(MUIO_Label,['File:',Or(MUIO_Label_DoubleFrame,"f")]),
- MUIA_Group_Child, pop1 := MuI_NewObjectA('Popasl.mui',[TAG_IGNORE,0,
- MUIA_Popstring_String, MuI_NewObjectA('String.mui',[TAG_IGNORE,0,MUIA_Frame, MUIV_Frame_String,MUIA_ControlChar , "f",MUIA_String_MaxLen , 256,MUIA_String_Contents, 0,TAG_DONE]),
- MUIA_Popstring_Button, MuI_MakeObjectA(MUIO_PopButton,[MUII_PopFile]),
- ASLFR_TITLETEXT, 'Please select a file...',
- TAG_DONE]),
-
- MUIA_Group_Child, MuI_MakeObjectA(MUIO_Label,['Drawer:',Or(MUIO_Label_DoubleFrame,"d")]),
- MUIA_Group_Child, pop2 := MuI_NewObjectA('Popasl.mui',[TAG_IGNORE,0,
- MUIA_Popstring_String, MuI_NewObjectA('String.mui',[TAG_IGNORE,0,MUIA_Frame, MUIV_Frame_String,MUIA_ControlChar , "d",MUIA_String_MaxLen , 256,MUIA_String_Contents, 0,TAG_DONE]),
- MUIA_Popstring_Button, MuI_MakeObjectA(MUIO_PopButton,[MUII_PopDrawer]),
- ASLFR_TITLETEXT , 'Please select a drawer...',
- ASLFR_DRAWERSONLY, MUI_TRUE,
- TAG_DONE]),
-
- MUIA_Group_Child, MuI_MakeObjectA(MUIO_Label,['Font:',Or(MUIO_Label_DoubleFrame,"o")]),
- MUIA_Group_Child, pop3 := MuI_NewObjectA('Popasl.mui',[TAG_IGNORE,0,
- MUIA_Popstring_String, MuI_NewObjectA('String.mui',[TAG_IGNORE,0,MUIA_Frame, MUIV_Frame_String,MUIA_ControlChar , "o",MUIA_String_MaxLen , 80,MUIA_String_Contents, 0,TAG_DONE]),
- MUIA_Popstring_Button, MuI_MakeObjectA(MUIO_PopButton,[MUII_PopUp]),
- MUIA_Popasl_Type , ASL_FONTREQUEST,
- ASLFO_TITLETEXT , 'Please select a font...',
- TAG_DONE]),
-
- MUIA_Group_Child, MuI_MakeObjectA(MUIO_Label,['Fixed Font:',Or(MUIO_Label_DoubleFrame,"i")]),
- MUIA_Group_Child, pop4 := MuI_NewObjectA('Popasl.mui',[TAG_IGNORE,0,
- MUIA_Popstring_String, MuI_NewObjectA('String.mui',[TAG_IGNORE,0,MUIA_Frame, MUIV_Frame_String,MUIA_ControlChar , "i",MUIA_String_MaxLen , 80,MUIA_String_Contents, 0,TAG_DONE]),
- MUIA_Popstring_Button, MuI_MakeObjectA(MUIO_PopButton,[MUII_PopUp]),
- MUIA_Popasl_Type , ASL_FONTREQUEST,
- ASLFO_TITLETEXT , 'Please select a fixed font...',
- ASLFO_FIXEDWIDTHONLY, MUI_TRUE,
- TAG_DONE]),
-
- MUIA_Group_Child, MuI_MakeObjectA(MUIO_Label,['Thanks To:',Or(MUIO_Label_DoubleFrame,"n")]),
- MUIA_Group_Child, pop5 := MuI_NewObjectA('Popobject.mui',[TAG_IGNORE,0,
- MUIA_Popstring_String, MuI_NewObjectA('String.mui',[TAG_IGNORE,0,MUIA_Frame, MUIV_Frame_String,MUIA_ControlChar , "n",MUIA_String_MaxLen , 60,MUIA_String_Contents, 0,TAG_DONE]),
- MUIA_Popstring_Button, MuI_MakeObjectA(MUIO_PopButton,[MUII_PopUp]),
- MUIA_Popobject_StrObjHook, hookStrObj,
- MUIA_Popobject_ObjStrHook, hookObjStr,
- MUIA_Popobject_Object, plist := MuI_NewObjectA('Listview.mui',[TAG_IGNORE,0,
- MUIA_Listview_List, MuI_NewObjectA('List.mui',[TAG_IGNORE,0,
- MUIA_Frame, MUIV_Frame_InputList,
- MUIA_List_SourceArray, popNames,
- TAG_DONE]),
- TAG_DONE]),
- TAG_DONE]),
- TAG_DONE]),
- TAG_DONE]),
- TAG_DONE]),
- TAG_DONE])
-
- IF app=NIL THEN Raise(ER_APP)
-
- doMethod(window,[MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE,
- app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
-
- doMethod(window,[MUIM_Window_SetCycleChain,pop1,pop2,pop3,pop4,pop5,NIL])
-
- /* A double click terminates the popping list with a successful return value. */
- doMethod(plist,[MUIM_Notify,MUIA_Listview_DoubleClick,MUI_TRUE,
- pop5,2,MUIM_Popstring_Close,MUI_TRUE])
-
- /*
- ** Input loop...
- */
-
- SetAttrsA(window,[setAttrsA+(MUIA_Window_Open),MUI_TRUE,TAG_DONE]);
-
- WHILE running
-
- result := doMethod(app,[MUIM_Application_Input,{signals}])
-
- SELECT result
-
- CASE MUIV_Application_ReturnID_Quit
-
- GetAttr(MUIA_Popasl_Active,pop1,{active})
- IF active=FALSE THEN GetAttr(MUIA_Popasl_Active,pop2,{active})
- IF active=FALSE THEN GetAttr(MUIA_Popasl_Active,pop3,{active})
- IF active=FALSE THEN GetAttr(MUIA_Popasl_Active,pop4,{active})
-
- IF active
- MuI_RequestA(app,window,0,NIL,'OK','Cannot quit now, still\nsome asl popups opened.',NIL)
- ELSE
- running := FALSE
- ENDIF
- ENDSELECT
-
- IF running OR signals THEN Wait(signals)
- ENDWHILE
-
- SetAttrsA(window,[setAttrsA+(MUIA_Window_Open),FALSE,TAG_DONE])
-
- /*
- ** Shut down...
- */
-
- Raise(ER_NON)
-
- EXCEPT
-
- IF app THEN MuI_DisposeObject(app)
- IF muimasterbase THEN CloseLibrary(muimasterbase)
-
- SELECT exception
- CASE ER_MUILIB
- WriteF('Failed to open \s.\n','muimaster.library')
- CleanUp(20)
-
- CASE ER_APP
- WriteF('Failed to create application.\n')
- CleanUp(20)
-
- ENDSELECT
- ENDPROC 0
-
-
- /*
- ** doMethod (written by Wouter van Oortmerssen)
- */
-
- PROC doMethod( obj:PTR TO object, msg:PTR TO msg )
-
- DEF h:PTR TO hook, o:PTR TO object, dispatcher
-
- IF obj
- o := obj-SIZEOF object /* instance data is to negative offset */
- h := o.class
- dispatcher := h.entry /* get dispatcher from hook in iclass */
- MOVEA.L h,A0
- MOVEA.L msg,A1
- MOVEA.L obj,A2 /* probably should use CallHookPkt, but the */
- MOVEA.L dispatcher,A3 /* original code (DoMethodA()) doesn't. */
- JSR (A3) /* call classDispatcher() */
- MOVE.L D0,o
- RETURN o
- ENDIF
- ENDPROC NIL
-
-
- /*
- ** installhook (written by Wouter van Oortmerssen)
- */
-
- PROC installhook(hook,func)
- DEF r
- MOVE.L hook,A0
- MOVE.L func,12(A0)
- LEA hookentry(PC),A1
- MOVE.L A1,8(A0)
- MOVE.L A4,16(A0)
- MOVE.L A0,r
- ENDPROC r
-
- hookentry:
- MOVEM.L D2-D7/A2-A6,-(A7)
- MOVE.L 16(A0),A4
- /* MOVE.L A0,-(A7) I never need a PTR to the hook-structure in my
- hook-functions! therefore I removed this.*/
- MOVE.L A2,-(A7)
- MOVE.L A1,-(A7)
- MOVE.L 12(A0),A0
- JSR (A0)
- LEA 8(A7),A7 /* Changed from LEA 12... to LEA 8... because of
- the removed MOVE above */
- MOVEM.L (A7)+,D2-D7/A2-A6
- RTS
-
- /*
- ** End Of File
- */
-