home *** CD-ROM | disk | FTP | other *** search
- /* --------------------------------------------------------------------
- * FSDATA.C - PathMaster(tm) Super File Selector structure data.
- * Copyright © 1987-1989 by Justin V. McCormick. All Rights Reserved.
- * -------------------------------------------------------------------- */
-
- #include <exec/types.h>
- #include <exec/nodes.h>
- #include <exec/lists.h>
- #include <exec/memory.h>
- #include <exec/ports.h>
- #include <exec/io.h>
- #include <exec/semaphores.h>
- #include <graphics/gfx.h>
- #include <graphics/view.h>
- #include <graphics/rastport.h>
- #include <graphics/layers.h>
- #include <graphics/text.h>
- #include <intuition/intuition.h>
- #include <libraries/dos.h>
-
- #include "fs.h"
-
- /* Buffers for string gadgets */
- BYTE FileUndoBuffer[PATHSTRSIZE]; /* StringInfo undo buffer */
- BYTE FileUndoName[FILESTRSIZE]; /* StringInfo undo for filename */
- BYTE FSIgnorePat[FILESTRSIZE]; /* Pattern to avoid buffer */
- BYTE fspathbuf1[PATHSTRSIZE];
- BYTE fspathbuf2[PATHSTRSIZE];
- BYTE FSPatternUndoBuffer[MATCHSTRSIZE]; /* FSPatternInfo undo */
- BYTE FSWinTitleStr[80]; /* Global window title buffer */
- BYTE FSwstr[PATHSTRSIZE*2]; /* General purpose work buffer */
-
- /* Strings for IntuiText */
- UBYTE DevLabelStr0[8] = "";
- UBYTE DevLabelStr1[8] = "";
- UBYTE DevLabelStr2[8] = "";
- UBYTE DevLabelStr3[8] = "";
- UBYTE FSPathLabelStr[] = "PATH";
- UBYTE FSFileLabelStr[] = "FILE";
- UBYTE EmptyStr[] = "";
- UBYTE FSPatternLabelStr[] = "PATTERN";
- UBYTE FSDevSortLabelStr[] = "DEVICE SORT";
- UBYTE ParentLabelStr[] = "Parent";
- UBYTE RootLabelStr[] = "Root";
- UBYTE FSUndoLabelStr[] = "Last Dir";
- UBYTE AlphaLabelStr[] = "Alpha";
- UBYTE SizeLabelStr[] = "Size";
- UBYTE TimeLabelStr[] = "Date";
-
- /* Other strings used for formatting and comparisons */
- UBYTE fsdayspermonth[12] =
- {
- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
- };
- BYTE fsdatefmtstr[] = "%02ld-%02ld-%02ld %02ld:%02ld:%02ld";
- BYTE fsbaddatestr[] = "00-00-00 00:00:00";
- BYTE fstempdate[40];
- BYTE FSSizeFmtStr[] = "%8ld ";
- BYTE FSDirFmtStr[] = " DIR ";
- BYTE SlashStr[] = "/";
- BYTE ColonStr[] = ":";
- BYTE SplatStr[] = "*";
- BYTE RamDirNameStr[] = "RAM:";
-
- #ifdef BENCHMARK
- BYTE timermsg1[] = "Elapsed";
- #endif
-
- /* Damn long chunk of error messages */
- BYTE fserrmsg0[] = "File in use";
- BYTE fserrmsg1[] = "File already exists";
- BYTE fserrmsg2[] = "Directory not found!";
- BYTE fserrmsg3[] = "Path not found!";
- BYTE fserrmsg4[] = "Unknown DOS packet";
- BYTE fserrmsg5[] = "Invalid stream name";
- BYTE fserrmsg6[] = "Invalid file lock";
- BYTE fserrmsg7[] = "File not of required type";
- BYTE fserrmsg8[] = "Disk not validated";
- BYTE fserrmsg9[] = "Disk write protected!";
- BYTE fserrmsg10[] = "Rename across devices";
- BYTE fserrmsg11[] = "Directory not empty";
- BYTE fserrmsg12[] = "Too many subdirectories!";
- BYTE fserrmsg13[] = "Volume not available!";
- BYTE fserrmsg14[] = "Seek error!";
- BYTE fserrmsg15[] = "Comment too long";
- BYTE fserrmsg16[] = "Disk full!";
- BYTE fserrmsg17[] = "File delete protected!";
- BYTE fserrmsg18[] = "File write protected!";
- BYTE fserrmsg19[] = "File read protected?";
- BYTE fserrmsg20[] = "Not a DOS disk!";
- BYTE fserrmsg21[] = "No disk in drive!";
- BYTE fserrmsg22[] = "Empty Directory!";
- BYTE fserrmsg23[] = "No Directory!";
- BYTE fserrmsg24[] = "Nothing matched PATTERN";
- BYTE fserrmsg25[] = "Unknown Error!";
- BYTE fserrmsg26[] = "No RAM?!";
- BYTE fserrmsg27[] = "Reading...";
- BYTE fserrmsg28[] = "Sorting...";
- BYTE fserrmsg29[] = "Select Filename:";
-
- BYTE *fserrmsgs[] =
- {
- fserrmsg0,
- fserrmsg1,
- fserrmsg2,
- fserrmsg3,
- fserrmsg4,
- fserrmsg5,
- fserrmsg6,
- fserrmsg7,
- fserrmsg8,
- fserrmsg9,
- fserrmsg10,
- fserrmsg11,
- fserrmsg12,
- fserrmsg13,
- fserrmsg14,
- fserrmsg15,
- fserrmsg16,
- fserrmsg17,
- fserrmsg18,
- fserrmsg19,
- fserrmsg20,
- fserrmsg21,
- fserrmsg22,
- fserrmsg23,
- fserrmsg24,
- fserrmsg25,
- fserrmsg26,
- fserrmsg27,
- fserrmsg28,
- fserrmsg29
- };
-
- #ifdef STANDALONE
- struct TextFont *FSTextFont; /* TextFont pointer for Text */
- struct TextAttr Def8Text =
- {
- (UBYTE *)"topaz.font", /* Font Name */
- 8, /* Font Height */
- FS_NORMAL, /* Style */
- FPF_ROMFONT /* Preferences */
- };
- BYTE TimerName[] = "timer.device";
- #else
- extern struct TextAttr Def8Text;
- #endif
-
- /* IntuiText for Path and File labels */
- struct IntuiText FSDevSortTxt = { LABELFPEN, LABELBPEN, JAM2, 350, 0, &Def8Text, FSDevSortLabelStr, 0L };
- struct IntuiText FSPatternTxt = { LABELFPEN, LABELBPEN, JAM2, 0, 24, &Def8Text, FSPatternLabelStr, &FSDevSortTxt };
- struct IntuiText FSFileTxt = { LABELFPEN, LABELBPEN, JAM2, 0, 12, &Def8Text, FSFileLabelStr, &FSPatternTxt };
- struct IntuiText FSPathTxt = { LABELFPEN, LABELBPEN, JAM2, 0, 0, &Def8Text, FSPathLabelStr, &FSFileTxt };
-
- /* Gadgets ------------------------------------------------------------ */
- /* The File Gadgets */
- WORD FSGBox2[] =
- {
- 4,11, 461,11, 461,22, 4,22, 4,33, 461,33, 461,44, 4,44, 4,55, 461,55,
- 461,66, 4,66, 4,77, 461,77, 461,88, 4,88, 4,99, 461,99, 461,110, 4,110,
- 4,121, 461,121, 461,11, 4,11, 4,121
- };
- struct Border FSFileGadBorder = { -5, -12, SBORDFPEN, SBORDBPEN, JAM1, 25, FSGBox2, 0L };
- struct Gadget FSFileGad0 =
- {
- 0L, 5, 12, 456, 109, GADGHNONE, GADGIMMEDIATE, BOOLGADGET,
- (APTR)&FSFileGadBorder, 0L, 0L, 0L, 0L, 50, 0L
- };
-
- /* Arrow stuff */
- WORD FSSlideBData[] = { 0,-1, 26,-1, 26,85, 0,85, 0,-1 };
- WORD FSABox2[] = { 0,0, 13,0, 13,10, 0,10, 0,0 };
- WORD FSABox1[] = { 0,0, 26,0, 26,10, 0,10, 0,0 };
- WORD FSUpArrowData[] = { 14, 2, 14, 8, 13, 8, 13, 2, 12, 3, 15, 3, 16, 4, 11, 4, 10, 5, 17, 5 };
- struct Border FSSlideBorder = { 0, -87, SBORDFPEN, 0, JAM1, 5, FSSlideBData, 0L };
- struct Border FSUpArrow2 = { -7, 0, ARROWFPEN, 0, JAM1, 10, FSUpArrowData, 0L };
- struct Border FSUpBorder2 = { 0, 0, ARROWBPEN, 0, JAM1, 5, FSABox2, &FSUpArrow2 };
- struct Border FSUpArrow = { 0, 0, ARROWFPEN, 0, JAM1, 10, FSUpArrowData, &FSSlideBorder };
- struct Border FSUpBorder = { 0, 0, ARROWBPEN, 0, JAM1, 5, FSABox1, &FSUpArrow };
-
- WORD FSDownArrowData[] = { 14, 8, 14, 2, 13, 2, 13, 8, 12, 7, 15, 7, 16, 6, 11, 6, 10, 5, 17, 5 };
- struct Border FSDownArrow2 = { -7, 0, ARROWFPEN, 0, JAM1, 10, FSDownArrowData, 0L };
- struct Border FSDownBorder2 = { 0, 0, ARROWBPEN, 0, JAM1, 5, FSABox2, &FSDownArrow2 };
- struct Border FSDownArrow = { 0, 0, ARROWFPEN, 0, JAM1, 10, FSDownArrowData, 0L };
- struct Border FSDownBorder = { 0, 0, ARROWBPEN, 0, JAM1, 5, FSABox1, &FSDownArrow };
-
- struct Gadget FSNextDevs =
- {
- &FSFileGad0,
- 308, 146, 14, 11, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, BOOLGADGET,
- (APTR)&FSUpBorder2, 0L, 0L, 0L, 0L, 43, 0L
- };
- struct Gadget FSPrevDevs =
- {
- &FSNextDevs,
- 308, 158, 14, 11, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, BOOLGADGET,
- (APTR)&FSDownBorder2, 0L, 0L, 0L, 0L, 42, 0L
- };
-
- struct Gadget FSDownGad =
- {
- &FSPrevDevs,
- 464, 111, 27, 11, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, BOOLGADGET,
- (APTR)&FSDownBorder, 0L, 0L, 0L, 0L, 41, 0L
- };
- struct Gadget FSUpGad =
- {
- &FSDownGad,
- 464, 99, 27, 11, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, BOOLGADGET,
- (APTR)&FSUpBorder, 0L, 0L, 0L, 0L, 40, 0L
- };
-
- /* Our Slide gadget */
- struct Image FSSlideKnob;
- struct PropInfo FSSlideProp = { AUTOKNOB|FREEVERT|PROPBORDERLESS, 0, 0, 0xffff, 0xffff, 0, 0, 0, 0, 0, 0 };
- struct Gadget FSSlideGad =
- {
- &FSUpGad,
- 467, 13, 21, 83, GADGHNONE|GADGIMAGE, GADGIMMEDIATE|RELVERIFY, PROPGADGET,
- (APTR)&FSSlideKnob, 0L, 0L, 0L, (APTR)&FSSlideProp, 33, 0L
- };
-
- /* The three string gadgets */
- WORD FSGBox4[] = { 0, 0, 238, 0, 238, 11, 0, 11, 0, 0 };
- struct Border FSStringBord2 = { -3, -2, SBORDFPEN, SBORDBPEN, JAM1, 5, FSGBox4, 0L };
- WORD FSGBox3[] = { 0, 0, 262, 0, 262, 11, 0, 11, 0, 0 };
- struct Border FSStringBord = { -3, -2, SBORDFPEN, SBORDBPEN, JAM1, 5, FSGBox3, 0L };
-
- struct StringInfo FSPathInfo = { 0L, (UBYTE *)FileUndoBuffer, 0, PATHSTRSIZE-1, 0, 0, 0, 0, 0, 0, 0L, 0L, 0L };
- struct Gadget FSPathGad =
- {
- &FSSlideGad, 42, 125, 260, 10, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, STRGADGET,
- (APTR)&FSStringBord, 0L, 0L, 0L, (APTR)&FSPathInfo, 32, 0L
- };
-
- struct StringInfo FSFileInfo = { 0L, (UBYTE *)FileUndoName, 0, FILESTRSIZE-1, 0, 0, 0, 0, 0, 0, 0L, 0L, 0L };
- struct Gadget FSFileGad =
- {
- &FSPathGad, 42, 136, 260, 10, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, STRGADGET,
- (APTR)&FSStringBord, 0L, 0L, 0L, (APTR)&FSFileInfo, 31, 0L
- };
-
- struct StringInfo FSPatternInfo = { 0L, (UBYTE *)FSPatternUndoBuffer, 0, FILESTRSIZE-1, 0, 0, 0, 0, 0, 0, 0L, 0L, 0L };
- struct Gadget FSPatternGad =
- {
- &FSFileGad, 66, 147, 236, 10, GADGHCOMP, GADGIMMEDIATE|RELVERIFY, STRGADGET,
- (APTR)&FSStringBord2, 0L, 0L, 0L, (APTR)&FSPatternInfo, 30, 0L
- };
-
- /* The directory gadgets */
- struct Image FSDirImg2 = { 1,1, 51,9, 0, 0L, 0, GADFILLPEN, 0L };
- struct Image FSDirImg1 = { 0,0, 53,11, 0, 0L, 0, GADBORDPEN, &FSDirImg2 };
-
- struct IntuiText ParentTxt = { GADTFPEN, GADTBPEN, JAM2, 3, 2, &Def8Text, ParentLabelStr, 0L };
- struct Gadget ParentGad =
- {
- &FSPatternGad,
- 324, 134, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &ParentTxt, 0L, 0L, 25, 0L
- };
-
- struct IntuiText RootTxt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, RootLabelStr, 0L };
- struct Gadget RootGad =
- {
- &ParentGad,
- 379, 134, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &RootTxt, 0L, 0L, 24, 0L
- };
-
- struct IntuiText RAMTxt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, DevLabelStr0, 0L };
- struct Gadget RAMGad =
- {
- &RootGad,
- 324, 146, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &RAMTxt, 0L, 0L, 23, 0L
- };
-
- struct IntuiText DF0Txt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, DevLabelStr1, 0L };
- struct Gadget DF0Gad =
- {
- &RAMGad,
- 379, 146, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &DF0Txt, 0L, 0L, 22, 0L
- };
-
- struct IntuiText NIL1Txt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, DevLabelStr2, 0L };
- struct Gadget NIL1Gad =
- {
- &DF0Gad,
- 324, 158, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &NIL1Txt, 0L, 0L, 21, 0L
- };
-
- struct IntuiText NIL2Txt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, DevLabelStr3, 0L };
- struct Gadget NIL2Gad =
- {
- &NIL1Gad,
- 379, 158, 53, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &NIL2Txt, 0L, 0L, 20, 0L
- };
-
- /* Sort gadgets */
- struct IntuiText TimeTxt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, TimeLabelStr, 0L };
- struct Gadget TimeGad =
- {
- &NIL2Gad,
- 438, 158, 53, 11, GADGHCOMP|GADGIMAGE, TOGGLESELECT|GADGIMMEDIATE, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &TimeTxt, 0L, 0L, 12, 0L
- };
-
- struct IntuiText SizeTxt = { GADTFPEN, GADTBPEN, JAM2, 11, 2, &Def8Text, SizeLabelStr, 0L };
- struct Gadget SizeGad =
- {
- &TimeGad,
- 438, 146, 53, 11, GADGHCOMP|GADGIMAGE, TOGGLESELECT|GADGIMMEDIATE, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &SizeTxt, 0L, 0L, 11, 0L
- };
-
- struct IntuiText AlphaTxt = { GADTFPEN, GADTBPEN, JAM2, 6, 2, &Def8Text, AlphaLabelStr, 0L };
- struct Gadget AlphaGad =
- {
- &SizeGad,
- 438, 134, 53, 11, SELECTED|GADGHCOMP|GADGIMAGE, TOGGLESELECT|GADGIMMEDIATE, BOOLGADGET,
- (APTR)&FSDirImg1, 0L, &AlphaTxt, 0L, 0L, 10, 0L
- };
-
- /* Cancel, select and undo gadgets */
- struct Image FSOptImg2 = { 1,1, 72,9, 0, 0L, 0, GADFILLPEN, 0L };
- struct Image FSOptImg1 = { 0,0, 74,11, 0, 0L, 0, GADBORDPEN, &FSOptImg2 };
-
- struct IntuiText FSUndoTxt = { GADTFPEN, GADTBPEN, JAM2, 6, 2, &Def8Text, FSUndoLabelStr, 0L };
- struct Gadget FSUndoGad =
- {
- &AlphaGad,
- 228, 158, 74, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSOptImg1, 0L, &FSUndoTxt, 0L, 0L, 3, 0L
- };
-
- struct IntuiText FSCancelTxt = { GADTFPEN, GADTBPEN, JAM2, 10, 2, &Def8Text, EmptyStr, 0L };
- struct Gadget FSCancelGad =
- {
- &FSUndoGad,
- 146, 158, 74, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSOptImg1, 0L, &FSCancelTxt, 0L, 0L, 2, 0L
- };
-
- struct IntuiText FSSelectTxt = { GADTFPEN, GADTBPEN, JAM2, 13, 2, &Def8Text, EmptyStr, 0L };
- struct Gadget FSSelectGad =
- {
- &FSCancelGad,
- 64, 158, 74, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSOptImg1, 0L, &FSSelectTxt, 0L, 0L, 1, 0L
- };
-
- struct IntuiText FSUserTxt = { GADTFPEN, GADTBPEN, JAM2, 13, 2, &Def8Text, EmptyStr, 0L };
- struct Gadget FSUserGad =
- {
- &FSSelectGad,
- 64, 158, 74, 11, GADGHCOMP|GADGIMAGE, RELVERIFY, BOOLGADGET,
- (APTR)&FSOptImg1, 0L, &FSUserTxt, 0L, 0L, 0, 0L
- };
-
- /* Array of currently visible "gadget" text */
- struct file_node *FSFileNodes[10];
-
- /* Array of pointers to device name Gadgets */
- struct Gadget *DevGads[4] =
- {
- &RAMGad,
- &DF0Gad,
- &NIL1Gad,
- &NIL2Gad
- };
-
- /* Array of pointers to device name IntuiText strings */
- struct IntuiText *DevTxts[4] =
- {
- &RAMTxt,
- &DF0Txt,
- &NIL1Txt,
- &NIL2Txt
- };
-
- /* Array of pointers to currently visible device names */
- UBYTE *CurDevNames[4];
-
- /* AreaFill Pattern */
- UWORD EmptyPattern[2] = { 0x8888, 0x2222 };
-
- /* Window Stuff ------------------------------------------------------- */
- struct NewWindow FSnw =
- {
- 0, 11, 495, 171, 0, 1,
- GADGETUP|GADGETDOWN|MOUSEBUTTONS|RAWKEY|DISKINSERTED|DISKREMOVED|INTUITICKS,
- WINDOWDRAG|WINDOWDEPTH|SMART_REFRESH|NOCAREREFRESH|ACTIVATE|RMBTRAP,
- 0L, 0L, 0L, 0L, 0L, 0, 0, 0, 0, WBENCHSCREEN
- };
- struct DateStamp FSdirstamp; /* DateStamp of last dir locked */
-
- /* Assorted uninitialized Variables */
- struct List *devList; /* List of available devices */
- struct dev_node *lastdev; /* Last visible disk name */
-
- struct List *fnList; /* Head node of dir list */
- struct file_node *topfin; /* Top visible node */
-
- BPTR FSLock; /* FileLock pointer */
- struct FileInfoBlock *FSFib; /* General purpose Fib pointer */
- struct FSRequest *FSReq; /* Global pointer to currentreq */
- struct InfoData *FSInfo; /* InfoData pointer */
- struct MsgPort *FSTimerPort; /* Timer reply port */
- struct RastPort *FSRPort; /* RastPort copy for Text */
- struct timerequest *FSDelayReq; /* Timer IO request */
- struct Window *FSWin = 0L;
-
- ULONG fscurmicros;
- ULONG fscursecs; /* New time value */
- ULONG fsoldmicros;
- ULONG fsoldsecs; /* Time storage for doubleclick */
- ULONG FSSignalMask; /* Wait signal mask */
- ULONG FSSignal; /* FS IDCMP signal bit */
- ULONG FSUserSignal; /* UserIDCMP signal bit */
- UWORD fsflags; /* Copy of FSReq->flags */
- UWORD fsvheight; /* Slide Prop height */
- UWORD fsvposition; /* Slide Prop position */
- WORD FSCountDown; /* IntuiTick counter */
- WORD fsdirlocked; /* Set if Lock()ed a dir */
- WORD FSDone; /* Global exit flag */
- WORD fsnumentries; /* Total count of entries */
- WORD fsprevgadid; /* Last FileGad selected */
- WORD fsstartedstr; /* Started a string entry flag */
- WORD fstitlelength; /* Initial length of title */
- WORD fsneedshow; /* 0=current, 1=needs refresh */
-
- /* Initialized variables */
- BYTE *OldFSPathBuf = fspathbuf2; /* Last path storage */
- BYTE *FSPathBuf = fspathbuf1; /* Current path */
- WORD fsvirgindir = 1; /* New directory flag */
- WORD fstitstatus = 27; /* Current title message # */
-