/* -------------------------------------------------------------------- * FSDATA.C - PathMaster(tm) Super File Selector structure data. * Copyright © 1987-1989 by Justin V. McCormick. All Rights Reserved. * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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 # */