home *** CD-ROM | disk | FTP | other *** search
-
- /*******************************************************************
- $CRT 03 Jun 1996 : hb
-
- $AUT Holger Burkarth
- $DAT >>FindGad.c<< 29 Jan 1997 13:33:08 - (C) ProDAD
- *******************************************************************/
-
- //##ex mcpp:cppc -gs -o pos:pos/libs/FindGad.library p:pLib/LibCode.o p:/pOS_RKRM/pGadgets/FindGad.c -l pOSStub -l CPPList -l pOS
-
- /***********************************************************
- pOS programing example - Copyright (C) 1995-97 proDAD
-
- This code was written as an easy to understand example,
- how to program pOS features. It is provided 'as-is',
- without any express or implied warranty.
-
- Permission is hereby granted to use, copy and modify
- this source code for any purpose, without fee, subject
- to the following conditions:
-
- (1) This notice may not be removed or altered from any
- source distribution.
-
- (2) Altered source versions must be plainly marked as
- such, and must not be misrepresented as being
- the original source code.
-
- (3) If only executable code is distributed, then the
- accompanying documentation have to state that
- "this software is based in part on examples of
- the pOS developer packet".
-
- (4) Permission for use of this code is granted only
- if the user accepts full responsibility for any
- undesirable consequences. proDAD accept NO LIABILITY
- for damages of any kind.
-
- ©proDAD
- ***********************************************************/
-
- #define __COMPUTER_AMIGA 1
- #define NOMYDEBUG
-
- #include "p:pExec/Library.h"
- #include "p:pExec/Resident.h"
- #include "p:pExec/Memory.h"
- #include "p:pExec/Sema.h"
- #include "p:pExec/Class.h"
- #include "p:pExec/Task.h"
- #include "p:pExec/Diagnos.h"
- #include "p:pExec/TstTags.h"
- #include "p:pDOS/Segment.h"
- #include "p:pDOS/DosSig.h"
- #include "p:pDOS/ScanDir.h"
- #include "p:pDOS/DosTags.h"
- #include "p:pGadget/Gadget.h"
- #include "p:pGadget/GadItem.h"
- #include "p:pScreen/DrawInfo.h"
- #include "p:pIntui/GClass.h"
- #include "p:pIntui/Tags.h"
- #include "p:pIntui/IObj.h"
- #include "p:pIntui/IntuMsg.h"
- #include "p:pIntui/EasyReq.h"
- #include "p:proto/pLibExt.h"
- #include "p:proto/pExec2.h"
- #include "p:proto/pDOS2.h"
- #include "p:proto/pIntui2.h"
- #include "p:proto/pUtil2.h"
- #include "p:proto/pList.h"
-
-
- #ifdef _____ME_____
- #include "grund/inc_string.h"
- #include "grund/inc_limits.h"
- #include "grund/inc_stdio.h"
- #else
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <string.h>
- #include <limits.h>
- #include <stdio.h>
- #ifdef __cplusplus
- }
- #endif
- #endif
-
-
- struct pOS_ExecBase* gb_ExecBase;
- struct pOS_ExecLibFunction* gb_ExecLib;
- struct pOS_DosBase *gb_DosBase;
- struct pOS_IntuiDevice *gb_IntuiBase;
- struct pOS_UtilityBase *gb_UtilityBase;
-
-
- struct FindGadLib
- {
- pOS_Library fg_Lib;
-
- pOS_NClass *fg_FindGadClass;
- };
-
-
- struct FindGadItem
- {
- pOS_GadgetItem fgt_GI;
- UBYTE fgt_Type; /* enum pOS_FileInfoEntryType */
- dossize_t fgt_Size;
-
- CHAR fgt_StrSize[10];
- CHAR fgt_Name[1];
- };
-
-
-
-
-
- struct FindGadData
- {
- pOS_List fgd_List;
- pOS_MemPool fgd_Pool;
- pOS_Semaphore fgd_Sem;
- pOS_Task *fgd_ScanTask;
- const pOS_DrawInfo *fdg_DrawInfo;
- pOS_Window *fgd_Window;
- pOS_List fgd_PreList;
- FindGadItem *fgd_FirstAlterNode;
- FindGadItem *fgd_LastAlterNode;
- UBYTE fgd_RunMode;
- UBYTE fgd_NewNodes;
- UBYTE fgd_Ticks;
- UBYTE Pad;
-
- ULONG fgd_SumFiles,fgd_SumDirs;
-
- pOS_Gadget *fgd_TxGad;
- pOS_Gadget *fgd_LVGad;
- pOS_Gadget *fgd_PatGad;
- pOS_Gadget *fgd_PathGad;
- pOS_Gadget *fgd_OkGad;
- pOS_Gadget *fgd_AbbGad;
- pOS_Gadget *fgd_AllGad;
- pOS_Gadget *fgd_DirGad;
- pOS_Gadget *fgd_FileGad;
-
- const CHAR *fgd_ActPath;
- CHAR fgd_TxBuffer[128];
- };
-
-
-
-
-
- extern ULONG *FuncTable[];
- const CHAR LibraryName[] ="findgad.library";
- const CHAR LibraryIDName[]="findgad.library 1.0 ("__DATE2__")";
-
- const pOS_TagItem LibraryDescribe[]=
- {
- EXTSTTAG_MainOSID, pOS_MAINOSID,
- TAG_END
- };
-
-
- BOOL pLibMain(_R_LB pOS_ExecBase*,_R_A0 FindGadLib*);
- VOID PrintErr(const CHAR* bodyText,...);
-
-
- pOS_ResidentLibInit InitTable=
- {
- sizeof(FindGadLib),
- FuncTable,
- NULL,
- (BOOL(*)(_R_LB pOS_ExecBase*,_R_A0 pOS_Library*))pLibMain
- };
-
-
- /*----------------------------------
- Wird in dieser Library nicht benötigt.
- -----------------------------------*/
- BOOL Open_func(_R_LB FindGadLib*) { return(1); }
- VOID Close_func(_R_LB FindGadLib*) {}
- ULONG Reserved_func(_R_LB FindGadLib*) { return(0); }
-
-
-
- /*----------------------------------
- -----------------------------------*/
- pOS_SegmentLst* Expunge_func(_R_LB FindGadLib* lib)
- {
- lib->fg_Lib.lib_Flags |= LIBF_DELEXP; /* verzögertes Schließen aktivieren */
- if(lib->fg_Lib.lib_OpenCnt==0) { /* alle Verwender aben pOS_CloseLibrary() aufgerufen */
- pOS_SegmentLst* Seg=lib->fg_Lib.lib_Segm;
-
- /*\
- *** LibNode aushängen, ACHTUNG: Expunge wird im FORBID aufgerufen
- \*/
- pOS_ListRemove(&lib->fg_Lib.lib_Node);
-
- if(lib->fg_FindGadClass)
- pOS_DeleteClass(lib->fg_FindGadClass);
-
- _pOS_FreeLibraryMem2(&lib->fg_Lib); /* Lib-Memory freigeben */
-
- pOS_CloseLibrary((pOS_Library*)gb_IntuiBase); /* alle Libs schließen */
- pOS_CloseLibrary((pOS_Library*)gb_DosBase);
- pOS_CloseLibrary((pOS_Library*)gb_UtilityBase);
- return(Seg);
- }
- return(0);
- }
-
-
- ULONG *FuncTable[]=
- {
- (ULONG*)Open_func,
- (ULONG*)Close_func,
- (ULONG*)Expunge_func,
- // ------------
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- // ------------
-
- (ULONG*)ULONG_MAX
- };
-
-
-
- /*******************************************************************************/
-
-
- /*----------------------------------
- Hintergrund-Scan-Process
- -----------------------------------*/
- VOID ScanTaskFunc()
- {
- pOS_Task *ThisTask=pOS_FindTask(NULL);
- FindGadData* Obj=(FindGadData*)ThisTask->tc_UserData[0];
- FindGadItem *Item;
- BOOL Flg;
- BOOL OpsALL,OpsDIR,OpsFILE;
- const CHAR *Path,*Patt;
-
- struct SumAP {
- pOS_AnchorPath AP;
- CHAR Buffer[pOS_DosPathName_MAX];
- } *SAP;
-
- ThisTask->tc_FriendTask=NULL;
-
- Obj->fgd_SumFiles=0;
- Obj->fgd_SumDirs=0;
-
-
- if(SAP=(SumAP*)pOS_AllocMem(sizeof(SumAP),MEMF_PUBLIC)) {
- SAP->AP.ap_BufLen=pOS_DosPathName_MAX;
- SAP->AP.ap_BreakBits=DOSSIGF_CTRL_C;
-
- pOS_LockIntuiGadget(Obj->fgd_Window);
- OpsALL =pOS_GetObjectData(Obj->fgd_AllGad,ICLTAG_Selected);
- OpsDIR =pOS_GetObjectData(Obj->fgd_DirGad,ICLTAG_Selected);
- OpsFILE=pOS_GetObjectData(Obj->fgd_FileGad,ICLTAG_Selected);
- Path=(CHAR*)pOS_GetObjectData(Obj->fgd_PathGad,STRGADTAG_String);
- Patt=(CHAR*)pOS_GetObjectData(Obj->fgd_PatGad,STRGADTAG_String);
- Flg=!pOS_PathMatchFirst(NULL,Path,&SAP->AP,Patt,APF_MultiAssign);
- pOS_UnlockIntuiGadget(Obj->fgd_Window);
-
- if(Flg) {
- Obj->fgd_ActPath=SAP->AP.ap_Buf;
- while(!pOS_PathMatchNext(&SAP->AP)) {
- if(SAP->AP.ap_Flags & APF_IsWild) {
- const pOS_AnchorPathObj *const APObj=pOS_CURRANCHORPATH(&SAP->AP);
-
- if( (SAP->AP.ap_Flags & APF_DoEnterDir) ? OpsDIR:OpsFILE ) {
- UWORD Size=strlen(SAP->AP.ap_Buf);
- pOS_ObtainSemaphore(&Obj->fgd_Sem);
- if(Item=(FindGadItem*)
- pOS_AllocPoolMem(&Obj->fgd_Pool,Size+sizeof(FindGadItem),MEMF_PUBLIC|MEMF_CLEAR)) {
-
- Item->fgt_GI.gdt_Render=NULL; Item->fgt_GI.gdt_Flags=0;
- strcpy(Item->fgt_Name,SAP->AP.ap_Buf);
- Item->fgt_Type=APObj->an_FIB.fib_DirEntryType;
- Item->fgt_Size=APObj->an_FIB.fib_Size;
- pOS_ListAddTail(&Obj->fgd_PreList,&Item->fgt_GI.gdt_Node);
- if(SAP->AP.ap_Flags & APF_DoEnterDir) Obj->fgd_SumDirs++;
- else Obj->fgd_SumFiles++;
- }
- pOS_ReleaseSemaphore(&Obj->fgd_Sem);
- }
- }
- if(!OpsALL) SAP->AP.ap_Flags &= ~APF_DoEnterDir;
- }
- Obj->fgd_ActPath=NULL;
- pOS_PathMatchEnd(&SAP->AP);
-
- if(SAP->AP.ap_FoundBreak==0) {
- Obj->fgd_Ticks=99; // *** damit der Printer nicht umsonst wartet
-
- if(Obj->fgd_SumDirs==0 && Obj->fgd_SumFiles==0) {
- PrintErr("No Entries on path\n<%.60s>\nPattern <%s>",Path,Patt);
- }
- }
- }
- else PrintErr("Cannot found\n<%.60s>",Path);
-
- pOS_FreeMem(SAP,sizeof(SumAP));
- }
-
- pOS_ForbidSchedul();
- Obj->fgd_ScanTask=NULL;
- if(ThisTask->tc_FriendTask)
- pOS_SendSignal(ThisTask->tc_FriendTask,SIGF_Signal);
- }
-
-
-
- /*----------------------------------
- Gad-Sem muß zuvor gelockt sein.
- -----------------------------------*/
- VOID UpdateDataList(FindGadData* obj)
- {
- pOS_NClass *TxtClass;
- FindGadItem *Item,*GI;
-
- if(TxtClass=pOS_OpenClass("itext.class",0)) {
- for(;;) {
- UBYTE IType;
- UWORD P1,P2;
- pOS_ObtainSemaphore(&obj->fgd_Sem);
- Item=(FindGadItem*)pOS_ListRemHead(&obj->fgd_PreList);
- pOS_ReleaseSemaphore(&obj->fgd_Sem);
- if(!Item) break;
-
- IType=Item->fgt_Type & FINFENTYP_FDMask;
- P1=obj->fdg_DrawInfo->dri_Pens[ IType==FINFENTYP_File ? SCRPEN_FileNameSA:SCRPEN_DirNameSA];
- P2=obj->fdg_DrawInfo->dri_Pens[ IType==FINFENTYP_File ? SCRPEN_FileNameIS:SCRPEN_DirNameIS];
-
- if(IType==FINFENTYP_File)
- pOS_SPrintf(Item->fgt_StrSize,"%ld",Item->fgt_Size);
- else strcpy(Item->fgt_StrSize,"<DIR>");
-
- if(Item->fgt_GI.gdt_Render=(pOS_IntuiObj*)pOS_NewIObject(TxtClass,NULL,0,
- IOBJTAG_FGPen, P1,
- IOBJTAG_BGPen, P2,
- IOBJTAG_StaticString, (ULONG)Item->fgt_Name,
- 0)) {
- pOS_IntuiObj *End=Item->fgt_GI.gdt_Render,*IObj;
-
- IObj=(pOS_IntuiObj*)pOS_NewIObject(TxtClass,NULL,0,
- IOBJTAG_FGPen, P1,
- IOBJTAG_BGPen, P2,
- IOBJTAG_StaticString, (ULONG)Item->fgt_StrSize,
- 0);
- if(IObj) {End->iobj_Next=IObj; End=IObj;}
-
- obj->fgd_NewNodes=TRUE;
-
- {
- UBYTE GType,IType=Item->fgt_Type & FINFENTYP_FDMask;
- UBYTE First=0,Last=0;
-
- for(GI=(FindGadItem*)obj->fgd_List.lh_Head;
- GI->fgt_GI.gdt_Node.ln_Succ!=NULL;
- GI=(FindGadItem*)GI->fgt_GI.gdt_Node.ln_Succ) {
- GType=GI->fgt_Type & FINFENTYP_FDMask;
- if(GI==obj->fgd_FirstAlterNode) First=1;
- if(IType>GType) break;
- if(IType==GType && stricmp(Item->fgt_Name,GI->fgt_Name)<0) break;
- if(GI==obj->fgd_LastAlterNode) Last=1;
- }
- pOS_ListInsert(&obj->fgd_List,&Item->fgt_GI.gdt_Node,GI->fgt_GI.gdt_Node.ln_Pred);
- if(First==0 || obj->fgd_FirstAlterNode==NULL) obj->fgd_FirstAlterNode=Item;
- if(Last==1 || obj->fgd_LastAlterNode==NULL) obj->fgd_LastAlterNode=Item;
- }
- }
- }
- pOS_CloseClass(TxtClass);
- }
- }
-
-
-
- /*----------------------------------
- -----------------------------------*/
- VOID DeleteDataList(FindGadData* obj,pOS_List* list)
- {
- FindGadItem* Item;
- for(Item=(FindGadItem*)list->lh_Head;
- Item->fgt_GI.gdt_Node.ln_Succ;
- Item=(FindGadItem*)Item->fgt_GI.gdt_Node.ln_Succ) {
- if(Item->fgt_GI.gdt_Render)
- pOS_IObjDisposeList(Item->fgt_GI.gdt_Render);
- }
- }
-
-
-
-
- /*----------------------------------
- Hintergrund-Process starten
- -----------------------------------*/
- VOID StartTask(FindGadData *obj)
- {
- pOS_ForbidSchedul();
- if(!obj->fgd_ScanTask) {
- obj->fgd_ScanTask=(pOS_Task*)pOS_CreateProcess(
- DOSTAG_Name, (ULONG)"FindGad.task",
- DOSTAG_StackSize, 5000,
- DOSTAG_Priority, 5,
- DOSTAG_Entry, (ULONG)ScanTaskFunc,
- DOSTAG_DefaultProc, TRUE,
- DOSTAG_Data1, (ULONG)obj,
- DOSTAG_Synchronous, FALSE,
- TAG_DONE);
- }
- pOS_PermitSchedul();
- }
-
-
- /*----------------------------------
- Hintergrund-Process stoppen
- -----------------------------------*/
- VOID EndTask(FindGadData *obj)
- {
- pOS_ForbidSchedul();
- if(obj->fgd_ScanTask) {
- obj->fgd_ScanTask->tc_FriendTask=pOS_FindTask(NULL);
- pOS_SendSignal(obj->fgd_ScanTask,DOSSIGF_CTRL_C);
- while(obj->fgd_ScanTask) pOS_WaitSignal(SIGF_Signal);
- }
- pOS_PermitSchedul();
- }
-
-
- /*----------------------------------
- Scanning stoppen und alle Scan-Daten freigeben
- -----------------------------------*/
- VOID StopScanning(FindGadData *obj)
- {
- EndTask(obj);
- if(obj->fgd_LVGad)
- pOS_SetGadgetAttrs(NULL,obj->fgd_LVGad,
- LVGADTAG_List, 0,
- TAG_DONE);
- DeleteDataList(obj,&obj->fgd_List);
- pOS_FreePoolAll(&obj->fgd_Pool);
- pOS_ListInit(&obj->fgd_List);
- pOS_ListInit(&obj->fgd_PreList);
- }
-
- /*----------------------------------
- -----------------------------------*/
- VOID StartScanning(FindGadData *obj)
- {
- StopScanning(obj);
- StartTask(obj);
-
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_LVGad,
- LVGADTAG_List, (ULONG)&obj->fgd_List,
- TAG_DONE);
- obj->fgd_RunMode=TRUE;
- }
-
- /*----------------------------------
- -----------------------------------*/
- VOID SetGadgetStatus(const pOS_Class* cl,FindGadData *obj)
- {
- BOOL Disable=pOS_GetAbsObjectData(cl,obj,ICLTAG_Disabled);
-
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_OkGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_AbbGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode==0),
- TAG_DONE);
-
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_AllGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_DirGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_FileGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_PathGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_PatGad,
- ICLTAG_Disabled, (Disable || obj->fgd_RunMode!=0),
- TAG_DONE);
-
- pOS_SetGadgetAttrs(obj->fgd_Window,obj->fgd_LVGad,
- ICLTAG_Disabled, Disable,
- TAG_DONE);
- }
-
-
- /*----------------------------------
- -----------------------------------*/
- ULONG pOSp_FindGadDispatcher(_R_LB pOS_ExecBase* exec,_R_A0 const pOS_Class* cl,
- _R_A1 FindGadData *obj,_R_A2 pOS_GadgetMethod* mth)
- {
- ULONG ret=0;
-
- switch(mth->imth_Method) {
- // -----
- case ICLMTH_New:
- pOS_SetAbsObjectData(cl,obj,
- GRPGADTAG_SpaceVert, 4,
- GRPGADTAG_PrivateDisable, TRUE,
- ICLTAG_HelpID, (ULONG)"{help:findgad.library.hlp}",
- TAG_DONE);
-
- ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- if(ret!=pOS_CLASSERR) {
- __CONST__ CHAR **Names;
- pOS_Gadget *XGad;
-
- obj->fdg_DrawInfo=(pOS_DrawInfo*)pOS_FindTagData(ICLTAG_DrawInfo,mth->imth_U.imth_New.imnw_Tags,0);
- Names=obj->fdg_DrawInfo->dri_Names;
-
- pOS_ListInit(&obj->fgd_List);
- pOS_ListInit(&obj->fgd_PreList);
- pOS_InitMemPool(&obj->fgd_Pool,4096,MEMF_PUBLIC);
- pOS_InitSemaphore(&obj->fgd_Sem);
-
- obj->fgd_TxGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GTxtBoxClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG)obj->fgd_TxBuffer,
- ICLTAG_AddWidth, 10,
- ICLTAG_AddHeight, 10,
- ICLTAG_HelpID, (ULONG)"TxtInfo",
- TAG_DONE);
-
- obj->fgd_LVGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GLVClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- ICLTAG_StandardDrag, TRUE,
- ICLTAG_AddDragAttName, (ULONG)":ascii/line/",
- LVGADTAG_List, (ULONG)&obj->fgd_List,
- LVGADTAG_HAutoGad, TRUE,
- LVGADTAG_VAutoGad, TRUE,
- LVGADTAG_ReadOnly, TRUE,
- ICLTAG_Gwk, 1,
- LVGADTAG_CursorScroll, TRUE,
- LVGADTAG_HAutoKt, 1,
- TAG_DONE);
-
- obj->fgd_AllGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GCheckBoxClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG*)"_Rekrusiv (ALL)",
- ICLTAG_ShortKey, (ULONG)'R',
- IOBJTAG_Underscore, '_',
- ICLTAG_HelpID, (ULONG)"GAll",
- TAG_DONE);
-
- obj->fgd_DirGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GCheckBoxClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG*)"_Directories",
- ICLTAG_ShortKey, (ULONG)'D',
- IOBJTAG_Underscore, '_',
- ICLTAG_Selected, TRUE,
- ICLTAG_HelpID, (ULONG)"GDirs",
- TAG_DONE);
-
- obj->fgd_FileGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GCheckBoxClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG*)"_Files",
- ICLTAG_ShortKey, (ULONG)'F',
- IOBJTAG_Underscore, '_',
- ICLTAG_Selected, TRUE,
- ICLTAG_HelpID, (ULONG)"GFiles",
- TAG_DONE);
-
- obj->fgd_PatGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GStrClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- STRGADTAG_String, (ULONG)"#?",
- STRGADTAG_DispPos, pOS_DosFileName_MAX,
- STRGADTAG_StdDragAtt, TRUE,
- STRGADTAG_StdDropAtt, TRUE,
- ICLTAG_StdLableName, (ULONG*)"_Muster",
- ICLTAG_RelVerify, TRUE,
- ICLTAG_HelpID, (ULONG)"GPattern",
- TAG_DONE);
-
- obj->fgd_PathGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GPathClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- STRGADTAG_DispPos, pOS_DosPathName_MAX,
- STRGADTAG_StdDragAtt, TRUE,
- STRGADTAG_StdDropAtt, TRUE,
- ICLTAG_StdLableName, (ULONG*)"_Pfad",
- ICLTAG_RelVerify, TRUE,
- ICLTAG_HelpID, (ULONG)"GPath",
- TAG_DONE);
-
- obj->fgd_OkGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GButtonClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG)"_Start",
- ICLTAG_ShortKey, (ULONG)'S',
- ICLTAG_RelVerify, TRUE,
- IOBJTAG_Underscore, '_',
- ICLTAG_HelpID, (ULONG)"GStart",
- TAG_DONE);
-
- obj->fgd_AbbGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GButtonClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- IOBJTAG_StaticString, (ULONG)"_Abbruch",
- ICLTAG_ShortKey, (ULONG)'A',
- ICLTAG_RelVerify, TRUE,
- IOBJTAG_Underscore, '_',
- ICLTAG_HelpID, (ULONG)"GCancel",
- TAG_DONE);
-
- XGad=(pOS_Gadget*)
- pOS_NewIObject(NULL,Names[SCRNAM_GGroupClass],0,
- GRPGADTAG_Horiz, TRUE,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_OkGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_AbbGad,
- TAG_DONE);
-
- pOS_SetAbsObjectData(cl,obj,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_TxGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_LVGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_AllGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_DirGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_FileGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_PatGad,
- GRPGADTAG_AddGadget, (ULONG)obj->fgd_PathGad,
- GRPGADTAG_AddGadget, (ULONG)
- pOS_NewIObject(NULL,Names[SCRNAM_GBarClass],0,
- ICLTAG_DrawInfo, (ULONG)obj->fdg_DrawInfo,
- TAG_DONE),
- GRPGADTAG_AddGadget, (ULONG)XGad,
- TAG_DONE);
- SetGadgetStatus(cl,obj);
- }
- break;
-
- // -----
- case ICLMTH_Dispose:
- StopScanning(obj);
- ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- break;
-
- // -----
- case ICLMTH_Set:
- ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- SetGadgetStatus(cl,obj);
- break;
-
- // -----
- case GCLMTH_Add:
- obj->fgd_Window=mth->imth_U.imth_Add.imad_Info->ici_Window;
- ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- break;
-
- // -----
- case GCLMTH_Rem:
- obj->fgd_Window=NULL;
- ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- break;
-
-
- // -----
- case GCLMTH_Msg:
- if(obj->fgd_RunMode &&
- mth->imth_U.imth_Msg.immg_Msg->im_Class==IDCMP_IntuiTicks) {
- if(obj->fgd_Ticks++>10) {
- obj->fgd_Ticks=0;
- pOS_LockIntuiGadget(obj->fgd_Window);
- UpdateDataList(obj);
- if(obj->fgd_NewNodes) {
- pOS_SetGadgetAttrs(NULL,obj->fgd_LVGad,
- LVGADTAG_HasNewNodes, TRUE,
- LVGADTAG_CalcSlider, TRUE,
- LVGADTAG_FirstDrawItem, (ULONG)obj->fgd_FirstAlterNode,
- LVGADTAG_LastDrawItem, (ULONG)obj->fgd_LastAlterNode,
- TAG_DONE);
- pOS_RefreshGadgetsMd(obj->fgd_Window,obj->fgd_LVGad,1,GCLMTHRE_Update);
- obj->fgd_FirstAlterNode=NULL; obj->fgd_LastAlterNode=NULL;
- obj->fgd_NewNodes=FALSE;
- }
- pOS_UnlockIntuiGadget(obj->fgd_Window);
- if(obj->fgd_ScanTask==NULL) {
- obj->fgd_RunMode=FALSE;
- SetGadgetStatus(cl,obj);
- }
- }
-
- if(obj->fgd_ActPath)
- strcpy(obj->fgd_TxBuffer,obj->fgd_ActPath);
- else if(obj->fgd_SumFiles>0 || obj->fgd_SumDirs>0)
- sprintf(obj->fgd_TxBuffer,"Dirs=%ld Files=%ld",obj->fgd_SumDirs,obj->fgd_SumFiles);
- else {
- strcpy(obj->fgd_TxBuffer,"D O N E");
- if(obj->fgd_RunMode) {
- obj->fgd_RunMode=FALSE;
- SetGadgetStatus(cl,obj);
- }
- }
- pOS_RefreshGadgetsMd(obj->fgd_Window,obj->fgd_TxGad,1,GCLMTHRE_Update);
- }
-
- if(ret=pOS_DoIMethodA(obj->fgd_OkGad,(pOS_Method*)mth)) {
- obj->fgd_RunMode=TRUE;
- SetGadgetStatus(cl,obj);
- StartScanning(obj);
- obj->fgd_Ticks=0;
- }
- else if(ret=pOS_DoIMethodA(obj->fgd_AbbGad,(pOS_Method*)mth)) {
- EndTask(obj);
- SetGadgetStatus(cl,obj);
- }
- else ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- break;
-
-
-
- default: ret=pOS_DoAbsMethodA(cl,obj,(pOS_Method*)mth);
- }
-
- return(ret);
- }
-
-
- /*******************************************************************************/
-
- /*----------------------------------
- -----------------------------------*/
- VOID PrintErr(const CHAR* bodyText,...)
- {
- pOS_EasyStruct ES={
- sizeof(pOS_EasyStruct),
- 0,0,
- "FindGad.library",
- bodyText,
- "_Ok",
- NULL,NULL
- };
- ULONG Idcmp=IDCMP_InactiveWindow;
-
- pOS_EasyRequestArgs(NULL,&ES,&Idcmp,(ULONG*) ((&bodyText)+1) );
- }
-
-
-
-
-
-
- /*----------------------------------
- -----------------------------------*/
- BOOL pLibMain(_R_LB pOS_ExecBase* exec,_R_A0 FindGadLib* lib)
- {
- #ifdef __pOS_EXECPRECODE
- extern struct pOS_ExecBase* gb_ExecBase;
- extern struct pOS_ExecLibFunction* gb_ExecLib;
-
- gb_ExecBase=(struct pOS_ExecBase*)exec;
- gb_ExecLib=*((struct pOS_ExecLibFunction**)lib->fg_Lib.lib_Segm->sel_Seg.seg_Reserved2);
- gb_DosBase =(pOS_DosBase*)pOS_OpenLibrary("pdos.library",0);
- gb_IntuiBase=(pOS_IntuiDevice*)pOS_OpenLibrary("pintui.library",0);
- gb_UtilityBase=(pOS_UtilityBase*)pOS_OpenLibrary("putility.library",0);
- #else
- #error hier fehlt etwas
- #endif
-
- lib->fg_FindGadClass=
- pOS_CreateClass("FindGad.class","grpgad.class",NULL,
- (APTR)pOSp_FindGadDispatcher,
- sizeof(FindGadData),0);
- return(lib->fg_FindGadClass!=NULL);
- }
-
-
-